Overview
ETH Balance
ETH Value
$0.00Latest 17 from a total of 17 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Execute | 254104290 | 424 days ago | IN | 0 ETH | 0.00000336 | ||||
| Execute | 183729376 | 630 days ago | IN | 0 ETH | 0.00018628 | ||||
| Execute | 172008656 | 665 days ago | IN | 0 ETH | 0.00009444 | ||||
| Execute | 91934811 | 911 days ago | IN | 0 ETH | 0.00017648 | ||||
| Execute | 91934789 | 911 days ago | IN | 0 ETH | 0.0001811 | ||||
| Execute | 91934757 | 911 days ago | IN | 0 ETH | 0.00018845 | ||||
| Execute | 91934690 | 911 days ago | IN | 0 ETH | 0.00011372 | ||||
| Execute | 91934643 | 911 days ago | IN | 0 ETH | 0.00011527 | ||||
| Accept_admin_cha... | 91902535 | 911 days ago | IN | 0 ETH | 0.00004123 | ||||
| Approve_admin_ch... | 91742854 | 912 days ago | IN | 0 ETH | 0.00006927 | ||||
| Request_admin_ch... | 91738445 | 912 days ago | IN | 0 ETH | 0.00007532 | ||||
| Execute | 46014255 | 1067 days ago | IN | 0 ETH | 0.0000455 | ||||
| Execute | 28763617 | 1135 days ago | IN | 0 ETH | 0.000118 | ||||
| Execute | 28230977 | 1138 days ago | IN | 0 ETH | 0.00005388 | ||||
| Execute | 19294625 | 1199 days ago | IN | 0 ETH | 0.000138758101 ETH | ||||
| Execute | 19294623 | 1199 days ago | IN | 0 ETH | 0.000062705252 ETH | ||||
| Execute | 19294612 | 1199 days ago | IN | 0 ETH | 0.000203899851 ETH |
Latest 12 internal transactions
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 46014255 | 1067 days ago | 0 ETH | ||||
| 46014255 | 1067 days ago | 0 ETH | ||||
| 46014255 | 1067 days ago | 0 ETH | ||||
| 28763617 | 1135 days ago | 0 ETH | ||||
| 28763617 | 1135 days ago | 0 ETH | ||||
| 28763617 | 1135 days ago | 0 ETH | ||||
| 28230977 | 1138 days ago | 0 ETH | ||||
| 28230977 | 1138 days ago | 0 ETH | ||||
| 28230977 | 1138 days ago | 0 ETH | ||||
| 19294625 | 1199 days ago | 0 ETH | ||||
| 19294623 | 1199 days ago | 0 ETH | ||||
| 19294612 | 1199 days ago | 0 ETH |
Cross-Chain Transactions
Contract Source Code Verified (Exact Match)
Contract Source Code (Vyper language format)
# @version 0.2.11
"""
@title ProxyAdmin
@notice Thin proxy allowing shared ownership of contracts
@author Ben Hauser
@license MIT
"""
event TransactionExecuted:
admin: indexed(address)
target: indexed(address)
calldata: Bytes[100000]
value: uint256
event RequestAdminChange:
current_admin: address
future_admin: address
event RevokeAdminChange:
current_admin: address
future_admin: address
calling_admin: address
event ApproveAdminChange:
current_admin: address
future_admin: address
calling_admin: address
event AcceptAdminChange:
previous_admin: address
current_admin: address
admins: public(address[2])
pending_current_admin: uint256
pending_new_admin: address
change_approved: bool
@external
def __init__(_authorized: address[2]):
"""
@notice Contract constructor
@param _authorized Admin accounts for this contract
"""
self.admins = _authorized
@payable
@external
def execute(_target: address, _calldata: Bytes[100000]):
"""
@notice Execute a contract call
@dev Ether sent when calling this function is forwarded onward
@param _target Address of the contract to call
@param _calldata Calldata to use in the call
"""
assert msg.sender in self.admins # dev: only admin
raw_call(_target, _calldata, value=msg.value)
log TransactionExecuted(msg.sender, _target, _calldata, msg.value)
@view
@external
def get_admin_change_status() -> (address, address, bool):
"""
@notice Get information about a pending admin change
@return Admin address to be replaced,
admin address to be added,
has change been approved?
"""
idx: uint256 = self.pending_current_admin
if idx == 0:
return ZERO_ADDRESS, ZERO_ADDRESS, False
else:
return self.admins[idx - 1], self.pending_new_admin, self.change_approved
@external
def request_admin_change(_new_admin: address):
"""
@notice Initiate changing an admin address
@param _new_admin New admin address (replaces msg.sender)
"""
assert self.pending_current_admin == 0 # dev: already an active request
admin_list: address[2] = self.admins
assert _new_admin not in admin_list # dev: new admin is already admin
for i in range(2):
if admin_list[i] == msg.sender:
self.pending_current_admin = i + 1
self.pending_new_admin = _new_admin
log RequestAdminChange(msg.sender, _new_admin)
return
raise # dev: only admin
@external
def approve_admin_change():
"""
@notice Approve changing an admin address
@dev Only callable by the 2nd admin address (the one that will not change)
"""
idx: uint256 = self.pending_current_admin
assert idx > 0 # dev: no active request
assert msg.sender == self.admins[idx % 2] # dev: caller is not 2nd admin
self.change_approved = True
log ApproveAdminChange(self.admins[idx - 1], self.pending_new_admin, msg.sender)
@external
def revoke_admin_change():
"""
@notice Revoke changing an admin address
@dev May be called by either admin at any time to reset the process,
even if approval has previous been given
"""
assert msg.sender in self.admins # dev: only admin
idx: uint256 = self.pending_current_admin
pending_admin: address = ZERO_ADDRESS
if idx > 0:
pending_admin = self.admins[idx - 1]
log RevokeAdminChange(pending_admin, self.pending_new_admin, msg.sender)
self.pending_current_admin = 0
self.pending_new_admin = ZERO_ADDRESS
self.change_approved = False
@external
def accept_admin_change():
"""
@notice Accept a changed admin address
@dev Only callable by the new admin address, after approval has been given
"""
assert self.change_approved == True # dev: change not approved
assert msg.sender == self.pending_new_admin # dev: only new admin
idx: uint256 = self.pending_current_admin - 1
log AcceptAdminChange(self.admins[idx], msg.sender)
self.admins[idx] = msg.sender
self.pending_current_admin = 0
self.pending_new_admin = ZERO_ADDRESS
self.change_approved = FalseContract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"name":"TransactionExecuted","inputs":[{"name":"admin","type":"address","indexed":true},{"name":"target","type":"address","indexed":true},{"name":"calldata","type":"bytes","indexed":false},{"name":"value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RequestAdminChange","inputs":[{"name":"current_admin","type":"address","indexed":false},{"name":"future_admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"RevokeAdminChange","inputs":[{"name":"current_admin","type":"address","indexed":false},{"name":"future_admin","type":"address","indexed":false},{"name":"calling_admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApproveAdminChange","inputs":[{"name":"current_admin","type":"address","indexed":false},{"name":"future_admin","type":"address","indexed":false},{"name":"calling_admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"AcceptAdminChange","inputs":[{"name":"previous_admin","type":"address","indexed":false},{"name":"current_admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_authorized","type":"address[2]"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"execute","inputs":[{"name":"_target","type":"address"},{"name":"_calldata","type":"bytes"}],"outputs":[],"gas":1168658},{"stateMutability":"view","type":"function","name":"get_admin_change_status","inputs":[],"outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"bool"}],"gas":4202},{"stateMutability":"nonpayable","type":"function","name":"request_admin_change","inputs":[{"name":"_new_admin","type":"address"}],"outputs":[],"gas":148342},{"stateMutability":"nonpayable","type":"function","name":"approve_admin_change","inputs":[],"outputs":[],"gas":41716},{"stateMutability":"nonpayable","type":"function","name":"revoke_admin_change","inputs":[],"outputs":[],"gas":67885},{"stateMutability":"nonpayable","type":"function","name":"accept_admin_change","inputs":[],"outputs":[],"gas":101134},{"stateMutability":"view","type":"function","name":"admins","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":1377}]Contract Creation Code
60406106f36101403960206106f360c03960c05160a01c1561002057600080fd5b602060206106f30160c03960c05160a01c1561003b57600080fd5b600060c052602060c020610140518155610160516001820155506106db56600436101561000d5761067b565b600035601c52600051631cff79cd8114156101af5760043560a01c1561003257600080fd5b620186c060243560040161014037620186a060243560040135111561005657600080fd5b600062018820526201882061012060006002818352015b61012051600060c052602060c020015433141561008d576001835261009d565b815160010180835281141561006d575b50505062018820516100ae57600080fd5b610140805160200180620188208284600060045af16100cc57600080fd5b505060006000620188205162018840346004355af16100ea57600080fd5b3462018880526040620188205262018820516201886052610140805160200180620188205162018860018284600060045af161012557600080fd5b50506201882051620188600151806020620188205162018860010101818260206001820306601f82010390500336823750506020620188205162018860015160206001820306601f8201039050620188205101016201882052600435337fcaac11c45e5fdb5c513e20ac229a3f9f99143580b5eb08d0fecbdd5ae8c81ef5620188205162018860a3005b34156101ba57600080fd5b6364bcd7308114156102825760015461014052610140511515610214576101c08080806000815250506020810190508080600081525050602081019050808060008152505060609050905060c05260c0516101c0f3610280565b6101608080806101405160018082101561022d57600080fd5b808203905090506002811061024157600080fd5b600060c052602060c02001548152505060208101905080806002548152505060208101905080806003548152505060609050905060c05260c051610160f35b005b63a52e73698114156103c35760043560a01c1561029e57600080fd5b600154156102ab57600080fd5b60008060c052602060c020546101405260018160c052602060c0200154610160525060006101805261018061012060006002818352015b61012051602002610140015160043514156103005760018352610310565b81516001018083528114156102e2575b505050610180511561032157600080fd5b61018060006002818352015b33610140610180516002811061034257600080fd5b602002015114156103ab5761018051600181818301101561036257600080fd5b80820190509050600155600435600255336101a0526004356101c0527f3dbc538770ecfcda0a15ac4731d922045333e3f55a9dbff4923d5ae950fd4b6860406101a0a160006000f35b815160010180835281141561032d575b505060006000fd5b63d1266a128114156104885760015461014052600061014051116103e657600080fd5b610140516002808206905090506002811061040057600080fd5b600060c052602060c0200154331461041757600080fd5b60016003556101405160018082101561042f57600080fd5b808203905090506002811061044357600080fd5b600060c052602060c02001546101605260025461018052336101a0527fb4a2afe1602258539e7638f32a9c55473646a5b004d1a2f76ed802bdd6b3c6116060610160a1005b631d43f5398114156105865760006101405261014061012060006002818352015b61012051600060c052602060c02001543314156104c957600183526104d9565b81516001018083528114156104a9575b505050610140516104e957600080fd5b60015461014052600061016052600061014051111561053a576101405160018082101561051557600080fd5b808203905090506002811061052957600080fd5b600060c052602060c0200154610160525b61016051610180526002546101a052336101c0527f65d4d3bd6f71ee062f64e7b4a0b8f2a379c599a6844765e697f10236058002966060610180a1600060015560006002556000600355005b63980cbc14811415610648576001600354146105a157600080fd5b60025433146105af57600080fd5b6001546001808210156105c157600080fd5b808203905090506101405261014051600281106105dd57600080fd5b600060c052602060c02001546101605233610180527f3f26d618a9f0bbc232d4e0814ca8f1b77fec61eff610a967d549270accd437fc6040610160a133610140516002811061062b57600080fd5b600060c052602060c0200155600060015560006002556000600355005b6314bfd6d0811415610679576004356002811061066457600080fd5b600060c052602060c020015460005260206000f35b505b60006000fd5b61005a6106db0361005a60003961005a6106db036000f30000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67
Deployed Bytecode
0x600436101561000d5761067b565b600035601c52600051631cff79cd8114156101af5760043560a01c1561003257600080fd5b620186c060243560040161014037620186a060243560040135111561005657600080fd5b600062018820526201882061012060006002818352015b61012051600060c052602060c020015433141561008d576001835261009d565b815160010180835281141561006d575b50505062018820516100ae57600080fd5b610140805160200180620188208284600060045af16100cc57600080fd5b505060006000620188205162018840346004355af16100ea57600080fd5b3462018880526040620188205262018820516201886052610140805160200180620188205162018860018284600060045af161012557600080fd5b50506201882051620188600151806020620188205162018860010101818260206001820306601f82010390500336823750506020620188205162018860015160206001820306601f8201039050620188205101016201882052600435337fcaac11c45e5fdb5c513e20ac229a3f9f99143580b5eb08d0fecbdd5ae8c81ef5620188205162018860a3005b34156101ba57600080fd5b6364bcd7308114156102825760015461014052610140511515610214576101c08080806000815250506020810190508080600081525050602081019050808060008152505060609050905060c05260c0516101c0f3610280565b6101608080806101405160018082101561022d57600080fd5b808203905090506002811061024157600080fd5b600060c052602060c02001548152505060208101905080806002548152505060208101905080806003548152505060609050905060c05260c051610160f35b005b63a52e73698114156103c35760043560a01c1561029e57600080fd5b600154156102ab57600080fd5b60008060c052602060c020546101405260018160c052602060c0200154610160525060006101805261018061012060006002818352015b61012051602002610140015160043514156103005760018352610310565b81516001018083528114156102e2575b505050610180511561032157600080fd5b61018060006002818352015b33610140610180516002811061034257600080fd5b602002015114156103ab5761018051600181818301101561036257600080fd5b80820190509050600155600435600255336101a0526004356101c0527f3dbc538770ecfcda0a15ac4731d922045333e3f55a9dbff4923d5ae950fd4b6860406101a0a160006000f35b815160010180835281141561032d575b505060006000fd5b63d1266a128114156104885760015461014052600061014051116103e657600080fd5b610140516002808206905090506002811061040057600080fd5b600060c052602060c0200154331461041757600080fd5b60016003556101405160018082101561042f57600080fd5b808203905090506002811061044357600080fd5b600060c052602060c02001546101605260025461018052336101a0527fb4a2afe1602258539e7638f32a9c55473646a5b004d1a2f76ed802bdd6b3c6116060610160a1005b631d43f5398114156105865760006101405261014061012060006002818352015b61012051600060c052602060c02001543314156104c957600183526104d9565b81516001018083528114156104a9575b505050610140516104e957600080fd5b60015461014052600061016052600061014051111561053a576101405160018082101561051557600080fd5b808203905090506002811061052957600080fd5b600060c052602060c0200154610160525b61016051610180526002546101a052336101c0527f65d4d3bd6f71ee062f64e7b4a0b8f2a379c599a6844765e697f10236058002966060610180a1600060015560006002556000600355005b63980cbc14811415610648576001600354146105a157600080fd5b60025433146105af57600080fd5b6001546001808210156105c157600080fd5b808203905090506101405261014051600281106105dd57600080fd5b600060c052602060c02001546101605233610180527f3f26d618a9f0bbc232d4e0814ca8f1b77fec61eff610a967d549270accd437fc6040610160a133610140516002811061062b57600080fd5b600060c052602060c0200155600060015560006002556000600355005b6314bfd6d0811415610679576004356002811061066457600080fd5b600060c052602060c020015460005260206000f35b505b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67
-----Decoded View---------------
Arg [0] : _authorized (address[2]): 0x7EeAC6CDdbd1D0B8aF061742D41877D7F707289a,0xbabe61887f1de2713c6f97e567623453d3C79f67
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a
Arg [1] : 000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.