Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 20 from a total of 20 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Send_blockhash | 18191013 | 569 days ago | IN | 0 ETH | 0.00042611 | ||||
Send_blockhash | 17616198 | 650 days ago | IN | 0 ETH | 0.00069252 | ||||
Send_blockhash | 17593330 | 653 days ago | IN | 0 ETH | 0.00184044 | ||||
Send_blockhash | 17593296 | 653 days ago | IN | 0 ETH | 0.00168813 | ||||
Send_blockhash | 17038554 | 731 days ago | IN | 0 ETH | 0.00151096 | ||||
Send_blockhash | 17027121 | 733 days ago | IN | 0 ETH | 0.0008228 | ||||
Send_blockhash | 16941458 | 745 days ago | IN | 0 ETH | 0.00218829 | ||||
Send_blockhash | 16932021 | 746 days ago | IN | 0 ETH | 0.00160573 | ||||
Send_blockhash | 16932014 | 746 days ago | IN | 0 ETH | 0.00116113 | ||||
Send_blockhash | 16632457 | 788 days ago | IN | 0 ETH | 0.00151859 | ||||
Send_blockhash | 16125349 | 859 days ago | IN | 0 ETH | 0.00058861 | ||||
Send_blockhash | 16125345 | 859 days ago | IN | 0 ETH | 0.00057875 | ||||
Send_blockhash | 16125341 | 859 days ago | IN | 0 ETH | 0.00058677 | ||||
Send_blockhash | 15990342 | 878 days ago | IN | 0 ETH | 0.00090156 | ||||
Send_blockhash | 15990339 | 878 days ago | IN | 0 ETH | 0.00120929 | ||||
Send_blockhash | 15990335 | 878 days ago | IN | 0 ETH | 0.00088304 | ||||
Send_blockhash | 15988583 | 878 days ago | IN | 0 ETH | 0.00060086 | ||||
Send_blockhash | 15628919 | 929 days ago | IN | 0 ETH | 0.00102315 | ||||
Send_blockhash | 15600139 | 933 days ago | IN | 0 ETH | 0.00048372 | ||||
Send_blockhash | 14754309 | 1068 days ago | IN | 0 ETH | 0.00352133 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
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 Curve Ethereum State Sender """ interface AnyCallProxy: def anyCall( _to: address, _data: Bytes[68], _fallback: address, _to_chain_id: uint256 ): nonpayable interface RootGaugeFactory: def get_bridger(_chain_id: uint256) -> address: view interface VotingEscrow: def epoch() -> uint256: view def point_history(_idx: uint256) -> Point: view def user_point_epoch(_user: address) -> uint256: view struct Point: bias: int128 slope: int128 # - dweight / dt ts: uint256 blk: uint256 # block WEEK: constant(uint256) = 86400 * 7 ANYCALL_PROXY: constant(address) = 0x37414a8662bC1D25be3ee51Fb27C2686e2490A89 ROOT_GAUGE_FACTORY: constant(address) = 0xabC000d88f23Bb45525E447528DBF656A9D55bf5 VOTING_ESCROW: constant(address) = 0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2 # chain_id => last block number sent _last_sent: HashMap[uint256, uint256] @external def send_blockhash(_block_number: uint256, _chain_id: uint256): """ @notice Send the blockhash of `_block_number` to `_chain_id` @dev The `_block_number` chosen must be within `block_number_bounds()` @param _block_number The block number to push the blockhash of @param _chain_id The chain id of the chain to push the data to """ last_sent: uint256 = self._last_sent[_chain_id] # must wait 1024 blocks since the last block sent before sending a new block assert self._last_sent[_chain_id] < block.number - 1024 # dev: sending too soon # must send a block that has >40 confirmations assert block.number - _block_number > 40 # dev: block too fresh # must send a block that is <256 blocks old assert block.number - _block_number < 256 # dev: block too stale block_hash: bytes32 = blockhash(_block_number) assert block_hash != EMPTY_BYTES32 # dev: invalid blockhash assert RootGaugeFactory(ROOT_GAUGE_FACTORY).get_bridger(_chain_id) != ZERO_ADDRESS # dev: invalid chain_id # update the last block sent self._last_sent[_chain_id] = _block_number AnyCallProxy(ANYCALL_PROXY).anyCall( self, _abi_encode( _block_number, block_hash, method_id=method_id("set_eth_blockhash(uint256,bytes32)") ), ZERO_ADDRESS, _chain_id ) @view @external def block_number_bounds() -> uint256[2]: """ @notice The lower and upper bounds (exclusive) of valid block numbers to push. @dev The block number closest to the upper bound should be chosen to send cross chain """ return [block.number - 256, block.number - 40] @view @external def generate_eth_get_proof_params(_user: address) -> (address, uint256[20], uint256): """ @notice Generate the params arguments required for the `eth_getProof` RPC call @dev This method should be called at the same block number as the blockhash the proof will be verified against. For blocks greater than `block.number - 256` this method should be called via an archive node. @param _user The account the storage proof will be generated for """ # initialize positions array positions: uint256[20] = empty(uint256[20]) # `VotingEscrow.epoch()` positions[0] = 3 # `VotingEscrow.point_history(uint256)` global_epoch: uint256 = VotingEscrow(VOTING_ESCROW).epoch() point_history_pos: uint256 = convert(keccak256(_abi_encode(convert(keccak256(_abi_encode(convert(4, bytes32))), uint256) + global_epoch)), uint256) for i in range(4): positions[1 + i] = point_history_pos + i # `VotingEscrow.user_point_epoch(address)` positions[5] = convert(keccak256(_abi_encode(convert(6, bytes32), _user)), uint256) # `VotingEscrow.user_point_history(address,uint256)` user_epoch: uint256 = VotingEscrow(VOTING_ESCROW).user_point_epoch(_user) user_point_history_pos: uint256 = convert(keccak256(_abi_encode(convert(keccak256(_abi_encode(keccak256(_abi_encode(convert(5, bytes32), _user)))), uint256) + user_epoch)), uint256) for i in range(4): positions[6 + i] = user_point_history_pos + i # `VotingEscrow.locked(address)` # uint256 locked_pos = uint256(keccak256()); locked_pos: uint256 = convert(keccak256(_abi_encode(keccak256(_abi_encode(convert(2, bytes32), _user)))), uint256) positions[10] = locked_pos positions[11] = locked_pos + 1 # `VotingEscrow.slope_changes(uint256)` # Slots for the 8 weeks worth of slope changes last_point: Point = VotingEscrow(VOTING_ESCROW).point_history(global_epoch) start_time: uint256 = (last_point.ts / WEEK) * WEEK + WEEK for i in range(8): positions[12 + i] = convert(keccak256(_abi_encode(convert(7, bytes32), start_time + WEEK * i)), uint256) return VOTING_ESCROW, positions, block.number @view @external def get_last_block_number_sent(_chain_id: uint256) -> uint256: """ @notice Get the last block number which had its blockhash sent to `_chain_id` @param _chain_id The chain id of interest """ last_block: uint256 = self._last_sent[_chain_id] if last_block == 0: last_block = 14309414 return last_block
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"stateMutability":"nonpayable","type":"function","name":"send_blockhash","inputs":[{"name":"_block_number","type":"uint256"},{"name":"_chain_id","type":"uint256"}],"outputs":[],"gas":54147},{"stateMutability":"view","type":"function","name":"block_number_bounds","inputs":[],"outputs":[{"name":"","type":"uint256[2]"}],"gas":740},{"stateMutability":"view","type":"function","name":"generate_eth_get_proof_params","inputs":[{"name":"_user","type":"address"}],"outputs":[{"name":"","type":"address"},{"name":"","type":"uint256[20]"},{"name":"","type":"uint256"}],"gas":21089},{"stateMutability":"view","type":"function","name":"get_last_block_number_sent","inputs":[{"name":"_chain_id","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":2747}]
Contract Creation Code
61076556600436101561000d57610756565b60046000601c376000513461075c5763c899fe32811861021e57600060243560a05260805260406080205460e0524361040080821061075c5780820390509050600060243560a052608052604060802054101561075c5760284360043580821061075c5780820390509050111561075c576101004360043580821061075c5780820390509050101561075c576004356101004303811261075c574381101561075c5740610100526000610100511461075c57600063087ca57f61012052602435610140526020610120602461013c73abc000d88f23bb45525e447528dbf656a9d55bf55afa610101573d600060003e3d6000fd5b601f3d111561075c57610120511461075c57600435600060243560a05260805260406080205563f9754c936101a0526101c0806080308252602082019150808252630fb997cc61012452600460043561014452610100516101645260400161012052610120818401808280516020018083828460045afa905050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090509050810190506020820191506000825260208201915060243582525050507337414a8662bc1d25be3ee51fb27c2686e2490a893b1561075c57600060006101046101bc60007337414a8662bc1d25be3ee51fb27c2686e2490a895af161021c573d600060003e3d6000fd5b005b633c90ebc78118610259574361010080821061075c578082039050905060e05243602880821061075c578082039050905061010052604060e0f35b6380dc72db8118610718576004358060a01c61075c5760e052610280366101003760036101005263900cf0cf6103a05260206103a060046103bc735f3b5dfeb7b28cdbd7faba78963ee202a494e2a25afa6102b9573d600060003e3d6000fd5b601f3d111561075c576103a0516103805260046104e05260206104c0526104c080516020820120905061038051818183011061075c5780820190509050610520526020610500526105008051602082012090506103a0526103c060006004818352015b6103a0516103c051818183011061075c578082019050905061010060016103c051818183011061075c5780820190509050601481101561075c576020020152815160010180835281141561031c57505060066104405260e051610460526040610420526104208051602082012090506101a05263010ae7576103e05260e0516104005260206103e060246103fc735f3b5dfeb7b28cdbd7faba78963ee202a494e2a25afa6103cf573d600060003e3d6000fd5b601f3d111561075c576103e0516103c05260056107c05260e0516107e05260406107a0526107a0805160208201209050610820526020610800526108008051602082012090506103c051818183011061075c5780820190509050610860526020610840526108408051602082012090506103e05261040060006004818352015b6103e05161040051818183011061075c5780820190509050610100600661040051818183011061075c5780820190509050601481101561075c576020020152815160010180835281141561044f57505060026105a05260e0516105c0526040610580526105808051602082012090506106005260206105e0526105e0805160208201209050610400526104005161024052610400516001818183011061075c57808201905090506102605263d1febfb96104a052610380516104c05260806104a060246104bc735f3b5dfeb7b28cdbd7faba78963ee202a494e2a25afa61053b573d600060003e3d6000fd5b607f3d111561075c576104a080518060801d81607f1d1861075c576104205260208101518060801d81607f1d1861075c5761044052604081015161046052606081015161048052506104605162093a808082049050905062093a8080820282158284830414171561075c579050905062093a80818183011061075c57808201905090506104a0526104c060006008818352015b6007610560526104a05162093a806104c05180820282158284830414171561075c5790509050818183011061075c578082019050905061058052604061054052610540805160208201209050610100600c6104c051818183011061075c5780820190509050601481101561075c57602002015281516001018083528114156105ce575050735f3b5dfeb7b28cdbd7faba78963ee202a494e2a26104c052610100516104e05261012051610500526101405161052052610160516105405261018051610560526101a051610580526101c0516105a0526101e0516105c052610200516105e05261022051610600526102405161062052610260516106405261028051610660526102a051610680526102c0516106a0526102e0516106c052610300516106e05261032051610700526103405161072052610360516107405243610760526102c06104c0f35b6314d891f0811861075457600060043560a05260805260406080205460e05260e0516107465762da582660e0525b60e051610100526020610100f35b505b60006000fd5b600080fd5b61000461076503610004600039610004610765036000f3
Deployed Bytecode
0x600436101561000d57610756565b60046000601c376000513461075c5763c899fe32811861021e57600060243560a05260805260406080205460e0524361040080821061075c5780820390509050600060243560a052608052604060802054101561075c5760284360043580821061075c5780820390509050111561075c576101004360043580821061075c5780820390509050101561075c576004356101004303811261075c574381101561075c5740610100526000610100511461075c57600063087ca57f61012052602435610140526020610120602461013c73abc000d88f23bb45525e447528dbf656a9d55bf55afa610101573d600060003e3d6000fd5b601f3d111561075c57610120511461075c57600435600060243560a05260805260406080205563f9754c936101a0526101c0806080308252602082019150808252630fb997cc61012452600460043561014452610100516101645260400161012052610120818401808280516020018083828460045afa905050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090509050810190506020820191506000825260208201915060243582525050507337414a8662bc1d25be3ee51fb27c2686e2490a893b1561075c57600060006101046101bc60007337414a8662bc1d25be3ee51fb27c2686e2490a895af161021c573d600060003e3d6000fd5b005b633c90ebc78118610259574361010080821061075c578082039050905060e05243602880821061075c578082039050905061010052604060e0f35b6380dc72db8118610718576004358060a01c61075c5760e052610280366101003760036101005263900cf0cf6103a05260206103a060046103bc735f3b5dfeb7b28cdbd7faba78963ee202a494e2a25afa6102b9573d600060003e3d6000fd5b601f3d111561075c576103a0516103805260046104e05260206104c0526104c080516020820120905061038051818183011061075c5780820190509050610520526020610500526105008051602082012090506103a0526103c060006004818352015b6103a0516103c051818183011061075c578082019050905061010060016103c051818183011061075c5780820190509050601481101561075c576020020152815160010180835281141561031c57505060066104405260e051610460526040610420526104208051602082012090506101a05263010ae7576103e05260e0516104005260206103e060246103fc735f3b5dfeb7b28cdbd7faba78963ee202a494e2a25afa6103cf573d600060003e3d6000fd5b601f3d111561075c576103e0516103c05260056107c05260e0516107e05260406107a0526107a0805160208201209050610820526020610800526108008051602082012090506103c051818183011061075c5780820190509050610860526020610840526108408051602082012090506103e05261040060006004818352015b6103e05161040051818183011061075c5780820190509050610100600661040051818183011061075c5780820190509050601481101561075c576020020152815160010180835281141561044f57505060026105a05260e0516105c0526040610580526105808051602082012090506106005260206105e0526105e0805160208201209050610400526104005161024052610400516001818183011061075c57808201905090506102605263d1febfb96104a052610380516104c05260806104a060246104bc735f3b5dfeb7b28cdbd7faba78963ee202a494e2a25afa61053b573d600060003e3d6000fd5b607f3d111561075c576104a080518060801d81607f1d1861075c576104205260208101518060801d81607f1d1861075c5761044052604081015161046052606081015161048052506104605162093a808082049050905062093a8080820282158284830414171561075c579050905062093a80818183011061075c57808201905090506104a0526104c060006008818352015b6007610560526104a05162093a806104c05180820282158284830414171561075c5790509050818183011061075c578082019050905061058052604061054052610540805160208201209050610100600c6104c051818183011061075c5780820190509050601481101561075c57602002015281516001018083528114156105ce575050735f3b5dfeb7b28cdbd7faba78963ee202a494e2a26104c052610100516104e05261012051610500526101405161052052610160516105405261018051610560526101a051610580526101c0516105a0526101e0516105c052610200516105e05261022051610600526102405161062052610260516106405261028051610660526102a051610680526102c0516106a0526102e0516106c052610300516106e05261032051610700526103405161072052610360516107405243610760526102c06104c0f35b6314d891f0811861075457600060043560a05260805260406080205460e05260e0516107465762da582660e0525b60e051610100526020610100f35b505b60006000fd5b600080fd
Loading...
Loading
Loading...
Loading
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.