Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0xD42c138fB02bF818Dcb4FBf0156d2DeAD511F519
Balance 0 ETH
Nonce 1
Code Size 4102 bytes
Indexed Transactions 0 (1 on-chain, 1.1% indexed)
External Etherscan · Sourcify

Contract Bytecode

4102 bytes
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063d2f7265a116100a2578063ddb7218811610071578063ddb72188146105d6578063e579ebeb146105f3578063f2fde38b14610610578063fe277aba14610636576101cf565b8063d2f7265a14610471578063d4ee1d9014610479578063d8b66ae114610481578063dd62ed3e146105a8576101cf565b8063a9059cbb116100de578063a9059cbb146103e5578063bcd21cf314610411578063c124352814610443578063d0a8c80114610469576101cf565b80638da5cb5b146103b157806395d89b41146103d55780639b08a22f146103dd576101cf565b8063313ce567116101715780633c775b081161014b5780633c775b0814610373578063428840f61461037b57806370a082311461038357806379ba5097146103a9576101cf565b8063313ce5671461032757806331906ebd146103455780633884d6351461036b576101cf565b806318160ddd116101ad57806318160ddd1461029957806318f873df146102b357806323b872dd146102d457806328292af21461030a576101cf565b806306fdde03146101d4578063095ea7b31461025157806309b22a4d14610291575b600080fd5b6101dc610655565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102165781810151838201526020016101fe565b50505050905090810190601f1680156102435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561026757600080fd5b506001600160a01b0381351690602001356106e3565b604080519115158252519081900360200190f35b61027d61070d565b6102a161071b565b60408051918252519081900360200190f35b6102d2600480360360208110156102c957600080fd5b50351515610721565b005b61027d600480360360608110156102ea57600080fd5b506001600160a01b0381358116916020810135909116906040013561074b565b6102d26004803603602081101561032057600080fd5b5035610789565b61032f6107a5565b6040805160ff9092168252519081900360200190f35b6102a16004803603602081101561035b57600080fd5b50356001600160a01b03166107ae565b6102a16107c0565b6102a16107c6565b6102a16107cc565b6102a16004803603602081101561039957600080fd5b50356001600160a01b03166107d2565b6102d261086b565b6103b96108e6565b604080516001600160a01b039092168252519081900360200190f35b6101dc6108f5565b61027d61094d565b61027d600480360360408110156103fb57600080fd5b506001600160a01b038135169060200135610956565b6102d26004803603606081101561042757600080fd5b506001600160a01b038135169060208101359060400135610ac7565b6103b96004803603602081101561045957600080fd5b50356001600160a01b0316610be0565b6102a1610bfb565b6102a1610c01565b6103b9610c07565b6102d26004803603604081101561049757600080fd5b8101906020810181356401000000008111156104b257600080fd5b8201836020820111156104c457600080fd5b803590602001918460208302840111640100000000831117156104e657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561053657600080fd5b82018360208201111561054857600080fd5b8035906020019184602083028401116401000000008311171561056a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c16945050505050565b6102a1600480360360408110156105be57600080fd5b506001600160a01b0381358116916020013516610d95565b6102d2600480360360208110156105ec57600080fd5b5035610db3565b6102d26004803603602081101561060957600080fd5b5035610dcf565b6102d26004803603602081101561062657600080fd5b50356001600160a01b0316610deb565b6102d26004803603602081101561064c57600080fd5b50351515610e24565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106db5780601f106106b0576101008083540402835291602001916106db565b820191906000526020600020905b8154815290600101906020018083116106be57829003601f168201915b505050505081565b60008082116106f157600080fd5b6106fa83610e55565b1561070457600080fd5b50600092915050565b600c54610100900460ff1681565b60055481565b6000546001600160a01b0316331461073857600080fd5b600c805460ff1916911515919091179055565b600080821161075957600080fd5b61076284610e55565b1561076c57600080fd5b61077583610e55565b1561077f57600080fd5b5060009392505050565b6000546001600160a01b031633146107a057600080fd5b600a55565b60045460ff1681565b600e6020526000908152604090205481565b60085481565b60095481565b600a5481565b60006107dd82610e55565b156107e757600080fd5b600a54600854101580156107ff5750600a5460065410155b801561082357506001600160a01b038281166000908152600f602052604090205416155b1561084b5750600a546001600160a01b0382166000908152600d602052604090205401610866565b506001600160a01b0381166000908152600d60205260409020545b919050565b6001546001600160a01b0316331461088257600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b031681565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156106db5780601f106106b0576101008083540402835291602001916106db565b600c5460ff1681565b600c5460009060ff16801561096b5750600082115b61097457600080fd5b6001600160a01b03831633141561098a57600080fd5b61099383610e55565b1561099d57600080fd5b600c54610100900460ff1680156109ca5750336000908152600f60205260409020546001600160a01b0316155b80156109ef57506001600160a01b038381166000908152600f60205260409020541615155b15610a3557610a00600a5433610e7c565b610a0c600b5484610e7c565b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0385161790555b336000908152600d6020526040902054610a4f9083610f95565b336000908152600d6020526040808220929092556001600160a01b03851681522054610a7b9083610faa565b6001600160a01b0384166000818152600d6020908152604091829020939093558051858152905191923392600080516020610fbb8339815191529281900390910190a350600192915050565b6000546001600160a01b03163314610ade57600080fd5b816006541015610aed57600080fd5b6001600160a01b0383166000908152600d6020526040902054610b109083610faa565b6001600160a01b0384166000908152600d6020526040902055600654610b369083610f95565b6006556040805183815290516001600160a01b03851691600191600080516020610fbb8339815191529181900360200190a36001600160a01b0383166000908152600d6020526040902054610b8b9082610f95565b6001600160a01b0384166000818152600d6020908152604080832094909455835185815293519193600080516020610fbb833981519152929081900390910190a3610bd860055482610f95565b600555505050565b600f602052600090815260409020546001600160a01b031681565b600b5481565b60065481565b6001546001600160a01b031681565b805182511415610d91576000805b8251811015610c5457610c4a82848381518110610c3d57fe5b6020026020010151610faa565b9150600101610c24565b50336000908152600d60205260409020548111610d8f57336000908152600d6020526040902054610c859082610f95565b336000908152600d60205260408120919091555b8351811015610d8d57610cea600d6000868481518110610cb557fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054848381518110610c3d57fe5b600d6000868481518110610cfa57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550838181518110610d3257fe5b60200260200101516001600160a01b0316336001600160a01b0316600080516020610fbb833981519152858481518110610d6857fe5b60200260200101516040518082815260200191505060405180910390a3600101610c99565b505b505b5050565b6000610da083610e55565b15610daa57600080fd5b6106fa82610e55565b6000546001600160a01b03163314610dca57600080fd5b600955565b6000546001600160a01b03163314610de657600080fd5b600b55565b6000546001600160a01b03163314610e0257600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e3b57600080fd5b600c80549115156101000261ff0019909216919091179055565b60006001600160a01b0382161580610e7657506001600160a01b0382166001145b92915050565b8160085410158015610e9057508160065410155b8015610eaa57506010546001600160a01b03828116911614155b8015610ec457506000546001600160a01b03828116911614155b15610d91576001600160a01b0381166000908152600e6020526040812054610eec9084610faa565b90506009548111610d8f576001600160a01b0382166000908152600d6020526040902054610f1a9084610faa565b6001600160a01b0383166000908152600d6020908152604080832093909355600e905220819055600854610f4e9084610f95565b600855600654610f5e9084610f95565b6006556040805184815290516001600160a01b03841691600091600080516020610fbb8339815191529181900360200190a3505050565b600082821115610fa457600080fd5b50900390565b81810182811015610e7657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058200db1b3ad1db2cef634849207df0cc42fbc9e5ce069253c921f4922d750303c1a0029

Verified Source Code Partial Match

Compiler: v0.5.6+commit.b259423e EVM: petersburg Optimization: Yes (200 runs)
GNSToken.sol 182 lines
/**
 *Submitted for verification at Etherscan.io on 2019-07-27
*/

pragma solidity >=0.4.22 <0.7.0;

contract GNSToken{


    // -------------------------SafeMath Start-----------------------------------------------
    //
    function safeAdd(uint a, uint b) private pure returns (uint c) { c = a + b; require(c >= a); }
    function safeSub(uint a, uint b) private pure returns (uint c) { require(b <= a); c = a - b; }
    function safeMul(uint a, uint b) private pure returns (uint c) { c = a * b; require(a == 0 || c / a == b);}
    function safeDiv(uint a, uint b) private pure returns (uint c) { require(b > 0); c = a / b; }
    //
    // -------------------------SafeMath End-------------------------------------------------

    // -------------------------Owned Start-----------------------------------------------
    //
    address public owner;
    address public newOwner;

    // constructor() public {
    //     owner = msg.sender;
    // }

    event OwnershipTransferred(address indexed _from, address indexed _to);
    modifier onlyOwner { require(msg.sender == owner); _; }

    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }
    function acceptOwnership() public {
        require(msg.sender == newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
    //
    // -------------------------Owned End-------------------------------------------------

    // -------------------------ERC20Interface Start-----------------------------------------------
    //
    string public symbol = "GNS";
    string public name = "Genesis";
    uint8 public decimals = 18;
    uint public totalSupply = 988e24;//总量9.88亿

    uint public exchange = 688e24;//用于兑换5.88亿(空投,离线兑换总额)
    uint private retention = 3e26;//自留3亿

    uint public airdrop = 1e26;//空投限额1亿
    uint public airdropLimit = 1e21;//每个地址最多领取空投限制1000
    uint public fadd = 5e19;//添加地址得50
    uint public fshare = 2e19;//邀请得20

    bool public allowTransfer = true;//是否允许交易
    bool public allowAirdrop = true;//是否允许空投

    mapping(address => uint) private balances;
    mapping(address => uint) public airdropTotal;
    mapping(address => address) public airdropRecord;

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

    address private retentionAddress = 0x4FCf2310752A4D919C1819BdD9B155632465373e;
    constructor() public {
        owner = msg.sender;
        airdropRecord[owner] = owner;
        airdropRecord[retentionAddress] = retentionAddress;

        balances[retentionAddress] = retention;
        emit Transfer(address(1), retentionAddress, retention);
    }
    function specialAddress(address addr) private pure returns(bool spe) {//特殊地址,0表示空投和销毁,1表示线下兑换
        spe = (addr == address(0) || addr == address(1));
    }
    function balanceOf(address tokenOwner) public view returns (uint balance) {
        require(specialAddress(tokenOwner) == false);
        if(airdrop >= fadd && exchange >= fadd && airdropRecord[tokenOwner] == address(0)){//如果还有足够的空投额度,没激活
            balance = balances[tokenOwner] + fadd;
        }else{
            balance = balances[tokenOwner];
        }
    }
    function allowance(address tokenOwner, address spender) public pure returns (uint remaining) {
        require(specialAddress(tokenOwner) == false);
        require(specialAddress(spender) == false);
        //------do nothing------
        remaining = 0;
    }
    function activation(uint bounus, address addr) private {
        if(airdrop >= bounus && exchange >= bounus && addr != retentionAddress && addr != owner){//如果还有足够的空投额度,不是保留地址
            uint airdropBounus = safeAdd(airdropTotal[addr], bounus);
            if (airdropBounus <= airdropLimit ) {//没有达到个人领取上限
                balances[addr] = safeAdd(balances[addr], bounus);
                airdropTotal[addr] = airdropBounus;
                airdrop = safeSub(airdrop, bounus);
                exchange = safeSub(exchange, bounus);
                emit Transfer(address(0), addr, bounus);
            }
        }
    }
    function transfer(address to, uint tokens) public returns (bool success) {
        require(allowTransfer && tokens > 0);
        require(to != msg.sender);
        require(specialAddress(to) == false);

        if (allowAirdrop && airdropRecord[msg.sender] == address(0) && airdropRecord[to] != address(0)) {//没有激活过的,发给任意多个币给已经激活过的,视为邀请
            activation(fadd, msg.sender);
            activation(fshare, to);
            airdropRecord[msg.sender] = to;//记录激活数据
        }

        balances[msg.sender] = safeSub(balances[msg.sender], tokens);
        balances[to] = safeAdd(balances[to], tokens);
        emit Transfer(msg.sender, to, tokens);
        success = true;
    }
    function approve(address spender, uint tokens) public pure returns (bool success) {
        require(tokens  > 0);
        require(specialAddress(spender) == false);
        //------do nothing------
        success = false;
    }
    function transferFrom(address from, address to, uint tokens) public pure returns (bool success) {
        require(tokens  > 0);
        require(specialAddress(from) == false);
        require(specialAddress(to) == false);
        //------do nothing------
        success = false;
    }
    //
    // -------------------------ERC20Interface End-------------------------------------------------

    // ------------------------------------------------------------------------
    function offlineExchange(address to, uint tokens, uint fee) public onlyOwner {
        require(exchange >= tokens);
        balances[to] = safeAdd(balances[to], tokens);
        exchange = safeSub(exchange, tokens);
        emit Transfer(address(1), to, tokens);

        balances[to] = safeSub(balances[to], fee);
        emit Transfer(to, address(0), fee);

        totalSupply = safeSub(totalSupply, fee);
    }
    function sendTokens(address[] memory to, uint[] memory tokens) public {
        if (to.length == tokens.length) {
            uint count = 0;
            for (uint i = 0; i < tokens.length; i++) {
                count = safeAdd(count, tokens[i]);
            }
            if (count <= balances[msg.sender]) {
                balances[msg.sender] = safeSub(balances[msg.sender], count);
                for (uint i = 0; i < to.length; i++) {
                    balances[to[i]] = safeAdd(balances[to[i]], tokens[i]);
                    emit Transfer(msg.sender, to[i], tokens[i]);
                }
            }
        }
    }

    // ------------------------------------------------------------------------
    function chAirDropLimit(uint _airdropLimit) public onlyOwner {
        airdropLimit = _airdropLimit;
    }
    function chAirDropFadd(uint _fadd) public onlyOwner {
        fadd = _fadd;
    }
    function chAirDropFshare(uint _fshare) public onlyOwner {
        fshare = _fshare;
    }
    function chAllowTransfer(bool _allowTransfer) public onlyOwner {
        allowTransfer = _allowTransfer;
    }
    function chAllowAirdrop(bool _allowAirdrop) public onlyOwner {
        allowAirdrop = _allowAirdrop;
    }
}

Read Contract

airdrop 0x3884d635 → uint256
airdropLimit 0x3c775b08 → uint256
airdropRecord 0xc1243528 → address
airdropTotal 0x31906ebd → uint256
allowAirdrop 0x09b22a4d → bool
allowTransfer 0x9b08a22f → bool
allowance 0xdd62ed3e → uint256
approve 0x095ea7b3 → bool
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
exchange 0xd2f7265a → uint256
fadd 0x428840f6 → uint256
fshare 0xd0a8c801 → uint256
name 0x06fdde03 → string
newOwner 0xd4ee1d90 → address
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
transferFrom 0x23b872dd → bool

Write Contract 10 functions

These functions modify contract state and require a wallet transaction to execute.

acceptOwnership 0x79ba5097
No parameters
chAirDropFadd 0x28292af2
uint256 _fadd
chAirDropFshare 0xe579ebeb
uint256 _fshare
chAirDropLimit 0xddb72188
uint256 _airdropLimit
chAllowAirdrop 0xfe277aba
bool _allowAirdrop
chAllowTransfer 0x18f873df
bool _allowTransfer
offlineExchange 0xbcd21cf3
address to
uint256 tokens
uint256 fee
sendTokens 0xd8b66ae1
address[] to
uint256[] tokens
transfer 0xa9059cbb
address to
uint256 tokens
returns: bool
transferOwnership 0xf2fde38b
address _newOwner

Recent Transactions

This address has 1 on-chain transactions, but only 1.1% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →