Source Code
Overview
ETH Balance
0 ETH
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
#pragma version ^0.3.0 interface ERC20: def transfer(_to: address, _value: uint256) -> bool: nonpayable def transferFrom(_from: address, _to: address, _value: uint256) -> bool: nonpayable interface WETH: def deposit(): payable # configuration state: admin: public(address) weth: public(immutable(WETH)) acceptedTokens: public(HashMap[ERC20, bool]) @external def __init__(_weth: address): weth = WETH(_weth) self.acceptedTokens[ERC20(_weth)] = True self.admin = msg.sender # state: paid: public(HashMap[address, HashMap[ERC20, uint256]]) charged: public(HashMap[address, HashMap[ERC20, uint256]]) pendingRefund: public(HashMap[address, HashMap[ERC20, uint256]]) # admin actions: event SetAdmin: old: indexed(address) new: indexed(address) event SetToken: token: indexed(ERC20) accepted: indexed(bool) event Withdraw: token: indexed(ERC20) amount: indexed(uint256) event Charge: user: indexed(address) token: indexed(ERC20) amount: indexed(uint256) event Refund: user: indexed(address) token: indexed(ERC20) amount: indexed(uint256) @external def setAdmin(_newAdmin: address): assert msg.sender == self.admin, "auth" self.admin = _newAdmin log SetAdmin(msg.sender, _newAdmin) @external def setToken(_token: ERC20, _accepted: bool): assert msg.sender == self.admin, "auth" self.acceptedTokens[_token] = _accepted log SetToken(_token, _accepted) @external def withdraw(_token: ERC20, _amount: uint256): assert msg.sender == self.admin, "auth" assert _token.transfer(msg.sender, _amount), "tfr" log Withdraw(_token, _amount) @external def charge(_user: address, _token: ERC20, _amount: uint256): assert msg.sender == self.admin, "auth" self.charged[_user][_token] += _amount log Charge(_user, _token, _amount) @external def refund(_user: address, _token: ERC20, _amount: uint256): assert msg.sender == self.admin, "auth" self.pendingRefund[_user][_token] += _amount log Refund(_user, _token, _amount) # user actions: event Pay: user: indexed(address) token: indexed(ERC20) amount: indexed(uint256) event ClaimRefund: user: indexed(address) token: indexed(ERC20) amount: indexed(uint256) @external def payToken(_token: ERC20, _amount: uint256): assert self.acceptedTokens[_token], "token" assert _token.transferFrom(msg.sender, self, _amount), "tfr" self.paid[msg.sender][_token] += _amount log Pay(msg.sender, _token, _amount) @external @payable def payEther(): weth.deposit(value = msg.value) self.paid[msg.sender][ERC20(weth.address)] += msg.value log Pay(msg.sender, ERC20(weth.address), msg.value) @external def claimRefund(_token: ERC20, _amount: uint256): self.pendingRefund[msg.sender][_token] -= _amount assert _token.transfer(msg.sender, _amount), "tfr" log ClaimRefund(msg.sender, _token, _amount)
[{"name":"SetAdmin","inputs":[{"name":"old","type":"address","indexed":true},{"name":"new","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"SetToken","inputs":[{"name":"token","type":"address","indexed":true},{"name":"accepted","type":"bool","indexed":true}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"name":"Charge","inputs":[{"name":"user","type":"address","indexed":true},{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"name":"Refund","inputs":[{"name":"user","type":"address","indexed":true},{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"name":"Pay","inputs":[{"name":"user","type":"address","indexed":true},{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"name":"ClaimRefund","inputs":[{"name":"user","type":"address","indexed":true},{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_weth","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setAdmin","inputs":[{"name":"_newAdmin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setToken","inputs":[{"name":"_token","type":"address"},{"name":"_accepted","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"charge","inputs":[{"name":"_user","type":"address"},{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"refund","inputs":[{"name":"_user","type":"address"},{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"payToken","inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"payEther","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claimRefund","inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"weth","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"acceptedTokens","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"paid","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"charged","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"pendingRefund","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]}]
Contract Creation Code
610a2851503461004a576020610a8c5f395f518060a01c61004a57604052604051610a2852600160016040516020525f5260405f2055335f55610a2861004e61000039610a48610000f35b5f80fd5f3560e01c6002600d820660011b610a0e01601e395f51565b63f851a4408118610a065734610a0a575f5460405260206040f3610a06565b633fc8cef381186100555734610a0a576020610a2860403960206040f35b63b97de68f8118610a0657604436103417610a0a576004358060a01c610a0a576040526004336020525f5260405f20806040516020525f5260405f2090508054602435808203828111610a0a579050905081555060405163a9059cbb6060523360805260243560a052602060606044607c5f855af16100d6573d5f5f3e3d5ffd5b60203d10610a0a576060518060011c610a0a5760c05260c090505161015357600360e0527f74667200000000000000000000000000000000000000000000000000000000006101005260e05060e0518061010001601f825f031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435604051337f59104a9db1fa479901487310a7e3c5b60e3be0f04afa71c60e276575826d92ce5f6060a400610a06565b6382dc4a058118610a0657602436103417610a0a576004358060a01c610a0a5760405260016040516020525f5260405f205460605260206060f3610a06565b634d900d95811861021c57604436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a5760605260026040516020525f5260405f20806060516020525f5260405f2090505460805260206080f35b637e8ea9368118610a0657604436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a5760605260036040516020525f5260405f20806060516020525f5260405f2090505460805260206080f3610a06565b637aaefd3581186102d057604436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a5760605260046040516020525f5260405f20806060516020525f5260405f2090505460805260206080f35b633816a2928118610a0657604436103417610a0a576004358060a01c610a0a576040526024358060011c610a0a576060525f543318156103665760046080527f617574680000000000000000000000000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60605160016040516020525f5260405f20556060516040517fb7ebab83a58ce61ea26b563c1f73ed2fb8e747c78205f72382399303a9c7b1d25f6080a300610a06565b63704b6c02811861046157602436103417610a0a576004358060a01c610a0a576040525f543318156104315760046060527f617574680000000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040515f55604051337f848ac24ab84501710d6631faab117b66b79aba7ec6f7778cf3bcff428c1a4efc5f6060a3005b6382ad6f358118610a0657606436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a576060525f543318156104f75760046080527f617574680000000000000000000000000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60046040516020525f5260405f20806060516020525f5260405f2090508054604435808201828110610a0a57905090508155506044356060516040517ff40cc8c1a1d17359049ba500cfc894596a692cffc9d03943cd92ec2e159cf6ae5f6080a400610a06565b63f3fef3a38118610a0657604436103417610a0a576004358060a01c610a0a576040525f543318156105e65760046060527f617574680000000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405163a9059cbb6060523360805260243560a052602060606044607c5f855af1610613573d5f5f3e3d5ffd5b60203d10610a0a576060518060011c610a0a5760c05260c090505161069057600360e0527f74667200000000000000000000000000000000000000000000000000000000006101005260e05060e0518061010001601f825f031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b6024356040517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243645f6060a300610a06565b63c709a4f181186107ba57606436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a576060525f543318156107575760046080527f617574680000000000000000000000000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60036040516020525f5260405f20806060516020525f5260405f2090508054604435808201828110610a0a57905090508155506044356060516040517f5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e065f6080a4005b6310510ec18118610a0657604436103417610a0a576004358060a01c610a0a5760405260016040516020525f5260405f205461084c5760056060527f746f6b656e00000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516323b872dd606052336080523060a05260243560c052602060606064607c5f855af161087d573d5f5f3e3d5ffd5b60203d10610a0a576060518060011c610a0a5760e05260e09050516108fe576003610100527f74667200000000000000000000000000000000000000000000000000000000006101205261010050610100518061012001601f825f031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b6002336020525f5260405f20806040516020525f5260405f2090508054602435808201828110610a0a5790509050815550602435604051337f288d9a5737d39d766acb848da277a970d9ee31f9115e17490b9393e282fa7b4d5f6060a400610a06565b63f7474d008114600336111615610a06576020610a285f395f5163d0e30db0604052803b15610a0a575f60406004605c34855af16109a1573d5f5f3e3d5ffd5b506002336020525f5260405f20806020610a285f395f516020525f5260405f2090508054348101818110610a0a579050815550346020610a285f395f51337f288d9a5737d39d766acb848da277a970d9ee31f9115e17490b9393e282fa7b4d5f6040a4005b5f5ffd5b5f80fd0a06055e0a0600180037018506c10a0601c40961027803a90a0684190a2881181a1820a16576797065728300030a001600000000000000000000000094373a4919b3240d86ea41593d5eba789fef3848
Deployed Bytecode
0x5f3560e01c6002600d820660011b610a0e01601e395f51565b63f851a4408118610a065734610a0a575f5460405260206040f3610a06565b633fc8cef381186100555734610a0a576020610a2860403960206040f35b63b97de68f8118610a0657604436103417610a0a576004358060a01c610a0a576040526004336020525f5260405f20806040516020525f5260405f2090508054602435808203828111610a0a579050905081555060405163a9059cbb6060523360805260243560a052602060606044607c5f855af16100d6573d5f5f3e3d5ffd5b60203d10610a0a576060518060011c610a0a5760c05260c090505161015357600360e0527f74667200000000000000000000000000000000000000000000000000000000006101005260e05060e0518061010001601f825f031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435604051337f59104a9db1fa479901487310a7e3c5b60e3be0f04afa71c60e276575826d92ce5f6060a400610a06565b6382dc4a058118610a0657602436103417610a0a576004358060a01c610a0a5760405260016040516020525f5260405f205460605260206060f3610a06565b634d900d95811861021c57604436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a5760605260026040516020525f5260405f20806060516020525f5260405f2090505460805260206080f35b637e8ea9368118610a0657604436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a5760605260036040516020525f5260405f20806060516020525f5260405f2090505460805260206080f3610a06565b637aaefd3581186102d057604436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a5760605260046040516020525f5260405f20806060516020525f5260405f2090505460805260206080f35b633816a2928118610a0657604436103417610a0a576004358060a01c610a0a576040526024358060011c610a0a576060525f543318156103665760046080527f617574680000000000000000000000000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60605160016040516020525f5260405f20556060516040517fb7ebab83a58ce61ea26b563c1f73ed2fb8e747c78205f72382399303a9c7b1d25f6080a300610a06565b63704b6c02811861046157602436103417610a0a576004358060a01c610a0a576040525f543318156104315760046060527f617574680000000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040515f55604051337f848ac24ab84501710d6631faab117b66b79aba7ec6f7778cf3bcff428c1a4efc5f6060a3005b6382ad6f358118610a0657606436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a576060525f543318156104f75760046080527f617574680000000000000000000000000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60046040516020525f5260405f20806060516020525f5260405f2090508054604435808201828110610a0a57905090508155506044356060516040517ff40cc8c1a1d17359049ba500cfc894596a692cffc9d03943cd92ec2e159cf6ae5f6080a400610a06565b63f3fef3a38118610a0657604436103417610a0a576004358060a01c610a0a576040525f543318156105e65760046060527f617574680000000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405163a9059cbb6060523360805260243560a052602060606044607c5f855af1610613573d5f5f3e3d5ffd5b60203d10610a0a576060518060011c610a0a5760c05260c090505161069057600360e0527f74667200000000000000000000000000000000000000000000000000000000006101005260e05060e0518061010001601f825f031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b6024356040517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243645f6060a300610a06565b63c709a4f181186107ba57606436103417610a0a576004358060a01c610a0a576040526024358060a01c610a0a576060525f543318156107575760046080527f617574680000000000000000000000000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60036040516020525f5260405f20806060516020525f5260405f2090508054604435808201828110610a0a57905090508155506044356060516040517f5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e065f6080a4005b6310510ec18118610a0657604436103417610a0a576004358060a01c610a0a5760405260016040516020525f5260405f205461084c5760056060527f746f6b656e00000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516323b872dd606052336080523060a05260243560c052602060606064607c5f855af161087d573d5f5f3e3d5ffd5b60203d10610a0a576060518060011c610a0a5760e05260e09050516108fe576003610100527f74667200000000000000000000000000000000000000000000000000000000006101205261010050610100518061012001601f825f031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b6002336020525f5260405f20806040516020525f5260405f2090508054602435808201828110610a0a5790509050815550602435604051337f288d9a5737d39d766acb848da277a970d9ee31f9115e17490b9393e282fa7b4d5f6060a400610a06565b63f7474d008114600336111615610a06576020610a285f395f5163d0e30db0604052803b15610a0a575f60406004605c34855af16109a1573d5f5f3e3d5ffd5b506002336020525f5260405f20806020610a285f395f516020525f5260405f2090508054348101818110610a0a579050815550346020610a285f395f51337f288d9a5737d39d766acb848da277a970d9ee31f9115e17490b9393e282fa7b4d5f6040a4005b5f5ffd5b5f80fd0a06055e0a0600180037018506c10a0601c40961027803a90a0600000000000000000000000094373a4919b3240d86ea41593d5eba789fef3848
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000094373a4919b3240d86ea41593d5eba789fef3848
-----Decoded View---------------
Arg [0] : _weth (address): 0x94373a4919B3240D86eA41593D5eBa789FEF3848
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000094373a4919b3240d86ea41593d5eba789fef3848
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.