Overview
ETH Balance
0.0009591568560328 ETH
Eth Value
$2.50 (@ $2,611.26/ETH)More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20429082 | 61 days ago | 0.00004084 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Arbitrum Broadcaster
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# pragma version 0.3.10 """ @title Arbitrum Broadcaster @author CurveFi @license MIT @custom:version 1.0.1 """ version: public(constant(String[8])) = "1.0.1" interface IArbInbox: def calculateRetryableSubmissionFee(_data_length: uint256, _base_fee: uint256) -> uint256: view event Broadcast: chain_id: indexed(uint256) agent: indexed(Agent) messages: DynArray[Message, MAX_MESSAGES] event SetDestinationData: chain_id: indexed(uint256) data: DestinationData event ApplyAdmins: admins: AdminSet event CommitAdmins: future_admins: AdminSet enum Agent: OWNERSHIP PARAMETER EMERGENCY struct AdminSet: ownership: address parameter: address emergency: address struct Message: target: address data: Bytes[MAX_BYTES] struct DestinationData: arb_inbox: IArbInbox arb_refund: address # DAO owned Vault for example relayer: address MAX_BYTES: constant(uint256) = 1024 MAX_MESSAGES: constant(uint256) = 8 MAXSIZE: constant(uint256) = 16384 admins: public(AdminSet) future_admins: public(AdminSet) destination_data: public(HashMap[uint256, DestinationData]) agent: HashMap[address, Agent] @payable @external def __init__(_admins: AdminSet): assert _admins.ownership != _admins.parameter # a != b assert _admins.ownership != _admins.emergency # a != c assert _admins.parameter != _admins.emergency # b != c self.admins = _admins self.agent[_admins.ownership] = Agent.OWNERSHIP self.agent[_admins.parameter] = Agent.PARAMETER self.agent[_admins.emergency] = Agent.EMERGENCY log ApplyAdmins(_admins) @external def broadcast(_chain_id: uint256, _messages: DynArray[Message, MAX_MESSAGES], _gas_limit: uint256, _max_fee_per_gas: uint256, _destination_data: DestinationData=empty(DestinationData)): """ @notice Broadcast a sequence of messages. @param _chain_id Chain ID of L2 @param _messages The sequence of messages to broadcast. @param _gas_limit The gas limit for the execution on L2. @param _max_fee_per_gas The maximum gas price bid for the execution on L2. @param _destination_data Specific DestinationData (self.destination_data by default) """ agent: Agent = self.agent[msg.sender] assert agent != empty(Agent) destination: DestinationData = _destination_data if destination.relayer == empty(address): destination = self.destination_data[_chain_id] assert destination.relayer != empty(address) # define all variables here before expanding memory enormously submission_cost: uint256 = 0 data: Bytes[MAXSIZE] = _abi_encode( agent, _messages, method_id=method_id("relay(uint256,(address,bytes)[])"), ) submission_cost = destination.arb_inbox.calculateRetryableSubmissionFee(len(data), block.basefee) # NOTE: using `unsafeCreateRetryableTicket` so that refund address is not aliased raw_call( destination.arb_inbox.address, _abi_encode( destination.relayer, # to empty(uint256), # l2CallValue submission_cost, # maxSubmissionCost destination.arb_refund, # excessFeeRefundAddress destination.arb_refund, # callValueRefundAddress _gas_limit, _max_fee_per_gas, data, method_id=method_id("unsafeCreateRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)"), ), value=submission_cost + _gas_limit * _max_fee_per_gas, ) @external def set_destination_data(_chain_id: uint256, _destination_data: DestinationData): """ @notice Set destination data for child chain. """ assert msg.sender == self.admins.ownership self.destination_data[_chain_id] = _destination_data log SetDestinationData(_chain_id, _destination_data) @external def commit_admins(_future_admins: AdminSet): """ @notice Commit an admin set to use in the future. """ assert msg.sender == self.admins.ownership assert _future_admins.ownership != _future_admins.parameter # a != b assert _future_admins.ownership != _future_admins.emergency # a != c assert _future_admins.parameter != _future_admins.emergency # b != c self.future_admins = _future_admins log CommitAdmins(_future_admins) @external def apply_admins(): """ @notice Apply the future admin set. """ admins: AdminSet = self.admins assert msg.sender == admins.ownership # reset old admins self.agent[admins.ownership] = empty(Agent) self.agent[admins.parameter] = empty(Agent) self.agent[admins.emergency] = empty(Agent) # set new admins future_admins: AdminSet = self.future_admins self.agent[future_admins.ownership] = Agent.OWNERSHIP self.agent[future_admins.parameter] = Agent.PARAMETER self.agent[future_admins.emergency] = Agent.EMERGENCY self.admins = future_admins log ApplyAdmins(future_admins) @payable @external def __default__(): assert len(msg.data) == 0
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"Broadcast","inputs":[{"name":"chain_id","type":"uint256","indexed":true},{"name":"agent","type":"uint256","indexed":true},{"name":"messages","type":"tuple[]","components":[{"name":"target","type":"address"},{"name":"data","type":"bytes"}],"indexed":false}],"anonymous":false,"type":"event"},{"name":"SetDestinationData","inputs":[{"name":"chain_id","type":"uint256","indexed":true},{"name":"data","type":"tuple","components":[{"name":"arb_inbox","type":"address"},{"name":"arb_refund","type":"address"},{"name":"relayer","type":"address"}],"indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyAdmins","inputs":[{"name":"admins","type":"tuple","components":[{"name":"ownership","type":"address"},{"name":"parameter","type":"address"},{"name":"emergency","type":"address"}],"indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitAdmins","inputs":[{"name":"future_admins","type":"tuple","components":[{"name":"ownership","type":"address"},{"name":"parameter","type":"address"},{"name":"emergency","type":"address"}],"indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"payable","type":"constructor","inputs":[{"name":"_admins","type":"tuple","components":[{"name":"ownership","type":"address"},{"name":"parameter","type":"address"},{"name":"emergency","type":"address"}]}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"broadcast","inputs":[{"name":"_chain_id","type":"uint256"},{"name":"_messages","type":"tuple[]","components":[{"name":"target","type":"address"},{"name":"data","type":"bytes"}]},{"name":"_gas_limit","type":"uint256"},{"name":"_max_fee_per_gas","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"broadcast","inputs":[{"name":"_chain_id","type":"uint256"},{"name":"_messages","type":"tuple[]","components":[{"name":"target","type":"address"},{"name":"data","type":"bytes"}]},{"name":"_gas_limit","type":"uint256"},{"name":"_max_fee_per_gas","type":"uint256"},{"name":"_destination_data","type":"tuple","components":[{"name":"arb_inbox","type":"address"},{"name":"arb_refund","type":"address"},{"name":"relayer","type":"address"}]}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_destination_data","inputs":[{"name":"_chain_id","type":"uint256"},{"name":"_destination_data","type":"tuple","components":[{"name":"arb_inbox","type":"address"},{"name":"arb_refund","type":"address"},{"name":"relayer","type":"address"}]}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"commit_admins","inputs":[{"name":"_future_admins","type":"tuple","components":[{"name":"ownership","type":"address"},{"name":"parameter","type":"address"},{"name":"emergency","type":"address"}]}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"apply_admins","inputs":[],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"admins","inputs":[],"outputs":[{"name":"","type":"tuple","components":[{"name":"ownership","type":"address"},{"name":"parameter","type":"address"},{"name":"emergency","type":"address"}]}]},{"stateMutability":"view","type":"function","name":"future_admins","inputs":[],"outputs":[{"name":"","type":"tuple","components":[{"name":"ownership","type":"address"},{"name":"parameter","type":"address"},{"name":"emergency","type":"address"}]}]},{"stateMutability":"view","type":"function","name":"destination_data","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"arb_inbox","type":"address"},{"name":"arb_refund","type":"address"},{"name":"relayer","type":"address"}]}]}]
Contract Creation Code
60206107f15f395f518060a01c6100ea5760405260206108115f395f518060a01c6100ea5760605260206108315f395f518060a01c6100ea57608052606051604051146100ea57608051604051146100ea57608051606051146100ea576040515f55606051600155608051600255600160076040516020525f5260405f2055600260076060516020525f5260405f2055600460076080516020525f5260405f20557fe0f6eb67e95817aeae79003a3bb27a26759368de7d4ce19e604f2c26e48a3b5b60405160a05260605160c05260805160e052606060a0a16106ef6100ee610000396106ef610000f35b5f80fd5f3560e01c60026007821660011b6106df01601e395f51565b6354fd4d50811861009657346106db5760208060805260056040527f312e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b63f0bfc3f881186106d4576084361034176106db576024358060a01c6106db576040526044358060a01c6106db576060526064358060a01c6106db576080525f5433186106db5760066004356020525f5260405f20604051815560605160018201556080516002820155506004357f7813d7b7a91534608159c5d4f9a0d1393c95024bb82c450fc4f5df581151198760405160a05260605160c05260805160e052606060a0a2006106d4565b63a5de3619811861016957346106db575f5460405260015460605260025460805260606040f35b6386abaab181186106d45760a4361034176106db576060366122603761032f566106d4565b630a50167481186101b657346106db5760035460405260045460605260055460805260606040f35b6367d20a5c81186106d457346106db575f5460405260015460605260025460805260405133186106db575f60076040516020525f5260405f20555f60076060516020525f5260405f20555f60076080516020525f5260405f205560035460a05260045460c05260055460e0526001600760a0516020525f5260405f20556002600760c0516020525f5260405f20556004600760e0516020525f5260405f205560a0515f5560c05160015560e0516002557fe0f6eb67e95817aeae79003a3bb27a26759368de7d4ce19e604f2c26e48a3b5b60a0516101005260c0516101205260e051610140526060610100a1006106d4565b63b06565ad81186106d4576024361034176106db5760066004356020525f5260405f208054604052600181015460605260028101546080525060606040f36106d4565b6336e95d0b81186106d457610104361034176106db576084358060a01c6106db576122605260a4358060a01c6106db576122805260c4358060a01c6106db576122a0525b60243560040160088135116106db5780355f81600881116106db5780156103a357905b61044081026060018160051b602086010135602086010180358060a01c6106db578252602081013581016104008135116106db57602081350160208401818382375050505050600101818118610352575b50508060405250506007336020525f5260405f20546122c0526122c051156106db57612260516122e05261228051612300526122a051612320526123205161040d5760066004356020525f5260405f2080546122e052600181015461230052600281015461232052505b61232051156106db575f6123405263f6caf91061638452600460406122c0516163a452806163c452806163a4015f6040518083528060051b5f82600881116106db5780156104cc57905b828160051b60208801015261044081026060018360208801016040825182528060208301526020830181830160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190509050905083019250600101818118610457575b505082016020019150509050810190500161638052616380602081510180612360828460045afa5050506122e05163a66b327d61638052612360516163a052486163c0526020616380604461639c845afa610529573d5f5f3e3d5ffd5b60203d106106db57616380905051612340526122e051612340516044356064358082028115838383041417156106db57905090508082018281106106db57905090505a636e6e8a6a616384526004610100612320516163a4525f6163c452612340516163e4526123005161640452612300516164245260406044616444378061648452806163a4016020612360510180828261236060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190500161638052616380505f5f616380516163a0858786f1905090509050610611573d5f5f3e3d5ffd5b006106d4565b63579f1ece81186106d4576064361034176106db576004358060a01c6106db576040526024358060a01c6106db576060526044358060a01c6106db576080525f5433186106db57606051604051146106db57608051604051146106db57608051606051146106db576040516003556060516004556080516005557faab5f73e74c83b7bbe381c885335c8bc6f8638e2eee26576cf80844c7ca0f11b60405160a05260605160c05260805160e052606060a0a1006106d4566106d4565b5b366106db57005b5f80fd0018014206d302eb018e02a8061706d3841906ef811000a16576797065728300030a001400000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb16830000000000000000000000004eeb3ba4f221ca16ed4a0cc7254e2e32df948c5f000000000000000000000000467947ee34af926cf1dcac093870f613c96b1e0c
Deployed Bytecode
0x5f3560e01c60026007821660011b6106df01601e395f51565b6354fd4d50811861009657346106db5760208060805260056040527f312e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b63f0bfc3f881186106d4576084361034176106db576024358060a01c6106db576040526044358060a01c6106db576060526064358060a01c6106db576080525f5433186106db5760066004356020525f5260405f20604051815560605160018201556080516002820155506004357f7813d7b7a91534608159c5d4f9a0d1393c95024bb82c450fc4f5df581151198760405160a05260605160c05260805160e052606060a0a2006106d4565b63a5de3619811861016957346106db575f5460405260015460605260025460805260606040f35b6386abaab181186106d45760a4361034176106db576060366122603761032f566106d4565b630a50167481186101b657346106db5760035460405260045460605260055460805260606040f35b6367d20a5c81186106d457346106db575f5460405260015460605260025460805260405133186106db575f60076040516020525f5260405f20555f60076060516020525f5260405f20555f60076080516020525f5260405f205560035460a05260045460c05260055460e0526001600760a0516020525f5260405f20556002600760c0516020525f5260405f20556004600760e0516020525f5260405f205560a0515f5560c05160015560e0516002557fe0f6eb67e95817aeae79003a3bb27a26759368de7d4ce19e604f2c26e48a3b5b60a0516101005260c0516101205260e051610140526060610100a1006106d4565b63b06565ad81186106d4576024361034176106db5760066004356020525f5260405f208054604052600181015460605260028101546080525060606040f36106d4565b6336e95d0b81186106d457610104361034176106db576084358060a01c6106db576122605260a4358060a01c6106db576122805260c4358060a01c6106db576122a0525b60243560040160088135116106db5780355f81600881116106db5780156103a357905b61044081026060018160051b602086010135602086010180358060a01c6106db578252602081013581016104008135116106db57602081350160208401818382375050505050600101818118610352575b50508060405250506007336020525f5260405f20546122c0526122c051156106db57612260516122e05261228051612300526122a051612320526123205161040d5760066004356020525f5260405f2080546122e052600181015461230052600281015461232052505b61232051156106db575f6123405263f6caf91061638452600460406122c0516163a452806163c452806163a4015f6040518083528060051b5f82600881116106db5780156104cc57905b828160051b60208801015261044081026060018360208801016040825182528060208301526020830181830160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190509050905083019250600101818118610457575b505082016020019150509050810190500161638052616380602081510180612360828460045afa5050506122e05163a66b327d61638052612360516163a052486163c0526020616380604461639c845afa610529573d5f5f3e3d5ffd5b60203d106106db57616380905051612340526122e051612340516044356064358082028115838383041417156106db57905090508082018281106106db57905090505a636e6e8a6a616384526004610100612320516163a4525f6163c452612340516163e4526123005161640452612300516164245260406044616444378061648452806163a4016020612360510180828261236060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190500161638052616380505f5f616380516163a0858786f1905090509050610611573d5f5f3e3d5ffd5b006106d4565b63579f1ece81186106d4576064361034176106db576004358060a01c6106db576040526024358060a01c6106db576060526044358060a01c6106db576080525f5433186106db57606051604051146106db57608051604051146106db57608051606051146106db576040516003556060516004556080516005557faab5f73e74c83b7bbe381c885335c8bc6f8638e2eee26576cf80844c7ca0f11b60405160a05260605160c05260805160e052606060a0a1006106d4566106d4565b5b366106db57005b5f80fd0018014206d302eb018e02a8061706d3
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb16830000000000000000000000004eeb3ba4f221ca16ed4a0cc7254e2e32df948c5f000000000000000000000000467947ee34af926cf1dcac093870f613c96b1e0c
-----Decoded View---------------
Arg [0] : _admins (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb1683
Arg [1] : 0000000000000000000000004eeb3ba4f221ca16ed4a0cc7254e2e32df948c5f
Arg [2] : 000000000000000000000000467947ee34af926cf1dcac093870f613c96b1e0c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,611.26 | 0.00095916 | $2.5 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.