View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.1
Contract Source Code (Vyper language format)
# @version 0.3.1
"""
@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":968065},{"stateMutability":"view","type":"function","name":"get_admin_change_status","inputs":[],"outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"bool"}],"gas":9067},{"stateMutability":"nonpayable","type":"function","name":"request_admin_change","inputs":[{"name":"_new_admin","type":"address"}],"outputs":[],"gas":152486},{"stateMutability":"nonpayable","type":"function","name":"approve_admin_change","inputs":[],"outputs":[],"gas":46585},{"stateMutability":"nonpayable","type":"function","name":"revoke_admin_change","inputs":[],"outputs":[],"gas":74003},{"stateMutability":"nonpayable","type":"function","name":"accept_admin_change","inputs":[],"outputs":[],"gas":106364},{"stateMutability":"view","type":"function","name":"admins","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":2679}]Contract Creation Code
61056e6020816080396080518060a01c6105695760e0526020602082016080396080518060a01c61056957610100525060e0516000556101005160015561055156600436101561000d57610505565b60046000601c37600051631cff79cd811861014e576004358060a01c61050b5760e052602435600401620186a081351161050b578080356020018082610100375050506000620187c052620187c060c060006002818352015b60c0515433186100795760018352610089565b8151600101808352811415610066575b505050620187c0511561050b576101005060006000610100516101203460e0515af16100ba573d600060003e3d6000fd5b60e051337fcaac11c45e5fdb5c513e20ac229a3f9f99143580b5eb08d0fecbdd5ae8c81ef5620187c08060408082528083018061010080516020018083828460045afa905050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905060208201915034825290509050620187c0a3005b3461050b576364bcd73081186101ca5760025460e05260e051156101ac57600160e051600180821061050b5780820390509050600281101561050b57025461010052600354610120526004546101405260606101006101c8566101c8565b60006101005260006101205260006101405260606101006101c8565bf35b63a52e736981186102dd576004358060a01c61050b5760e05260025461050b57600054610100526001546101205260006101405261014060c060006002818352015b60c051602002610100015160e051186102285760018352610238565b815160010180835281141561020c575b5050506101405161050b5761014060006002818352015b3361010061014051600281101561050b576020020151186102c457610140516001818183011061050b578082019050905060025560e0516003557f3dbc538770ecfcda0a15ac4731d922045333e3f55a9dbff4923d5ae950fd4b68336101605260e051610180526040610160a15050506102db565b815160010180835281141561024f57505060006000fd5b005b63d1266a1281186103765760025460e052600060e051111561050b57600160e051600280820690509050600281101561050b570254331861050b5760016004557fb4a2afe1602258539e7638f32a9c55473646a5b004d1a2f76ed802bdd6b3c611600160e051600180821061050b5780820390509050600281101561050b570254610100526003546101205233610140526060610100a1005b631d43f539811861044957600060e05260e060c060006002818352015b60c0515433186103a657600183526103b6565b8151600101808352811415610393575b50505060e0511561050b5760025460e052600061010052600060e05111156103fd57600160e051600180821061050b5780820390509050600281101561050b570254610100525b7f65d4d3bd6f71ee062f64e7b4a0b8f2a379c599a6844765e697f102360580029661010051610120526003546101405233610160526060610120a1600060025560006003556000600455005b63980cbc1481186104df5760016004541861050b57600354331861050b57600254600180821061050b578082039050905060e0527f3f26d618a9f0bbc232d4e0814ca8f1b77fec61eff610a967d549270accd437fc600160e051600281101561050b5702546101005233610120526040610100a133600160e051600281101561050b570255600060025560006003556000600455005b6314bfd6d08118610503576001600435600281101561050b57025460e052602060e0f35b505b60006000fd5b600080fd5b61004161055103610041600039610041610551036000f35b600080fd000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67000000000000000000000000745748bcfd8f9c2de519a71d789be8a63dd7d66c
Deployed Bytecode
0x600436101561000d57610505565b60046000601c37600051631cff79cd811861014e576004358060a01c61050b5760e052602435600401620186a081351161050b578080356020018082610100375050506000620187c052620187c060c060006002818352015b60c0515433186100795760018352610089565b8151600101808352811415610066575b505050620187c0511561050b576101005060006000610100516101203460e0515af16100ba573d600060003e3d6000fd5b60e051337fcaac11c45e5fdb5c513e20ac229a3f9f99143580b5eb08d0fecbdd5ae8c81ef5620187c08060408082528083018061010080516020018083828460045afa905050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905060208201915034825290509050620187c0a3005b3461050b576364bcd73081186101ca5760025460e05260e051156101ac57600160e051600180821061050b5780820390509050600281101561050b57025461010052600354610120526004546101405260606101006101c8566101c8565b60006101005260006101205260006101405260606101006101c8565bf35b63a52e736981186102dd576004358060a01c61050b5760e05260025461050b57600054610100526001546101205260006101405261014060c060006002818352015b60c051602002610100015160e051186102285760018352610238565b815160010180835281141561020c575b5050506101405161050b5761014060006002818352015b3361010061014051600281101561050b576020020151186102c457610140516001818183011061050b578082019050905060025560e0516003557f3dbc538770ecfcda0a15ac4731d922045333e3f55a9dbff4923d5ae950fd4b68336101605260e051610180526040610160a15050506102db565b815160010180835281141561024f57505060006000fd5b005b63d1266a1281186103765760025460e052600060e051111561050b57600160e051600280820690509050600281101561050b570254331861050b5760016004557fb4a2afe1602258539e7638f32a9c55473646a5b004d1a2f76ed802bdd6b3c611600160e051600180821061050b5780820390509050600281101561050b570254610100526003546101205233610140526060610100a1005b631d43f539811861044957600060e05260e060c060006002818352015b60c0515433186103a657600183526103b6565b8151600101808352811415610393575b50505060e0511561050b5760025460e052600061010052600060e05111156103fd57600160e051600180821061050b5780820390509050600281101561050b570254610100525b7f65d4d3bd6f71ee062f64e7b4a0b8f2a379c599a6844765e697f102360580029661010051610120526003546101405233610160526060610120a1600060025560006003556000600455005b63980cbc1481186104df5760016004541861050b57600354331861050b57600254600180821061050b578082039050905060e0527f3f26d618a9f0bbc232d4e0814ca8f1b77fec61eff610a967d549270accd437fc600160e051600281101561050b5702546101005233610120526040610100a133600160e051600281101561050b570255600060025560006003556000600455005b6314bfd6d08118610503576001600435600281101561050b57025460e052602060e0f35b505b60006000fd5b600080fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67000000000000000000000000745748bcfd8f9c2de519a71d789be8a63dd7d66c
-----Decoded View---------------
Arg [0] : _authorized (address[2]): 0xbabe61887f1de2713c6f97e567623453d3C79f67,0x745748bcFd8F9c2De519a71D789be8A63dd7d66C
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67
Arg [1] : 000000000000000000000000745748bcfd8f9c2de519a71d789be8a63dd7d66c
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$775.23
Net Worth in GLMR
Token Allocations
XCUSDT
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| GLMR | 100.00% | $0.998338 | 776.5254 | $775.23 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.