Overview
FTM Balance
0 FTM
FTM Value
$0.00More Info
Private Name Tags
ContractCreator:
Sponsored
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60206108 | 22042482 | 865 days ago | IN | Create: Vyper_contract | 0 FTM | 0.05989586 |
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
22042482 | 865 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.0
Contract Source Code (Vyper language format)
# @version 0.3.0 """ @title cToken Burner @notice Converts cToken lending coins to USDT """ from vyper.interfaces import ERC20 interface LendingPool: def withdraw(_underlying_asset: address, _amount: uint256, _receiver: address): nonpayable interface cERC20: def redeem(redeemTokens: uint256) -> uint256: nonpayable def underlying() -> address: view interface RegistrySwap: def exchange_with_best_rate( _from: address, _to: address, _amount: uint256, _expected: uint256, _receiver: address, ) -> uint256: payable interface AddressProvider: def get_address(_id: uint256) -> address: view receiver: public(address) is_killed: public(bool) owner: public(address) future_owner: public(address) is_approved: HashMap[address, HashMap[address, bool]] ADDRESS_PROVIDER: constant(address) = 0x0000000022D53366457F9d5E68Ec105046FC4383 USDT: constant(address) = 0x049d68029688eAbF473097a2fC38ef61633A3C7A @external def __init__(_receiver: address, _owner: address): """ @notice Contract constructor @param _receiver Address that converted tokens are transferred to. Should be set to the `ChildBurner` deployment. @param _owner Owner address. Can kill the contract and recover tokens. """ self.receiver = _receiver self.owner = _owner @external def burn(_coin: address) -> bool: """ @notice Unwrap `_coin` and transfer to the underlying burner @param _coin Address of the coin being unwrapped @return bool success """ assert not self.is_killed # dev: is killed # transfer coins from caller amount: uint256 = ERC20(_coin).balanceOf(msg.sender) if amount != 0: ERC20(_coin).transferFrom(msg.sender, self, amount) # get actual balance in case of transfer fee or pre-existing balance amount = ERC20(_coin).balanceOf(self) # unwrap cTokens for underlying asset assert cERC20(_coin).redeem(amount) == 0 underlying: address = cERC20(_coin).underlying() amount = ERC20(underlying).balanceOf(self) if underlying == USDT: response: Bytes[32] = raw_call( underlying, _abi_encode(self.receiver, amount, method_id=method_id("transfer(address,uint256)")), max_outsize=32, ) if len(response) != 0: assert convert(response, bool) else: registry_swap: address = AddressProvider(ADDRESS_PROVIDER).get_address(2) if not self.is_approved[registry_swap][underlying]: response: Bytes[32] = raw_call( underlying, _abi_encode(registry_swap, MAX_UINT256, method_id=method_id("approve(address,uint256)")), max_outsize=32, ) if len(response) != 0: assert convert(response, bool) self.is_approved[registry_swap][underlying] = True RegistrySwap(registry_swap).exchange_with_best_rate(underlying, USDT, amount, 0, self.receiver) # transfer underlying to underlying burner response: Bytes[32] = raw_call( underlying, concat( method_id("transfer(address,uint256)"), convert(self.receiver, bytes32), convert(amount, bytes32), ), max_outsize=32, ) if len(response) != 0: assert convert(response, bool) return True @external def recover_balance(_coin: address) -> bool: """ @notice Recover ERC20 tokens from this contract @param _coin Token address @return bool success """ assert msg.sender == self.owner # dev: only owner amount: uint256 = ERC20(_coin).balanceOf(self) response: Bytes[32] = raw_call( _coin, _abi_encode(msg.sender, amount, method_id=method_id("transfer(address,uint256)")), max_outsize=32, ) if len(response) != 0: assert convert(response, bool) return True @external def set_receiver(_receiver: address): assert msg.sender == self.owner self.receiver = _receiver @external def set_killed(_is_killed: bool) -> bool: """ @notice Set killed status for this contract @dev When killed, the `burn` function cannot be called @param _is_killed Killed status @return bool success """ assert msg.sender == self.owner # dev: only owner self.is_killed = _is_killed return True @external def commit_transfer_ownership(_future_owner: address) -> bool: """ @notice Commit a transfer of ownership @dev Must be accepted by the new owner via `accept_transfer_ownership` @param _future_owner New owner address @return bool success """ assert msg.sender == self.owner # dev: only owner self.future_owner = _future_owner return True @external def accept_transfer_ownership() -> bool: """ @notice Accept a transfer of ownership @return bool success """ assert msg.sender == self.future_owner # dev: only owner self.owner = msg.sender return True
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_receiver","type":"address"},{"name":"_owner","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"burn","inputs":[{"name":"_coin","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":81377},{"stateMutability":"nonpayable","type":"function","name":"recover_balance","inputs":[{"name":"_coin","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":12531},{"stateMutability":"nonpayable","type":"function","name":"set_receiver","inputs":[{"name":"_receiver","type":"address"}],"outputs":[],"gas":37702},{"stateMutability":"nonpayable","type":"function","name":"set_killed","inputs":[{"name":"_is_killed","type":"bool"}],"outputs":[{"name":"","type":"bool"}],"gas":37875},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"_future_owner","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":37905},{"stateMutability":"nonpayable","type":"function","name":"accept_transfer_ownership","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":37774},{"stateMutability":"view","type":"function","name":"receiver","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2706},{"stateMutability":"view","type":"function","name":"is_killed","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":2736},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2766},{"stateMutability":"view","type":"function","name":"future_owner","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2796}]
Contract Creation Code
602061087960c03960c0518060a01c6108745780905061014052602060206108790160c03960c0518060a01c6108745780905061016052610140516000556101605160025561085c56600436101561000d57610808565b60046000601c376000513461080e576389afcb4481141561059d576004358060a01c61080e578090506101405260015461080e576370a0823161018052336101a0526020610180602461019c610140515afa1561080e57601f3d111561080e57610180516101605260006101605118156100c1576323b872dd61018052336101a052306101c052610160516101e0526020610180606461019c6000610140515af11561080e57601f3d111561080e57610180505b6370a0823161018052306101a0526020610180602461019c610140515afa1561080e57601f3d111561080e57610180516101605263db006a7561018052610160516101a0526020610180602461019c6000610140515af11561080e57601f3d111561080e576101805161080e57636f307dc36101a05260206101a060046101bc610140515afa1561080e57601f3d111561080e576101a0518060a01c61080e57809050610180526370a082316101a052306101c05260206101a060246101bc610180515afa1561080e57601f3d111561080e576101a0516101605273049d68029688eabf473097a2fc38ef61633a3c7a61018051141561028a5763a9059cbb6101e45260046000546102045261016051610224526040016101e0526101e08051602001806102608284600060045af11561080e5750506020610300610260516102806000610180515af11561080e5760203d808211156102215780610223565b815b905090506102e0526102e08051602001806101a08284600060045af11561080e57505060006101a0511815610285576101a0806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b61046c565b63493f4f746101c05260026101e05260206101c060246101dc6f22d53366457f9d5e68ec105046fc43835afa1561080e57601f3d111561080e576101c0518060a01c61080e578090506101a05260046101a05160e05260c052604060c0206101805160e05260c052604060c020546104085763095ea7b36102045260046101a051610224527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61024452604001610200526102008051602001806102808284600060045af11561080e5750506020610320610280516102a06000610180515af11561080e5760203d808211156103805780610382565b815b90509050610300526103008051602001806101c08284600060045af11561080e57505060006101c05118156103e4576101c0806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b600160046101a05160e05260c052604060c0206101805160e05260c052604060c020555b639f69a6a66101c052610180516101e05273049d68029688eabf473097a2fc38ef61633a3c7a6102005261016051610220526000610240526000546102605260206101c060a46101dc60006101a0515af11561080e57601f3d111561080e576101c0505b600060046101e0527fa9059cbb00000000000000000000000000000000000000000000000000000000610200526101e060048060208461022001018260208501600060045af150508051820191505060005460208261022001015260208101905061016051602082610220010152602081019050806102205261022090508051602001806102a08284600060045af11561080e57505060206103406102a0516102c06000610180515af11561080e5760203d8082111561052c578061052e565b815b90509050610320526103208051602001806101a08284600060045af11561080e57505060006101a0511815610590576101a0806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b60016101e05260206101e0f35b63db2f5f798114156106ce576004358060a01c61080e578090506101405260025433141561080e576370a0823161018052306101a0526020610180602461019c610140515afa1561080e57601f3d111561080e57610180516101605263a9059cbb6101c4526004336101e45261016051610204526040016101c0526101c08051602001806102408284600060045af11561080e57505060206102e0610240516102606000610140515af11561080e5760203d8082111561065d578061065f565b815b905090506102c0526102c08051602001806101808284600060045af11561080e57505060006101805118156106c157610180806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b60016101c05260206101c0f35b63d1dd6f568114156106ff576004358060a01c61080e578090506101405260025433141561080e5761014051600055005b6390b2299781141561073b576004358060011c61080e578090506101405260025433141561080e57610140516001556001610160526020610160f35b636b441a40811415610777576004358060a01c61080e578090506101405260025433141561080e57610140516003556001610160526020610160f35b63e5ea47b881141561079e5760035433141561080e57336002556001610140526020610140f35b63f7260d3e8114156107b857600054610140526020610140f35b639c868ac08114156107d257600154610140526020610140f35b638da5cb5b8114156107ec57600254610140526020610140f35b631ec0cdc181141561080657600354610140526020610140f35b505b60006000fd5b600080fd5b61004961085c0361004960003961004961085c036000f35b600080fd000000000000000000000000ffbacce0cc7c19d46132f1258fc16cf6871d153c0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a
Deployed Bytecode
0x600436101561000d57610808565b60046000601c376000513461080e576389afcb4481141561059d576004358060a01c61080e578090506101405260015461080e576370a0823161018052336101a0526020610180602461019c610140515afa1561080e57601f3d111561080e57610180516101605260006101605118156100c1576323b872dd61018052336101a052306101c052610160516101e0526020610180606461019c6000610140515af11561080e57601f3d111561080e57610180505b6370a0823161018052306101a0526020610180602461019c610140515afa1561080e57601f3d111561080e57610180516101605263db006a7561018052610160516101a0526020610180602461019c6000610140515af11561080e57601f3d111561080e576101805161080e57636f307dc36101a05260206101a060046101bc610140515afa1561080e57601f3d111561080e576101a0518060a01c61080e57809050610180526370a082316101a052306101c05260206101a060246101bc610180515afa1561080e57601f3d111561080e576101a0516101605273049d68029688eabf473097a2fc38ef61633a3c7a61018051141561028a5763a9059cbb6101e45260046000546102045261016051610224526040016101e0526101e08051602001806102608284600060045af11561080e5750506020610300610260516102806000610180515af11561080e5760203d808211156102215780610223565b815b905090506102e0526102e08051602001806101a08284600060045af11561080e57505060006101a0511815610285576101a0806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b61046c565b63493f4f746101c05260026101e05260206101c060246101dc6f22d53366457f9d5e68ec105046fc43835afa1561080e57601f3d111561080e576101c0518060a01c61080e578090506101a05260046101a05160e05260c052604060c0206101805160e05260c052604060c020546104085763095ea7b36102045260046101a051610224527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61024452604001610200526102008051602001806102808284600060045af11561080e5750506020610320610280516102a06000610180515af11561080e5760203d808211156103805780610382565b815b90509050610300526103008051602001806101c08284600060045af11561080e57505060006101c05118156103e4576101c0806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b600160046101a05160e05260c052604060c0206101805160e05260c052604060c020555b639f69a6a66101c052610180516101e05273049d68029688eabf473097a2fc38ef61633a3c7a6102005261016051610220526000610240526000546102605260206101c060a46101dc60006101a0515af11561080e57601f3d111561080e576101c0505b600060046101e0527fa9059cbb00000000000000000000000000000000000000000000000000000000610200526101e060048060208461022001018260208501600060045af150508051820191505060005460208261022001015260208101905061016051602082610220010152602081019050806102205261022090508051602001806102a08284600060045af11561080e57505060206103406102a0516102c06000610180515af11561080e5760203d8082111561052c578061052e565b815b90509050610320526103208051602001806101a08284600060045af11561080e57505060006101a0511815610590576101a0806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b60016101e05260206101e0f35b63db2f5f798114156106ce576004358060a01c61080e578090506101405260025433141561080e576370a0823161018052306101a0526020610180602461019c610140515afa1561080e57601f3d111561080e57610180516101605263a9059cbb6101c4526004336101e45261016051610204526040016101c0526101c08051602001806102408284600060045af11561080e57505060206102e0610240516102606000610140515af11561080e5760203d8082111561065d578061065f565b815b905090506102c0526102c08051602001806101808284600060045af11561080e57505060006101805118156106c157610180806020015160008251806020901361080e578091901261080e57806020036101000a82049050905090501561080e575b60016101c05260206101c0f35b63d1dd6f568114156106ff576004358060a01c61080e578090506101405260025433141561080e5761014051600055005b6390b2299781141561073b576004358060011c61080e578090506101405260025433141561080e57610140516001556001610160526020610160f35b636b441a40811415610777576004358060a01c61080e578090506101405260025433141561080e57610140516003556001610160526020610160f35b63e5ea47b881141561079e5760035433141561080e57336002556001610140526020610140f35b63f7260d3e8114156107b857600054610140526020610140f35b639c868ac08114156107d257600154610140526020610140f35b638da5cb5b8114156107ec57600254610140526020610140f35b631ec0cdc181141561080657600354610140526020610140f35b505b60006000fd5b600080fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ffbacce0cc7c19d46132f1258fc16cf6871d153c0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a
-----Decoded View---------------
Arg [0] : _receiver (address): 0xffbACcE0CC7C19d46132f1258FC16CF6871D153c
Arg [1] : _owner (address): 0x7EeAC6CDdbd1D0B8aF061742D41877D7F707289a
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ffbacce0cc7c19d46132f1258fc16cf6871d153c
Arg [1] : 0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a
Loading...
Loading
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.