Forkchoice Ethereum Mainnet

Address Contract Verified

Address 0xfB2695bb035bDe2878f58bcfCcab27Cb10e9AF1d
Balance 0 ETH
Nonce 1
Code Size 12831 bytes
Indexed Transactions 0 (1 on-chain, 1.4% indexed)
External Etherscan · Sourcify

Contract Bytecode

12831 bytes
0x60806040526004361061014e575f3560e01c80638a8c523c116100b5578063b3f006741161006e578063b3f006741461046b578063c7003cd014610495578063c816841b146104ab578063d0811807146104d5578063dd62ed3e146104ff578063f2fde38b1461053b57610155565b80638a8c523c1461036d5780638da5cb5b1461037757806395d89b41146103a1578063a457c2d7146103cb578063a6ebb13314610407578063a9059cbb1461042f57610155565b80633950935111610107578063395093511461027957806346bc4258146102b557806359acbe4e146102dd57806370a0823114610305578063715018a614610341578063751039fc1461035757610155565b806306fdde0314610159578063095ea7b3146101835780631678e6f8146101bf57806318160ddd146101e957806323b872dd14610213578063313ce5671461024f57610155565b3661015557005b5f5ffd5b348015610164575f5ffd5b5061016d610563565b60405161017a919061220f565b60405180910390f35b34801561018e575f5ffd5b506101a960048036038101906101a491906122c0565b6105f3565b6040516101b69190612318565b60405180910390f35b3480156101ca575f5ffd5b506101d3610615565b6040516101e09190612340565b60405180910390f35b3480156101f4575f5ffd5b506101fd61061b565b60405161020a9190612340565b60405180910390f35b34801561021e575f5ffd5b5061023960048036038101906102349190612359565b610624565b6040516102469190612318565b60405180910390f35b34801561025a575f5ffd5b50610263610652565b60405161027091906123c4565b60405180910390f35b348015610284575f5ffd5b5061029f600480360381019061029a91906122c0565b61065a565b6040516102ac9190612318565b60405180910390f35b3480156102c0575f5ffd5b506102db60048036038101906102d691906123dd565b6106ff565b005b3480156102e8575f5ffd5b5061030360048036038101906102fe91906123dd565b61078d565b005b348015610310575f5ffd5b5061032b6004803603810190610326919061241b565b61086c565b6040516103389190612340565b60405180910390f35b34801561034c575f5ffd5b506103556108b1565b005b348015610362575f5ffd5b5061036b610938565b005b6103756109c4565b005b348015610382575f5ffd5b5061038b610cb1565b6040516103989190612455565b60405180910390f35b3480156103ac575f5ffd5b506103b5610cd9565b6040516103c2919061220f565b60405180910390f35b3480156103d6575f5ffd5b506103f160048036038101906103ec91906122c0565b610d69565b6040516103fe9190612318565b60405180910390f35b348015610412575f5ffd5b5061042d600480360381019061042891906124a9565b610e4d565b005b34801561043a575f5ffd5b50610455600480360381019061045091906122c0565b610fdf565b6040516104629190612318565b60405180910390f35b348015610476575f5ffd5b5061047f611001565b60405161048c9190612455565b60405180910390f35b3480156104a0575f5ffd5b506104a9611025565b005b3480156104b6575f5ffd5b506104bf611107565b6040516104cc9190612455565b60405180910390f35b3480156104e0575f5ffd5b506104e961112c565b6040516104f69190612340565b60405180910390f35b34801561050a575f5ffd5b50610525600480360381019061052091906124d4565b611132565b6040516105329190612340565b60405180910390f35b348015610546575f5ffd5b50610561600480360381019061055c919061241b565b6111b4565b005b6060600380546105729061253f565b80601f016020809104026020016040519081016040528092919081815260200182805461059e9061253f565b80156105e95780601f106105c0576101008083540402835291602001916105e9565b820191905f5260205f20905b8154815290600101906020018083116105cc57829003601f168201915b5050505050905090565b5f5f6105fd6112aa565b905061060a8185856112b1565b600191505092915050565b600c5481565b5f600254905090565b5f5f61062e6112aa565b905061063b858285611474565b6106468585856114ff565b60019150509392505050565b5f6009905090565b5f5f6106646112aa565b90506106f481858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546106ef919061259c565b6112b1565b600191505092915050565b6107076112aa565b73ffffffffffffffffffffffffffffffffffffffff16610725610cb1565b73ffffffffffffffffffffffffffffffffffffffff161461077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077290612619565b60405180910390fd5b81600881905550806009819055505050565b6107956112aa565b73ffffffffffffffffffffffffffffffffffffffff166107b3610cb1565b73ffffffffffffffffffffffffffffffffffffffff1614610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090612619565b60405180910390fd5b601a821115801561081b5750601a8111155b61085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085190612681565b60405180910390fd5b81600b8190555080600c819055505050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108b96112aa565b73ffffffffffffffffffffffffffffffffffffffff166108d7610cb1565b73ffffffffffffffffffffffffffffffffffffffff161461092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490612619565b60405180910390fd5b6109365f611bc6565b565b6109406112aa565b73ffffffffffffffffffffffffffffffffffffffff1661095e610cb1565b73ffffffffffffffffffffffffffffffffffffffff16146109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90612619565b60405180910390fd5b6109bc61061b565b600781905550565b6109cc6112aa565b73ffffffffffffffffffffffffffffffffffffffff166109ea610cb1565b73ffffffffffffffffffffffffffffffffffffffff1614610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790612619565b60405180910390fd5b610a523330610a4d61061b565b611c89565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610a8d3061086c565b5f5f33426040518863ffffffff1660e01b8152600401610ab2969594939291906126e1565b60606040518083038185885af1158015610ace573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610af39190612754565b505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7791906127b8565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1491906127b8565b6040518363ffffffff1660e01b8152600401610c319291906127e3565b602060405180830381865afa158015610c4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7091906127b8565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ce89061253f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d149061253f565b8015610d5f5780601f10610d3657610100808354040283529160200191610d5f565b820191905f5260205f20905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b5f5f610d736112aa565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b9061287a565b60405180910390fd5b610e4182868684036112b1565b60019250505092915050565b610e556112aa565b73ffffffffffffffffffffffffffffffffffffffff16610e73610cb1565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090612619565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f00000000000000000000000058f1ac79b30a8839f811b43397850ee55e80c9198373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f3f9190612455565b602060405180830381865afa158015610f5a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7e9190612898565b6040518363ffffffff1660e01b8152600401610f9b9291906128c3565b6020604051808303815f875af1158015610fb7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fdb9190612914565b5050565b5f5f610fe96112aa565b9050610ff68185856114ff565b600191505092915050565b7f00000000000000000000000058f1ac79b30a8839f811b43397850ee55e80c91981565b61102d6112aa565b73ffffffffffffffffffffffffffffffffffffffff1661104b610cb1565b73ffffffffffffffffffffffffffffffffffffffff16146110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890612619565b60405180910390fd5b7f00000000000000000000000058f1ac79b30a8839f811b43397850ee55e80c91973ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611104573d5f5f3e3d5ffd5b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6111bc6112aa565b73ffffffffffffffffffffffffffffffffffffffff166111da610cb1565b73ffffffffffffffffffffffffffffffffffffffff1614611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790612619565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361129e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611295906129af565b60405180910390fd5b6112a781611bc6565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690612a3d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490612acb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114679190612340565b60405180910390a3505050565b5f61147f8484611132565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114f957818110156114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290612b33565b60405180910390fd5b6114f884848484036112b1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490612bc1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290612c4f565b60405180910390fd5b5f811161161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490612cdd565b60405180910390fd5b5f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806116b95750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415806117145750805b611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a90612d45565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808015611804575082155b1561199857600754846118168761086c565b611820919061259c565b11158061186c5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b6118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290612dad565b60405180910390fd5b600a60109054906101000a900463ffffffff1663ffffffff16600a5f9054906101000a900463ffffffff1663ffffffff161161192257600a5f81819054906101000a900463ffffffff168092919061190290612dda565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b600a60109054906101000a900463ffffffff1663ffffffff16600a5f9054906101000a900463ffffffff1663ffffffff160361199757600a60149054906101000a900463ffffffff1663ffffffff16600b81905550600a60189054906101000a900463ffffffff1663ffffffff16600c819055505b5b5f6119a23061086c565b90508280156119be5750600a601c9054906101000a900460ff16155b80156119cc57506009548110155b80156119d6575083155b8015611a105750600a600c9054906101000a900463ffffffff1663ffffffff16600a5f9054906101000a900463ffffffff1663ffffffff16115b15611b2257600a60089054906101000a900463ffffffff1663ffffffff16431115611a57575f600a60046101000a81548163ffffffff021916908363ffffffff1602179055505b6001600a601c6101000a81548160ff021916908315150217905550611a8f611a8a86611a8584600854611efe565b611efe565b611f16565b5f600a601c6101000a81548160ff0219169083151502179055505f4790505f8110611abe57611abd8161212e565b5b600a600481819054906101000a900463ffffffff1680929190611ae090612dda565b91906101000a81548163ffffffff021916908363ffffffff1602179055505043600a60086101000a81548163ffffffff021916908363ffffffff160217905550505b5f82611b3057600c54611b34565b600b545b90505f81118015611b43575084155b8015611b5c5750600a601c9054906101000a900460ff16155b8015611b6d57508280611b6c5750835b5b15611bb1575f60648288611b819190612e05565b611b8b9190612e73565b90505f811115611baf57611ba0893083611c89565b8087611bac9190612ea3565b96505b505b611bbc888888611c89565b5050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90612f46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90612fd4565b60405180910390fd5b611d70838383612195565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90613062565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611e81919061259c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ee59190612340565b60405180910390a3611ef884848461219a565b50505050565b5f818311611f0c5782611f0e565b815b905092915050565b5f81031561212b575f600267ffffffffffffffff811115611f3a57611f39613080565b5b604051908082528060200260200182016040528015611f685781602001602082028036833780820191505090505b50905030815f81518110611f7f57611f7e6130ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612016573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061203a91906127b8565b8160018151811061204e5761204d6130ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506120a730737a250d5630b4cf539739df2c5dacb4c659f2488d846112b1565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016120fc959493929190613191565b5f604051808303815f87803b158015612113575f5ffd5b505af1158015612125573d5f5f3e3d5ffd5b50505050505b50565b7f00000000000000000000000058f1ac79b30a8839f811b43397850ee55e80c91973ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612191573d5f5f3e3d5ffd5b5050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6121e18261219f565b6121eb81856121a9565b93506121fb8185602086016121b9565b612204816121c7565b840191505092915050565b5f6020820190508181035f83015261222781846121d7565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61225c82612233565b9050919050565b61226c81612252565b8114612276575f5ffd5b50565b5f8135905061228781612263565b92915050565b5f819050919050565b61229f8161228d565b81146122a9575f5ffd5b50565b5f813590506122ba81612296565b92915050565b5f5f604083850312156122d6576122d561222f565b5b5f6122e385828601612279565b92505060206122f4858286016122ac565b9150509250929050565b5f8115159050919050565b612312816122fe565b82525050565b5f60208201905061232b5f830184612309565b92915050565b61233a8161228d565b82525050565b5f6020820190506123535f830184612331565b92915050565b5f5f5f606084860312156123705761236f61222f565b5b5f61237d86828701612279565b935050602061238e86828701612279565b925050604061239f868287016122ac565b9150509250925092565b5f60ff82169050919050565b6123be816123a9565b82525050565b5f6020820190506123d75f8301846123b5565b92915050565b5f5f604083850312156123f3576123f261222f565b5b5f612400858286016122ac565b9250506020612411858286016122ac565b9150509250929050565b5f602082840312156124305761242f61222f565b5b5f61243d84828501612279565b91505092915050565b61244f81612252565b82525050565b5f6020820190506124685f830184612446565b92915050565b5f61247882612252565b9050919050565b6124888161246e565b8114612492575f5ffd5b50565b5f813590506124a38161247f565b92915050565b5f602082840312156124be576124bd61222f565b5b5f6124cb84828501612495565b91505092915050565b5f5f604083850312156124ea576124e961222f565b5b5f6124f785828601612279565b925050602061250885828601612279565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061255657607f821691505b60208210810361256957612568612512565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6125a68261228d565b91506125b18361228d565b92508282019050808211156125c9576125c861256f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6126036020836121a9565b915061260e826125cf565b602082019050919050565b5f6020820190508181035f830152612630816125f7565b9050919050565b7f4e657720666565206d757374206265206c6f7765722e000000000000000000005f82015250565b5f61266b6016836121a9565b915061267682612637565b602082019050919050565b5f6020820190508181035f8301526126988161265f565b9050919050565b5f819050919050565b5f819050919050565b5f6126cb6126c66126c18461269f565b6126a8565b61228d565b9050919050565b6126db816126b1565b82525050565b5f60c0820190506126f45f830189612446565b6127016020830188612331565b61270e60408301876126d2565b61271b60608301866126d2565b6127286080830185612446565b61273560a0830184612331565b979650505050505050565b5f8151905061274e81612296565b92915050565b5f5f5f6060848603121561276b5761276a61222f565b5b5f61277886828701612740565b935050602061278986828701612740565b925050604061279a86828701612740565b9150509250925092565b5f815190506127b281612263565b92915050565b5f602082840312156127cd576127cc61222f565b5b5f6127da848285016127a4565b91505092915050565b5f6040820190506127f65f830185612446565b6128036020830184612446565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6128646025836121a9565b915061286f8261280a565b604082019050919050565b5f6020820190508181035f83015261289181612858565b9050919050565b5f602082840312156128ad576128ac61222f565b5b5f6128ba84828501612740565b91505092915050565b5f6040820190506128d65f830185612446565b6128e36020830184612331565b9392505050565b6128f3816122fe565b81146128fd575f5ffd5b50565b5f8151905061290e816128ea565b92915050565b5f602082840312156129295761292861222f565b5b5f61293684828501612900565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6129996026836121a9565b91506129a48261293f565b604082019050919050565b5f6020820190508181035f8301526129c68161298d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612a276024836121a9565b9150612a32826129cd565b604082019050919050565b5f6020820190508181035f830152612a5481612a1b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612ab56022836121a9565b9150612ac082612a5b565b604082019050919050565b5f6020820190508181035f830152612ae281612aa9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612b1d601d836121a9565b9150612b2882612ae9565b602082019050919050565b5f6020820190508181035f830152612b4a81612b11565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612bab602b836121a9565b9150612bb682612b51565b604082019050919050565b5f6020820190508181035f830152612bd881612b9f565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f612c396029836121a9565b9150612c4482612bdf565b604082019050919050565b5f6020820190508181035f830152612c6681612c2d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b5f612cc7602a836121a9565b9150612cd282612c6d565b604082019050919050565b5f6020820190508181035f830152612cf481612cbb565b9050919050565b7f4c69717569646974792070616972206e6f742079657420637265617465642e005f82015250565b5f612d2f601f836121a9565b9150612d3a82612cfb565b602082019050919050565b5f6020820190508181035f830152612d5c81612d23565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f612d976013836121a9565b9150612da282612d63565b602082019050919050565b5f6020820190508181035f830152612dc481612d8b565b9050919050565b5f63ffffffff82169050919050565b5f612de482612dcb565b915063ffffffff8203612dfa57612df961256f565b5b600182019050919050565b5f612e0f8261228d565b9150612e1a8361228d565b9250828202612e288161228d565b91508282048414831517612e3f57612e3e61256f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612e7d8261228d565b9150612e888361228d565b925082612e9857612e97612e46565b5b828204905092915050565b5f612ead8261228d565b9150612eb88361228d565b9250828203905081811115612ed057612ecf61256f565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612f306025836121a9565b9150612f3b82612ed6565b604082019050919050565b5f6020820190508181035f830152612f5d81612f24565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612fbe6023836121a9565b9150612fc982612f64565b604082019050919050565b5f6020820190508181035f830152612feb81612fb2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61304c6026836121a9565b915061305782612ff2565b604082019050919050565b5f6020820190508181035f83015261307981613040565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61310c81612252565b82525050565b5f61311d8383613103565b60208301905092915050565b5f602082019050919050565b5f61313f826130da565b61314981856130e4565b9350613154836130f4565b805f5b8381101561318457815161316b8882613112565b975061317683613129565b925050600181019050613157565b5085935050505092915050565b5f60a0820190506131a45f830188612331565b6131b160208301876126d2565b81810360408301526131c38186613135565b90506131d26060830185612446565b6131df6080830184612331565b969550505050505056fea264697066735822122011140bbbae94c6be9820c649013fb1f01cdc73c53b36e042100b989e492f4fa064736f6c634300081f0033

Verified Source Code Full Match

Compiler: v0.8.31+commit.fd3a2265 EVM: osaka Optimization: No
Whitehouse.sol 422 lines
// SPDX-License-Identifier: MIT

/*
    The White House
    WhiteHouse

    $WhiteHouse Meme Coin, not affiliated with official White House.

    https://whitehousememe.vip
    https://x.com/i/communities/2030174714149359856
    https://x.com/WhiteHouseerc
    https://t.me/WhiteHouse_erc
*/

pragma solidity ^0.8.22;

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
        function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract Token is ERC20, Ownable {
    IUniswapV2Router02 private constant _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    address public uniswapPair;
    address public immutable feeReceiver;

    uint256 private maxWalletSize = 8413800000 * 1e9;
    uint256 private contractSwapMax = 8413800000 * 1e9;
    uint256 private contractSwapMin = 1262070000 * 1e9;  
    uint32 private _buyCount;
    uint32 private _sellCount;
    uint32 private _lastSellBlock;
    uint32 private _preventSwapBefore = 15;
    uint32 private _lowerFeesAt = 30;
    uint32 private _finalBuyFee = 0;
    uint32 private _finalSellFee = 0;
    bool private _inSwap;

    uint256 public buyFeeProcent;
    uint256 public sellFeeProcent;

    mapping (address => bool) private excludedFromTxLimits;

    constructor() ERC20("The White House", "WhiteHouse") payable {
        uint256 totalSupply = 1000000000 * 1e9;

        feeReceiver = _msgSender();
        buyFeeProcent = 0;
        sellFeeProcent = 0;

        excludedFromTxLimits[feeReceiver] = true;
        excludedFromTxLimits[msg.sender] = true;
        excludedFromTxLimits[address(this)] = true;
        excludedFromTxLimits[address(0xdead)] = true;
        
        _approve(address(this), address(_router), totalSupply);
        _approve(msg.sender, address(_router), totalSupply);
        _mint(msg.sender, totalSupply);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "Transfer from the zero address not allowed.");
        require(to != address(0), "Transfer to the zero address not allowed.");
        require(amount > 0, 'Transfer amount must be greater than zero.');

        bool excluded = excludedFromTxLimits[from] || excludedFromTxLimits[to];
        require(uniswapPair != address(0) || excluded, "Liquidity pair not yet created.");

        bool isSell = to == uniswapPair;
        bool isBuy = from == uniswapPair;

        if(isBuy && !excluded){
            require(balanceOf(to) + amount <= maxWalletSize ||
                to == address(_router), "Max wallet exceeded");
            if(_buyCount <= _lowerFeesAt)
                _buyCount++;
            if(_buyCount == _lowerFeesAt){
                buyFeeProcent = _finalBuyFee;
                sellFeeProcent = _finalSellFee;
            }
        }            

        uint256 contractTokenBalance = balanceOf(address(this));
        if (isSell && !_inSwap && contractTokenBalance >= contractSwapMin &&
          !excluded && _buyCount > _preventSwapBefore
        ) {
            if (block.number > _lastSellBlock) 
                _sellCount = 0;
            _inSwap = true;
            swapTokensForEth(min(amount, min(contractTokenBalance, contractSwapMax)));
            _inSwap = false;
            uint256 contractETHBalance = address(this).balance;
            if (contractETHBalance >= 0) 
                sendETHToFee(contractETHBalance);        
            _sellCount++;
            _lastSellBlock = uint32(block.number);
        }

        uint256 fee = isBuy ? buyFeeProcent : sellFeeProcent;

        if (fee > 0 && !excluded && !_inSwap && (isBuy || isSell)) {
            uint256 fees = amount * fee / 100;
            if (fees > 0){
                super._transfer(from, address(this), fees);
                amount-= fees;
            }
        }
        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

     function swapTokensForEth(uint256 tokenAmount) private {
        if(tokenAmount == 0) return;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();
        _approve(address(this), address(_router), tokenAmount);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        payable(feeReceiver).transfer(amount);
    }

    function enableTrading() external payable onlyOwner {
        super._transfer(msg.sender, address(this), totalSupply());
        _router.addLiquidityETH{value: address(this).balance}(address(this), balanceOf(address(this)), 0, 0, msg.sender, block.timestamp);
        uniswapPair = IUniswapV2Factory(_router.factory()).getPair(address(this), _router.WETH());
    }

    function setSwapFees(uint256 newBuyFee, uint256 newSellFee) external onlyOwner {
        require(newBuyFee <= 26 && newSellFee <= 26, 'New fee must be lower.'); 
        buyFeeProcent = newBuyFee;
        sellFeeProcent = newSellFee;
    }

    function removeLimits() external onlyOwner {                
        maxWalletSize = totalSupply();
    }

    function updateStructure(uint256 maxAmount, uint256 minAmount) external onlyOwner {                
        contractSwapMax = maxAmount;
        contractSwapMin = minAmount;
    }

    function sweepStuckETH() external onlyOwner {
        payable(feeReceiver).transfer(address(this).balance);
    }

    function transferStuckToken(IERC20 token) external onlyOwner {
        token.transfer(feeReceiver, token.balanceOf(address(this)));
    }

    receive() external payable {}
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
buyFeeProcent 0xd0811807 → uint256
decimals 0x313ce567 → uint8
feeReceiver 0xb3f00674 → address
name 0x06fdde03 → string
owner 0x8da5cb5b → address
sellFeeProcent 0x1678e6f8 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
uniswapPair 0xc816841b → address

Write Contract 13 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enableTrading 0x8a8c523c
No parameters
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
removeLimits 0x751039fc
No parameters
renounceOwnership 0x715018a6
No parameters
setSwapFees 0x59acbe4e
uint256 newBuyFee
uint256 newSellFee
sweepStuckETH 0xc7003cd0
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
transferStuckToken 0xa6ebb133
address token
updateStructure 0x46bc4258
uint256 maxAmount
uint256 minAmount

Recent Transactions

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