Holesky Testnet

Contract

0xfAaBbE302750635E3F918385a1aEb4A9eb45977a

Overview

ETH Balance

0 ETH

Token Holdings

Multichain Info

N/A
Transaction Hash
Method
Block
From
To

There are no matching entries

5 Token Transfers found.

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, GNU GPLv3 license

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)

Contract ABI

[{"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"}]}]

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


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

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.