Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Vesting Escrow
Compiler Version
vyper:0.3.7
Contract Source Code (Vyper language format)
# @version 0.3.7 """ @title Vesting Escrow @author Curve Finance, Yearn Finance, Lido Finance @license GPL-3.0 @notice Vests ERC20 tokens for a single address @dev Intended to be deployed many times via `VotingEscrowFactory` """ from vyper.interfaces import ERC20 interface IVestingEscrowFactory: def voting_adapter() -> address: nonpayable def owner() -> address: nonpayable def manager() -> address: nonpayable event VestingEscrowInitialized: factory: indexed(address) recipient: indexed(address) token: indexed(address) amount: uint256 start_time: uint256 end_time: uint256 cliff_length: uint256 is_fully_revokable: bool event Claim: beneficiary: indexed(address) claimed: uint256 event UnvestedTokensRevoked: recoverer: indexed(address) revoked: uint256 event VestingFullyRevoked: recoverer: indexed(address) revoked: uint256 event ERC20Recovered: token: address amount: uint256 event ETHRecovered: amount: uint256 recipient: public(address) token: public(ERC20) start_time: public(uint256) end_time: public(uint256) cliff_length: public(uint256) factory: public(IVestingEscrowFactory) total_locked: public(uint256) is_fully_revokable: public(bool) total_claimed: public(uint256) disabled_at: public(uint256) initialized: public(bool) is_fully_revoked: public(bool) @external def __init__(): """ @notice Initialize source contract implementation. """ # ensure that the original contract cannot be initialized self.initialized = True @external def initialize( token: address, amount: uint256, recipient: address, start_time: uint256, end_time: uint256, cliff_length: uint256, is_fully_revokable: bool, factory: address, ) -> bool: """ @notice Initialize the contract. @dev This function is separate from `__init__` because of the factory pattern used in `VestingEscrowFactory.deploy_vesting_contract`. It may be called once per deployment. @param token Address of the ERC20 token being distributed @param amount Amount of the ERC20 token to be controleed by escrow @param recipient Address to vest tokens for @param start_time Epoch time at which token distribution starts @param end_time Time until everything should be vested @param cliff_length Duration after which the first portion vests @param factory Address of the parent factory """ assert not self.initialized, "can only initialize once" self.initialized = True self.token = ERC20(token) self.is_fully_revokable = is_fully_revokable self.start_time = start_time self.end_time = end_time self.cliff_length = cliff_length assert ERC20(token).balanceOf(self) >= amount, "insufficient balance" self.total_locked = amount self.recipient = recipient self.disabled_at = end_time # Set to maximum time self.factory = IVestingEscrowFactory(factory) log VestingEscrowInitialized( factory, recipient, token, amount, start_time, end_time, cliff_length, is_fully_revokable, ) return True @internal @view def _total_vested_at(time: uint256) -> uint256: start: uint256 = self.start_time end: uint256 = self.end_time locked: uint256 = self.total_locked if time < start + self.cliff_length: return 0 return min(locked * (time - start) / (end - start), locked) @internal @view def _unclaimed() -> uint256: if self.is_fully_revoked: return 0 claim_time: uint256 = min(block.timestamp, self.disabled_at) return self._total_vested_at(claim_time) - self.total_claimed @external @view def unclaimed() -> uint256: """ @notice Get the number of unclaimed, vested tokens for recipient """ return self._unclaimed() @internal @view def _locked() -> uint256: if block.timestamp >= self.disabled_at: return 0 return self.total_locked - self._total_vested_at(block.timestamp) @external @view def locked() -> uint256: """ @notice Get the number of locked tokens for recipient """ return self._locked() @external def claim( beneficiary: address = msg.sender, amount: uint256 = max_value(uint256) ) -> uint256: """ @notice Claim tokens which have vested @param beneficiary Address to transfer claimed tokens to @param amount Amount of tokens to claim """ self._check_sender_is_recipient() claimable: uint256 = min(self._unclaimed(), amount) self.total_claimed += claimable assert self.token.transfer( beneficiary, claimable, default_return_value=True ), "transfer failed" log Claim(beneficiary, claimable) return claimable @external def revoke_unvested(): """ @notice Disable further flow of tokens and revoke the unvested part to owner """ self._check_sender_is_owner_or_manager() revokable: uint256 = self._locked() assert revokable > 0, "nothing to revoke" self.disabled_at = block.timestamp assert self.token.transfer( self._owner(), revokable, default_return_value=True ), "transfer failed" log UnvestedTokensRevoked(msg.sender, revokable) @external def revoke_all(): """ @notice Disable further flow of tokens and revoke all tokens to owner """ self._check_sender_is_owner() assert self.is_fully_revokable, "not allowed for ordinary vesting" assert not self.is_fully_revoked, "already fully revoked" # NOTE: do not revoke extra tokens revokable: uint256 = self._locked() + self._unclaimed() assert revokable > 0, "nothing to revoke" self.is_fully_revoked = True self.disabled_at = block.timestamp assert self.token.transfer( self._owner(), revokable, default_return_value=True ), "transfer failed" log VestingFullyRevoked(msg.sender, revokable) @external def recover_erc20(token: address, amount: uint256): """ @notice Recover ERC20 tokens to recipient @param token Address of the ERC20 token to be recovered @param amount Amount of the ERC20 token to be recovered """ recoverable: uint256 = amount if token == self.token.address: available: uint256 = ERC20(token).balanceOf(self) - ( self._locked() + self._unclaimed() ) recoverable = min(recoverable, available) if recoverable > 0: assert ERC20(token).transfer( self.recipient, recoverable, default_return_value=True ), "transfer failed" log ERC20Recovered(token, recoverable) @external def recover_ether(): """ @notice Recover Ether to recipient """ amount: uint256 = self.balance if amount != 0: self._safe_send_ether(self.recipient, amount) log ETHRecovered(amount) @external def aragon_vote(abi_encoded_params: Bytes[1000]): """ @notice Participate Aragon vote using all available tokens on the contract's balance @param abi_encoded_params Abi encoded data for call. Can be obtained from VotingAdapter.encode_aragon_vote_calldata """ self._check_sender_is_recipient() self._check_voting_adapter_is_set() raw_call( self.factory.voting_adapter(), _abi_encode( abi_encoded_params, method_id=method_id("aragon_vote(bytes)"), ), is_delegate_call=True, ) @external def snapshot_set_delegate(abi_encoded_params: Bytes[1000]): """ @notice Delegate Snapshot voting power of all available tokens on the contract's balance @param abi_encoded_params Abi encoded data for call. Can be obtained from VotingAdapter.encode_snapshot_set_delegate_calldata """ self._check_sender_is_recipient() self._check_voting_adapter_is_set() raw_call( self.factory.voting_adapter(), _abi_encode( abi_encoded_params, method_id=method_id("snapshot_set_delegate(bytes)"), ), is_delegate_call=True, ) @external def delegate(abi_encoded_params: Bytes[1000]): """ @notice Delegate voting power of all available tokens on the contract's balance @param abi_encoded_params Abi encoded data for call. Can be obtained from VotingAdapter.encode_delegate_calldata """ self._check_sender_is_recipient() self._check_voting_adapter_is_set() raw_call( self.factory.voting_adapter(), _abi_encode( abi_encoded_params, method_id=method_id("delegate(bytes)"), ), is_delegate_call=True, ) @internal def _owner() -> address: return self.factory.owner() @internal def _manager() -> address: return self.factory.manager() @internal def _check_sender_is_owner_or_manager(): assert ( msg.sender == self._owner() or msg.sender == self._manager() ), "msg.sender not owner or manager" @internal def _check_sender_is_owner(): assert msg.sender == self._owner(), "msg.sender not owner" @internal def _check_sender_is_recipient(): assert msg.sender == self.recipient, "msg.sender not recipient" @internal def _check_voting_adapter_is_set(): assert self.factory.voting_adapter() != empty( address ), "voting adapter not set" @internal def _safe_send_ether(_to: address, _value: uint256): """ @notice Overcome 2300 gas limit on simple send """ _response: Bytes[32] = raw_call( _to, empty(bytes32), value=_value, max_outsize=32 ) if len(_response) > 0: assert convert(_response, bool), "ETH transfer failed"
[{"name":"VestingEscrowInitialized","inputs":[{"name":"factory","type":"address","indexed":true},{"name":"recipient","type":"address","indexed":true},{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"start_time","type":"uint256","indexed":false},{"name":"end_time","type":"uint256","indexed":false},{"name":"cliff_length","type":"uint256","indexed":false},{"name":"is_fully_revokable","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"Claim","inputs":[{"name":"beneficiary","type":"address","indexed":true},{"name":"claimed","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UnvestedTokensRevoked","inputs":[{"name":"recoverer","type":"address","indexed":true},{"name":"revoked","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"VestingFullyRevoked","inputs":[{"name":"recoverer","type":"address","indexed":true},{"name":"revoked","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ERC20Recovered","inputs":[{"name":"token","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ETHRecovered","inputs":[{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"initialize","inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"recipient","type":"address"},{"name":"start_time","type":"uint256"},{"name":"end_time","type":"uint256"},{"name":"cliff_length","type":"uint256"},{"name":"is_fully_revokable","type":"bool"},{"name":"factory","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"unclaimed","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"locked","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"beneficiary","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"revoke_unvested","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"revoke_all","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"recover_erc20","inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"recover_ether","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"aragon_vote","inputs":[{"name":"abi_encoded_params","type":"bytes"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"snapshot_set_delegate","inputs":[{"name":"abi_encoded_params","type":"bytes"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"delegate","inputs":[{"name":"abi_encoded_params","type":"bytes"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"recipient","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"start_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"end_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"cliff_length","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"total_locked","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"is_fully_revokable","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"total_claimed","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"disabled_at","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"is_fully_revoked","inputs":[],"outputs":[{"name":"","type":"bool"}]}]
Contract Creation Code
34611450576001600a5561143461001b61000039611434610000f36003361161000c57610f94565b60003560e01c3461142257633d4da16d81186101fa576101043610611422576004358060a01c611422576040526044358060a01c6114225760605260c4358060011c6114225760805260e4358060a01c6114225760a052600a54156100c857601860c0527f63616e206f6e6c7920696e697469616c697a65206f6e6365000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001600a5560405160015560805160075560643560025560843560035560a4356004556024356040516370a0823160c0523060e052602060c0602460dc845afa610117573d600060003e3d6000fd5b60203d106114225760c0905051101561018d576014610100527f696e73756666696369656e742062616c616e63650000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b60243560065560605160005560843560095560a05160055560405160605160a0517f2d30caaf2a01e6264cf4671ca427c07d01ad37075b1830726c7004e291faf89660243560c05260643560e05260406084610100376080516101405260a060c0a4600160c052602060c0f35b63669416b8811861021f576004361061142257602061021a610100611035565b610100f35b63cf3090128118610242576004361061142257602061023e60e0611085565b60e0f35b634e71d92d811861028457600436106114225733610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b631e83409a81186102d05760243610611422576004358060a01c61142257610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b63aad3ec9681186104525760443610611422576004358060a01c6114225761010052602435610120525b6103026110c0565b61030d610160611035565b6101605161012051808281188284100218905090506101405260085461014051808201828110611422579050905060085560015463a9059cbb610160526101005161018052610140516101a0526020610160604461017c6000855af1610378573d600060003e3d6000fd5b3d61038f57803b156114225760016101c0526103a8565b60203d1061142257610160518060011c611422576101c0525b6101c090505161041857600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b610100517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d461014051610160526020610160a26020610140f35b63c31ab974811861060957600436106114225761046d6111b7565b610478610140611085565b6101405161012052610120516104ee576011610140527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b4260095560015463a9059cbb61016052610509610140611129565b6101405161018052610120516101a0526020610160604461017c6000855af1610537573d600060003e3d6000fd5b3d61054e57803b156114225760016101c052610567565b60203d1061142257610160518060011c611422576101c0525b6101c09050516105d757600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b337ff23abb1803813c60f11b7ce4b5ae745d16ce0d99b71cf034c699d6634d0a961361012051610140526020610140a2005b637bdbb5f781186108b5576004361061142257610624611247565b60075461068e576020610100527f6e6f7420616c6c6f77656420666f72206f7264696e6172792076657374696e676101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b600b54156106f9576015610100527f616c72656164792066756c6c79207265766f6b656400000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b610704610120611085565b61012051610713610140611035565b6101405180820182811061142257905090506101005261010051610795576011610120527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b6001600b554260095560015463a9059cbb610140526107b5610120611129565b610120516101605261010051610180526020610140604461015c6000855af16107e3573d600060003e3d6000fd5b3d6107fa57803b156114225760016101a052610813565b60203d1061142257610140518060011c611422576101a0525b6101a090505161088357600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b337fc1f0f68ce9eb64d4ec0574f3a5ab1a8534d4e6bdc64804f6efefacd72303dd5161010051610120526020610120a2005b6323a50d3c8118610a9b5760443610611422576004358060a01c611422576101005260243561012052600154610100511861097e57610100516370a082316101605230610180526020610160602461017c845afa610918573d600060003e3d6000fd5b60203d10611422576101609050516109316101a0611085565b6101a0516109406101c0611035565b6101c0518082018281106114225790509050808203828111611422579050905061014052610120516101405180828118828410021890509050610120525b6101205115610a99576101005163a9059cbb610140526000546101605261012051610180526020610140604461015c6000855af16109c1573d600060003e3d6000fd5b3d6109d857803b156114225760016101a0526109f1565b60203d1061142257610140518060011c611422576101a0525b6101a0905051610a6157600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b7f505b28e6941631badc363841ecbf8e1214b9379c643936458e87be718e157999610100516101405261012051610160526040610140a15b005b63644613468118610b0357600436106114225747610120526101205115610b015760005460405261012051606052610ad16112ba565b7f0296f2c4dbc8c0e53c0ffab63f84aeebd5c28aa143475a37346bf15ac003f32761012051610140526020610140a15b005b63412f31218118610c0c5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610b416110c0565b610b4961137d565b63412f312161056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610bdb573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610c0a573d600060003e3d6000fd5b005b63862e69708118610d155760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610c4a6110c0565b610c5261137d565b63862e697061056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ce4573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610d13573d600060003e3d6000fd5b005b630ccfac9e8118610e1e5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610d536110c0565b610d5b61137d565b630ccfac9e61056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ded573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610e1c573d600060003e3d6000fd5b005b6366d003ac8118610e3d57600436106114225760005460405260206040f35b63fc0c546a8118610e5c57600436106114225760015460405260206040f35b63834ee4178118610e7b57600436106114225760025460405260206040f35b63162433568118610e9a57600436106114225760035460405260206040f35b6394abf7608118610eb957600436106114225760045460405260206040f35b63c45a01558118610ed857600436106114225760055460405260206040f35b633c48a6208118610ef757600436106114225760065460405260206040f35b632cbd43d38118610f1657600436106114225760075460405260206040f35b636af904c68118610f3557600436106114225760085460405260206040f35b63ac1a2f698118610f5457600436106114225760095460405260206040f35b63158ef93e8118610f73576004361061142257600a5460405260206040f35b636d01f0028118610f92576004361061142257600b5460405260206040f35b505b60006000fd5b60025460605260035460805260065460a05260605160045480820182811061142257905090506040511015610fd3576000815250611033565b60a0516040516060518082038281116114225790509050808202811583838304141715611422579050905060805160605180820382811161142257905090508015611422578082049050905060a051808281188284100218905090508152505b565b600b5415611047576000815250611083565b426009548082811882841002189050905060c05260c05160405261106b60e0610f9a565b60e05160085480820382811161142257905090508152505b565b60095442106110985760008152506110be565b600654426040526110a960c0610f9a565b60c05180820382811161142257905090508152505b565b6000543318156111275760186040527f6d73672e73656e646572206e6f7420726563697069656e74000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b600554638da5cb5b604052602060406004605c6000855af1611150573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b60055463481c6a75604052602060406004605c6000855af1611197573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b6111c160a0611129565b60a05133186111d15760016111e2565b6111db60c0611170565b60c0513318155b61124557601f60e0527f6d73672e73656e646572206e6f74206f776e6572206f72206d616e61676572006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b61125160a0611129565b60a0513318156112b857601460c0527f6d73672e73656e646572206e6f74206f776e657200000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b600060c05260c050602061010060c05160e06060516040515af16112e3573d600060003e3d6000fd5b3d602081183d602010021860e05260e080518060805260208201805160a0525050506080511561137b5760a05160805160200360031b1c61137b57601360c0527f455448207472616e73666572206661696c65640000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b6005546336e44612604052602060406004605c6000855af16113a4573d600060003e3d6000fd5b60203d10611422576040518060a01c61142257608052608090505161142057601660a0527f766f74696e672061646170746572206e6f74207365740000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b565b600080fda165767970657283000307000b005b600080fd
Deployed Bytecode
0x6003361161000c57610f94565b60003560e01c3461142257633d4da16d81186101fa576101043610611422576004358060a01c611422576040526044358060a01c6114225760605260c4358060011c6114225760805260e4358060a01c6114225760a052600a54156100c857601860c0527f63616e206f6e6c7920696e697469616c697a65206f6e6365000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001600a5560405160015560805160075560643560025560843560035560a4356004556024356040516370a0823160c0523060e052602060c0602460dc845afa610117573d600060003e3d6000fd5b60203d106114225760c0905051101561018d576014610100527f696e73756666696369656e742062616c616e63650000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b60243560065560605160005560843560095560a05160055560405160605160a0517f2d30caaf2a01e6264cf4671ca427c07d01ad37075b1830726c7004e291faf89660243560c05260643560e05260406084610100376080516101405260a060c0a4600160c052602060c0f35b63669416b8811861021f576004361061142257602061021a610100611035565b610100f35b63cf3090128118610242576004361061142257602061023e60e0611085565b60e0f35b634e71d92d811861028457600436106114225733610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b631e83409a81186102d05760243610611422576004358060a01c61142257610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b63aad3ec9681186104525760443610611422576004358060a01c6114225761010052602435610120525b6103026110c0565b61030d610160611035565b6101605161012051808281188284100218905090506101405260085461014051808201828110611422579050905060085560015463a9059cbb610160526101005161018052610140516101a0526020610160604461017c6000855af1610378573d600060003e3d6000fd5b3d61038f57803b156114225760016101c0526103a8565b60203d1061142257610160518060011c611422576101c0525b6101c090505161041857600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b610100517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d461014051610160526020610160a26020610140f35b63c31ab974811861060957600436106114225761046d6111b7565b610478610140611085565b6101405161012052610120516104ee576011610140527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b4260095560015463a9059cbb61016052610509610140611129565b6101405161018052610120516101a0526020610160604461017c6000855af1610537573d600060003e3d6000fd5b3d61054e57803b156114225760016101c052610567565b60203d1061142257610160518060011c611422576101c0525b6101c09050516105d757600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b337ff23abb1803813c60f11b7ce4b5ae745d16ce0d99b71cf034c699d6634d0a961361012051610140526020610140a2005b637bdbb5f781186108b5576004361061142257610624611247565b60075461068e576020610100527f6e6f7420616c6c6f77656420666f72206f7264696e6172792076657374696e676101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b600b54156106f9576015610100527f616c72656164792066756c6c79207265766f6b656400000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b610704610120611085565b61012051610713610140611035565b6101405180820182811061142257905090506101005261010051610795576011610120527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b6001600b554260095560015463a9059cbb610140526107b5610120611129565b610120516101605261010051610180526020610140604461015c6000855af16107e3573d600060003e3d6000fd5b3d6107fa57803b156114225760016101a052610813565b60203d1061142257610140518060011c611422576101a0525b6101a090505161088357600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b337fc1f0f68ce9eb64d4ec0574f3a5ab1a8534d4e6bdc64804f6efefacd72303dd5161010051610120526020610120a2005b6323a50d3c8118610a9b5760443610611422576004358060a01c611422576101005260243561012052600154610100511861097e57610100516370a082316101605230610180526020610160602461017c845afa610918573d600060003e3d6000fd5b60203d10611422576101609050516109316101a0611085565b6101a0516109406101c0611035565b6101c0518082018281106114225790509050808203828111611422579050905061014052610120516101405180828118828410021890509050610120525b6101205115610a99576101005163a9059cbb610140526000546101605261012051610180526020610140604461015c6000855af16109c1573d600060003e3d6000fd5b3d6109d857803b156114225760016101a0526109f1565b60203d1061142257610140518060011c611422576101a0525b6101a0905051610a6157600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b7f505b28e6941631badc363841ecbf8e1214b9379c643936458e87be718e157999610100516101405261012051610160526040610140a15b005b63644613468118610b0357600436106114225747610120526101205115610b015760005460405261012051606052610ad16112ba565b7f0296f2c4dbc8c0e53c0ffab63f84aeebd5c28aa143475a37346bf15ac003f32761012051610140526020610140a15b005b63412f31218118610c0c5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610b416110c0565b610b4961137d565b63412f312161056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610bdb573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610c0a573d600060003e3d6000fd5b005b63862e69708118610d155760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610c4a6110c0565b610c5261137d565b63862e697061056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ce4573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610d13573d600060003e3d6000fd5b005b630ccfac9e8118610e1e5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610d536110c0565b610d5b61137d565b630ccfac9e61056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ded573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610e1c573d600060003e3d6000fd5b005b6366d003ac8118610e3d57600436106114225760005460405260206040f35b63fc0c546a8118610e5c57600436106114225760015460405260206040f35b63834ee4178118610e7b57600436106114225760025460405260206040f35b63162433568118610e9a57600436106114225760035460405260206040f35b6394abf7608118610eb957600436106114225760045460405260206040f35b63c45a01558118610ed857600436106114225760055460405260206040f35b633c48a6208118610ef757600436106114225760065460405260206040f35b632cbd43d38118610f1657600436106114225760075460405260206040f35b636af904c68118610f3557600436106114225760085460405260206040f35b63ac1a2f698118610f5457600436106114225760095460405260206040f35b63158ef93e8118610f73576004361061142257600a5460405260206040f35b636d01f0028118610f92576004361061142257600b5460405260206040f35b505b60006000fd5b60025460605260035460805260065460a05260605160045480820182811061142257905090506040511015610fd3576000815250611033565b60a0516040516060518082038281116114225790509050808202811583838304141715611422579050905060805160605180820382811161142257905090508015611422578082049050905060a051808281188284100218905090508152505b565b600b5415611047576000815250611083565b426009548082811882841002189050905060c05260c05160405261106b60e0610f9a565b60e05160085480820382811161142257905090508152505b565b60095442106110985760008152506110be565b600654426040526110a960c0610f9a565b60c05180820382811161142257905090508152505b565b6000543318156111275760186040527f6d73672e73656e646572206e6f7420726563697069656e74000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b600554638da5cb5b604052602060406004605c6000855af1611150573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b60055463481c6a75604052602060406004605c6000855af1611197573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b6111c160a0611129565b60a05133186111d15760016111e2565b6111db60c0611170565b60c0513318155b61124557601f60e0527f6d73672e73656e646572206e6f74206f776e6572206f72206d616e61676572006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b61125160a0611129565b60a0513318156112b857601460c0527f6d73672e73656e646572206e6f74206f776e657200000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b600060c05260c050602061010060c05160e06060516040515af16112e3573d600060003e3d6000fd5b3d602081183d602010021860e05260e080518060805260208201805160a0525050506080511561137b5760a05160805160200360031b1c61137b57601360c0527f455448207472616e73666572206661696c65640000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b6005546336e44612604052602060406004605c6000855af16113a4573d600060003e3d6000fd5b60203d10611422576040518060a01c61142257608052608090505161142057601660a0527f766f74696e672061646170746572206e6f74207365740000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b565b600080fda165767970657283000307000b
Loading...
Loading
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.