Address Contract Partially Verified
Address
0x88778F0Afb23A8c970d170ecEf7cc54e23918472
Balance
0 ETH
Nonce
1
Code Size
4935 bytes
Creator
0x4da1Ca01...6100 at tx 0xfa2b6bd0...7061c2
Indexed Transactions
0
Contract Bytecode
4935 bytes
0x5f3560e01c6002601b820660011b6112f101601e395f51565b6361d027b3811861003657346112ed57602061132760403960206040f35b63d34aec238118611209576044361034176112ed576024358060011c6112ed576060525f5433186112ed5760065460405261007160a061120d565b60a0516080526004351561008c57608051600435111561008e565b5f5b156112ed5760076004358060081c90506020525f5260405f205460a052600160043560ff811690501b60c0526060516100d15760c0511960a0511660a0526100dc565b60c05160a0511760a0525b60a05160076004358060081c90506020525f5260405f20556004357f5cc7a340f7950e5da236ab12977fda19fa1b4947411992be42df339da25770b760605160e052602060e0a200611209565b6388a8d602811861014457346112ed575f5460405260206040f35b6320d763818118611209576024361034176112ed576004358060a01c6112ed576040527311111111111111111111111111111111111111116040511461019a5760056040516020525f5260405f2054151561019c565b5f5b60605260206060f3611209565b63770817ec811861120957346112ed5760015460405260206040f3611209565b63570ca735811861120957346112ed5760025460405260206040f3611209565b63a411a59d811861020557346112ed5760035460405260206040f35b6386f890558118611209576044361034176112ed576004358060a01c6112ed576040526024358060a01c6112ed576060525f5433186112ed57604051156112ed5760056040516020525f5260405f20546112ed5760056060516020525f5260405f2054608052608051156112ed5760045460a052603f60a051116112ed5760a051600181018181106112ed57905060045560405160056060516020525f5260405f205560805160056040516020525f5260405f20556040517f35048ea94bd1fdcfae4ba1111bc30a3f804061808deba1783b46c3926635f52860605160c052602060c0a200611209565b6366c7ffd6811861030b57346112ed5760045460405260206040f35b6378860fea81186103f1576044361034176112ed576004358060a01c6112ed576040526024358060a01c6112ed576060525f5433186112ed57731111111111111111111111111111111111111111604051146112ed5760056040516020525f5260405f2054608052608051156112ed5760405160056060516020525f5260405f2054186112ed57600454600181038181116112ed57905060045560805160056060516020525f5260405f20555f60056040516020525f5260405f20556040517f0a6e596c177d9b5e39257453142334cb9ec82513528306cef2fed81de46278055f60a0a2005b6330c7be728118611209576024361034176112ed576004358060a01c6112ed576040525f5433186112ed576040516002556040517fdbebfba65bd6398fb722063efc10c99f624f9cd8ba657201056af918a676d5ee5f6060a200611209565b63504007a2811861048b576024361034176112ed576004358060a01c6112ed5760405260056040516020525f5260405f205460605260206060f35b63e5b5b4208118611209576044361034176112ed576004358060a01c6112ed57610120526024358060a01c6112ed57610140526005336020525f5260405f2054156104d75760016104de565b6002543318155b156112ed57604061012060605e6104f661018061125f565b61018051610160526101605161061c576040366101803760065460405261051e6101c061120d565b6101c080516101805260208101516101a052506101a051156112ed576101805160405261054c6101c0611236565b6101c051156112ed576101a05163545e7c616101c05260406101206101e05e60206101c060446101dc5f855af1610585573d5f5f3e3d5ffd5b60203d106112ed576101c0518060a01c6112ed57610220526102209050516101605261018051604052610160516060526105c06101c06112c9565b6101c0516008610120516020525f5260405f2080610140516020525f5260405f2090505561014051610120517feba46d78c72b4ca800dec608477ba2bff7d96b590d7c61df4f3ada072a306334610160516101c05260206101c0a35b6020610160f3611209565b635f82a933811861120957346112ed5760065460405260206040f3611209565b63cd852cdf8118611209576024361034176112ed5760076004356020525f5260405f205460405260206040f3611209565b637c9d7cd48118611209576044361034176112ed576004358060a01c6112ed576040526024358060a01c6112ed5760605260086040516020525f5260405f20806060516020525f5260405f2090505460805260206080f3611209565b6337ea2b9181186107c957346112ed575f604052731111111111111111111111111111111111111111610860525f6040905b80610880526005610860516020525f5260405f20546108605273111111111111111111111111111111111111111161086051186107425761076c565b604051603f81116112ed57610860518160051b606001526001810160405250600101818118610706575b50506020806108805280610880015f6040518083528060051b5f82604081116112ed5780156107b457905b8060051b606001518160051b602088010152600101818118610797575b50508201602001915050905081019050610880f35b634b41a5018118611209576064361034176112ed576004358060a01c6112ed576080526024358060a01c6112ed5760a0526044358060a01c6112ed5760c0525f5433186112ed575f60405260c05160605261082460e06112c9565b60e05160086080516020525f5260405f208060a0516020525f5260405f2090505560a0516080517f304562ece6c846eb82a8b84b5370f7f035e32bd2c10433989984bcf15513f41f60c05160e052602060e0a300611209565b63d936547e8118610967576024361034176112ed576004358060a01c6112ed576040527311111111111111111111111111111111111111116060525f6040905b8060805260056060516020525f5260405f2054606052731111111111111111111111111111111111111111606051186108f55761095a565b60605163d936547e60a05260405160c052602060a0602460bc845afa61091d573d5f5f3e3d5ffd5b60203d106112ed5760a0518060011c6112ed5760e05260e09050511561094f5750506001610100526020610100610965565b6001018181186108bd575b50505f608052602060805bf35b6301681a6281186109a5576024361034176112ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606052610ab5565b63e2a7515e81186112095760e4361034176112ed576004358060a01c6112ed576040526024358060a01c6112ed5760605260843560040160018135116112ed57803560208160051b0180836080375050505f60c052602060c0f3611209565b63c45a0155811861120957346112ed57604036606037600654604052610a2a60a061120d565b60a080516060526020810151608052505f60a05260805115610a5d57606051604052610a5660c0611236565b60c05160a0525b6060606060c05e606060c0f3611209565b63aea5058e8118610a99576024361034176112ed576020600435604052610a956060611236565b6060f35b636ea056a98118610ba9576044361034176112ed576024356060525b6004358060a01c6112ed576040525f5433186112ed5760605160805260605119610b10576040516370a0823160a0523060c052602060a0602460bc845afa610aff573d5f5f3e3d5ffd5b60203d106112ed5760a09050516080525b60405163a9059cbb60a0525f5460c05260805160e052602060a0604460bc5f855af1610b3e573d5f5f3e3d5ffd5b3d610b5557803b156112ed57600161010052610b6d565b60203d106112ed5760a0518060011c6112ed57610100525b610100905051156112ed576040517fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c7760805160a052602060a0a2005b63085e2c5b81186112095760a4361034176112ed576004358060a01c6112ed576040526024358060a01c6112ed5760605260405f6080528060a052806080015f5f610120526001610100525f610100518084528060051b5f82600181116112ed578015610c3057905b8060051b61012001518160051b602089010152600101818118610c12575b5050820160200191505090509050810190506080f3611209565b6352d112388118610c88576024361034176112ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606052610cf0565b63759be10c811861120957346112ed5760015433186112ed575f600155335f55337fafe23f9e1f603b288748a507d5a993957e9f14313a5889d5a070851299939d595f6040a200611209565b63f2d5d56b8118611209576044361034176112ed576024356060525b6004358060a01c6112ed5760405260025433186112ed57604051156112ed57606051156112ed577311111111111111111111111111111111111111116080525f6040905b8060a05260056080516020525f5260405f205460805273111111111111111111111111111111111111111160805118610d6c57610f36565b6080516393d5188f60c052602060c0600460dc5f855af1610d8f573d5f5f3e3d5ffd5b60203d106112ed5760c0518060011c6112ed576101005261010090505115610db657610f2b565b60035460c05260c0516367c6e39c60e052604051610100525f61012052803b156112ed575f60e0604460fc5f855af1610df1573d5f5f3e3d5ffd5b5060605160e05260605119610e3e576040516370a082316101005260c051610120526020610100602461011c845afa610e2c573d5f5f3e3d5ffd5b60203d106112ed5761010090505160e0525b6040516323b872dd6101005260c051610120526080516101405260e051610160526020610100606461011c5f855af1610e79573d5f5f3e3d5ffd5b3d610e9057803b156112ed57600161018052610ea9565b60203d106112ed57610100518060011c6112ed57610180525b610180905051156112ed576080516367c6e39c610100526040516101205260e05161014052803b156112ed575f610100604461011c5f855af1610eee573d5f5f3e3d5ffd5b506040517fe1a5602e30931761352458316383b4fb6cb0f5ebe0b746c614d3e4836c4ccef560e051610100526020610100a2505060206080610f94565b600101818118610d34575b5050601360a0527f6e6f206275636b657420617661696c61626c650000000000000000000000000060c05260a05060a0518060c001601f825f031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5bf3611209565b6341bda9cc8118611209576044361034176112ed576004358060a01c6112ed57610120526024358060a01c6112ed57610140526020604061012060605e610fe261016061125f565b610160f3611209565b6369f2e4928118611209576064361034176112ed576004358060a01c6112ed576040526024358060a01c6112ed576060526044358060a01c6112ed576080525f5433186112ed57731111111111111111111111111111111111111111604051146112ed5760056040516020525f5260405f205460a05260a051156112ed57606051156112ed5760056060516020525f5260405f20546112ed5760405160056080516020525f5260405f2054186112ed5760605160056080516020525f5260405f20555f60056040516020525f5260405f205560a05160056060516020525f5260405f20556060516040517f21462a07a732e567350042c254c89c29419e62fc59951aa1a6aa37411e6468335f60c0a300611209565b63ee2af3fb8118611209576024361034176112ed576004358060a01c6112ed576080525f5433186112ed5760065460405261113b60c061120d565b60c05160a0526080511561115d5760a051600181018181106112ed57905060a0525b60a05160405260805160605261117360c06112c9565b60c0516006556080517f8d95e6b7f3e91dac5f4c8e6bd2ec031e14cb5c8699d0740a9bca228c989124ff60a05160c052602060c0a200611209565b63fd066ecc8118611209576024361034176112ed576004358060a01c6112ed576040525f5433186112ed576040516001556040517fe7b5cc087e6e47e33e86bdfe4720b7e849891938b18ff6e0c3f92299de79e60c5f6060a2005b5f5ffd5b6bffffffffffffffffffffffff60405116815260405160601c8060a01c6112ed57602082015250565b600160405160ff811690501b60076040518060081c90506020525f5260405f2054161515815250565b60403660a03760086060516020525f5260405f20806080516020525f5260405f2090505460405261129060e061120d565b60e0805160a052602081015160c0525060a0516040526112b060e0611236565b60e0516112c0575f8152506112c7565b60c0518152505b565b6bffffffffffffffffffffffff604051116112ed5760605160601b60405117815250565b5f80fd0f9a012902ef06d406270678120900180c4a11000cd401e91209087d12090a0404501209120901c9120911ae0feb06470a6e120901a9000000000000000000000000ef77cc176c748d291efb6cdc982c5744fc7211c8
Verified Source Code Partial Match
Compiler: v0.3.10+commit.91361694
RoboTreasury.vy 468 lines
# pragma version 0.3.10
# pragma optimize gas
# pragma evm-version cancun
"""
@title RoboTreasury
@author Yearn Finance
@license GNU AGPLv3
@notice
The main entrypoint for the RoboTreasury system. This contract's responsibility
is to pull funds from the ingress and deposit them into buckets. The buckets are
sorted by priority, and are filled in order until their floor is reached.
Since buckets are allowed to convert the incoming assets to their liking,
this contract maintains a list of canocnical conversion contracts. These are
deployed by a factory but can be overwritten by management to allow for more
efficient implementations for specific pairs.
"""
from vyper.interfaces import ERC20
interface Ingress:
def convert(_token: address, _dummy: uint256): nonpayable
interface Bucket:
def whitelisted(_token: address) -> bool: view
def above_floor() -> bool: nonpayable
def convert(_token: address, _amount: uint256): nonpayable
interface Factory:
def deploy(_from: address, _to: address) -> address: nonpayable
interface Robo:
def is_bucket(_bucket: address) -> bool: view
def deploy_converter(_from: address, _to: address) -> address: nonpayable
interface OneSplit:
def getExpectedReturn(
_a: address, _b: address, _c: uint256, _d: uint256, _e: uint256
) -> (uint256, DynArray[uint256, 1]): view
def swap(
_a: address, _b: address, _c: uint256, _d: uint256, _e: DynArray[uint256 ,1], _f: uint256
) -> uint256: nonpayable
treasury: public(immutable(address))
management: public(address)
pending_management: public(address)
operator: public(address)
ingress: public(Ingress)
num_buckets: public(uint256)
linked_buckets: public(HashMap[address, address])
packed_factory: public(uint256) # version | factory
packed_factory_versions: public(HashMap[uint256, uint256])
packed_converters: public(HashMap[address, HashMap[address, uint256]]) # from => to => (version | converter)
event Pull:
_token: indexed(address)
_amount: uint256
event SetOperator:
operator: indexed(address)
event DeployConverter:
_from: indexed(address)
_to: indexed(address)
_converter: address
event Sweep:
_token: indexed(address)
_amount: uint256
event AddBucket:
_bucket: indexed(address)
_after: address
event RemoveBucket:
_bucket: indexed(address)
event ReplaceBucket:
_old: indexed(address)
_new: indexed(address)
event SetConverter:
_from: indexed(address)
_to: indexed(address)
_converter: address
event SetFactory:
_factory: indexed(address)
_version: uint256
event SetFactoryVersionEnabled:
_version: indexed(uint256)
_enabled: bool
event PendingManagement:
management: indexed(address)
event SetManagement:
management: indexed(address)
MAX_NUM_BUCKETS: constant(uint256) = 64
MASK: constant(uint256) = (1 << 96) - 1
SENTINEL: constant(address) = 0x1111111111111111111111111111111111111111
implements: Robo
implements: OneSplit
@external
def __init__(_treasury: address, _ingress: address):
"""
@notice Constructor
@param _treasury Treasury contract, ultimate destination of all assets
@param _ingress Ingress contract, where assets get pulled from
"""
treasury = _treasury
self.management = msg.sender
self.operator = msg.sender
self.ingress = Ingress(_ingress)
self.linked_buckets[SENTINEL] = SENTINEL
self.packed_factory_versions[0] = 1
@external
@view
def is_bucket(_bucket: address) -> bool:
"""
@notice Query whether the address is a valid bucket
@param _bucket Bucket address
@return True: address is a valid bucket, False: address is not a valid bucket
"""
return _bucket != SENTINEL and self.linked_buckets[_bucket] != empty(address)
@external
@view
def buckets() -> DynArray[address, MAX_NUM_BUCKETS]:
"""
@notice Query list of configured buckets
@return Array of buckets
"""
buckets: DynArray[address, MAX_NUM_BUCKETS] = []
bucket: address = SENTINEL
for _ in range(MAX_NUM_BUCKETS):
bucket = self.linked_buckets[bucket]
if bucket == SENTINEL:
break
buckets.append(bucket)
return buckets
@external
@view
def whitelisted(_token: address) -> bool:
"""
@notice Query whether a token is whitelisted in any of the buckets
@param _token Token address
@return True: token is whitelisted in a bucket, False: token is not whitelisted
in a bucket
"""
bucket: address = SENTINEL
for _ in range(MAX_NUM_BUCKETS):
bucket = self.linked_buckets[bucket]
if bucket == SENTINEL:
break
if Bucket(bucket).whitelisted(_token):
return True
return False
@external
@view
def factory() -> (uint256, address, bool):
"""
@notice Query current factory details
@return Tuple with factory version, factory address and a flag representing
the enable status of this factory version
"""
version: uint256 = 0
factory: address = empty(address)
(version, factory) = self._unpack(self.packed_factory)
enabled: bool = False
if factory != empty(address):
enabled = self._enabled(version)
return (version, factory, enabled)
@external
@view
def factory_version_enabled(_version: uint256) -> bool:
"""
@notice Query whether a specific factory version is enabled
@param _version Factory version
@return True: factory version enabled, False: factory version disabled
"""
return self._enabled(_version)
@external
def pull(_token: address, _amount: uint256 = max_value(uint256)) -> address:
"""
@notice Pull a token from the ingress into a bucket
@param _token Token to pull
@param _amount Amount of token to pull. Defaults to current ingress balance
@return The bucket the funds were sent to
@dev Can only be called by the operator
"""
assert msg.sender == self.operator
assert _token != empty(address)
assert _amount > 0
bucket: address = SENTINEL
for _ in range(MAX_NUM_BUCKETS):
bucket = self.linked_buckets[bucket]
if bucket == SENTINEL:
break
if Bucket(bucket).above_floor():
continue
# obtain an allowance to transfer from the ingress
ingress: Ingress = self.ingress
ingress.convert(_token, 0)
amount: uint256 = _amount
if _amount == max_value(uint256):
amount = ERC20(_token).balanceOf(ingress.address)
# handle conversion inside bucket
assert ERC20(_token).transferFrom(ingress.address, bucket, amount, default_return_value=True)
Bucket(bucket).convert(_token, amount)
log Pull(_token, amount)
return bucket
raise "no bucket available"
@external
@view
def converter(_from: address, _to: address) -> address:
"""
@notice Query converter contract for a pair, if any is known
@param _from The token to convert from
@param _to The token to convert to
@return The converter contract, if any
"""
return self._converter(_from, _to)
@external
def deploy_converter(_from: address, _to: address) -> address:
"""
@notice Deploy a converter for a pair, if none is known
@param _from The token to convert from
@param _to The token to convert to
@return The converter contract
@dev Can only be called by an existing bucket or the operator
"""
assert self.linked_buckets[msg.sender] != empty(address) or msg.sender == self.operator
converter: address = self._converter(_from, _to)
if converter == empty(address):
version: uint256 = 0
factory: address = empty(address)
(version, factory) = self._unpack(self.packed_factory)
assert factory != empty(address)
assert self._enabled(version)
converter = Factory(factory).deploy(_from, _to)
self.packed_converters[_from][_to] = self._pack(version, converter)
log DeployConverter(_from, _to, converter)
return converter
@external
def sweep(_token: address, _amount: uint256 = max_value(uint256)):
"""
@notice Sweep any tokens left over in the contract
@param _token The token to sweep
@param _amount The amount to sweep. Defaults to contract balance
@dev Can only be called by management
"""
assert msg.sender == self.management
amount: uint256 = _amount
if _amount == max_value(uint256):
amount = ERC20(_token).balanceOf(self)
assert ERC20(_token).transfer(self.management, amount, default_return_value=True)
log Sweep(_token, amount)
@external
def add_bucket(_bucket: address, _after: address):
"""
@notice Add a bucket
@param _bucket Address of the bucket
@param _after Address of the bucket to add it after in the list
@dev Can only be called by management
"""
assert msg.sender == self.management
assert _bucket != empty(address)
assert self.linked_buckets[_bucket] == empty(address)
next: address = self.linked_buckets[_after]
assert next != empty(address)
num_buckets: uint256 = self.num_buckets
assert num_buckets < MAX_NUM_BUCKETS
self.num_buckets = num_buckets + 1
self.linked_buckets[_after] = _bucket
self.linked_buckets[_bucket] = next
log AddBucket(_bucket, _after)
@external
def remove_bucket(_bucket: address, _previous: address):
"""
@notice Remove a bucket
@param _bucket Address of the bucket
@param _previous Address of the bucket before the target in the list
@dev Can only be called by management
"""
assert msg.sender == self.management
assert _bucket != SENTINEL
next: address = self.linked_buckets[_bucket]
assert next != empty(address)
assert self.linked_buckets[_previous] == _bucket
self.num_buckets -= 1
self.linked_buckets[_previous] = next
self.linked_buckets[_bucket] = empty(address)
log RemoveBucket(_bucket)
@external
def replace_bucket(_old: address, _new: address, _previous: address):
"""
@notice Replace a bucket
@param _old Address of the old bucket
@param _new Address of the new bucket
@param _previous Address of the bucket before the target in the list
@dev Can only be called by management
"""
assert msg.sender == self.management
assert _old != SENTINEL
next: address = self.linked_buckets[_old]
assert next != empty(address)
assert _new != empty(address)
assert self.linked_buckets[_new] == empty(address)
assert self.linked_buckets[_previous] == _old
self.linked_buckets[_previous] = _new
self.linked_buckets[_old] = empty(address)
self.linked_buckets[_new] = next
log ReplaceBucket(_old, _new)
@external
def set_converter(_from: address, _to: address, _converter: address):
"""
@notice Set a converter for a specific pair
@param _from The token converted from
@param _to The token converted to
@param _converter Address of the converter
@dev Can only be called by management
"""
assert msg.sender == self.management
self.packed_converters[_from][_to] = self._pack(0, _converter)
log SetConverter(_from, _to, _converter)
@external
def set_factory(_factory: address):
"""
@notice Set a new factory for converters
@param _factory The factory address, if any
@dev Can only be called by management
@dev Increments the factory version if a factory is set
@dev Factory version must be enabled separately
"""
assert msg.sender == self.management
version: uint256 = self._unpack(self.packed_factory)[0]
if _factory != empty(address):
version += 1
self.packed_factory = self._pack(version, _factory)
log SetFactory(_factory, version)
@external
def set_factory_version_enabled(_version: uint256, _enabled: bool):
"""
@notice Toggle all conversion contracts deployed by a specific factory
@param _version The version of the factory
@param _enabled True: enable all conversions, False: disable all conversions
@dev Can only be called by management
"""
assert msg.sender == self.management
latest: uint256 = self._unpack(self.packed_factory)[0]
assert _version > 0 and _version <= latest
flags: uint256 = self.packed_factory_versions[_version / 256]
mask: uint256 = 1 << (_version % 256)
if _enabled:
flags |= mask
else:
flags &= ~mask
self.packed_factory_versions[_version / 256] = flags
log SetFactoryVersionEnabled(_version, _enabled)
@external
def set_operator(_operator: address):
"""
@notice Set the new operator address
@param _operator New operator address
@dev Can only be called by management
"""
assert msg.sender == self.management
self.operator = _operator
log SetOperator(_operator)
@external
def set_management(_management: address):
"""
@notice
Set the pending management address.
Needs to be accepted by that account separately to transfer management over
@param _management New pending management address
"""
assert msg.sender == self.management
self.pending_management = _management
log PendingManagement(_management)
@external
def accept_management():
"""
@notice
Accept management role.
Can only be called by account previously marked as pending management by current management
"""
assert msg.sender == self.pending_management
self.pending_management = empty(address)
self.management = msg.sender
log SetManagement(msg.sender)
##### Compatibility with ingress contract #####
@external
@view
def getExpectedReturn(
_a: address, _b: address, _c: uint256, _d: uint256, _e: uint256
) -> (uint256, DynArray[uint256, 1]):
return (0, [0])
@external
def swap(
_a: address, _b: address, _c: uint256, _d: uint256, _e: DynArray[uint256, 1], _f: uint256
) -> uint256:
return 0
##### Internal utility functions #####
@internal
@view
def _converter(_from: address, _to: address) -> address:
version: uint256 = 0
converter: address = empty(address)
(version, converter) = self._unpack(self.packed_converters[_from][_to])
if not self._enabled(version):
return empty(address)
return converter
@internal
@view
def _enabled(_version: uint256) -> bool:
return self.packed_factory_versions[_version / 256] & (1 << (_version % 256)) > 0
@internal
@pure
def _unpack(_packed: uint256) -> (uint256, address):
return (_packed & MASK, convert(_packed >> 96, address))
@internal
@pure
def _pack(_version: uint256, _target: address) -> uint256:
assert _version <= MASK
return _version | (convert(_target, uint256) << 96)
Read Contract
buckets 0x37ea2b91 → address[]
converter 0x41bda9cc → address
factory 0xc45a0155 → uint256, address, bool
factory_version_enabled 0xaea5058e → bool
getExpectedReturn 0x085e2c5b → uint256, uint256[]
ingress 0xa411a59d → address
is_bucket 0x20d76381 → bool
linked_buckets 0x504007a2 → address
management 0x88a8d602 → address
num_buckets 0x66c7ffd6 → uint256
operator 0x570ca735 → address
packed_converters 0x7c9d7cd4 → uint256
packed_factory 0x5f82a933 → uint256
packed_factory_versions 0xcd852cdf → uint256
pending_management 0x770817ec → address
treasury 0x61d027b3 → address
whitelisted 0xd936547e → bool
Write Contract 15 functions
These functions modify contract state and require a wallet transaction to execute.
accept_management 0x759be10c
No parameters
add_bucket 0x86f89055
address _bucket
address _after
deploy_converter 0xe5b5b420
address _from
address _to
returns: address
pull 0x52d11238
address _token
returns: address
pull 0xf2d5d56b
address _token
uint256 _amount
returns: address
remove_bucket 0x78860fea
address _bucket
address _previous
replace_bucket 0x69f2e492
address _old
address _new
address _previous
set_converter 0x4b41a501
address _from
address _to
address _converter
set_factory 0xee2af3fb
address _factory
set_factory_version_enabled 0xd34aec23
uint256 _version
bool _enabled
set_management 0xfd066ecc
address _management
set_operator 0x30c7be72
address _operator
swap 0xe2a7515e
address _a
address _b
uint256 _c
uint256 _d
uint256[] _e
uint256 _f
returns: uint256
sweep 0x01681a62
address _token
sweep 0x6ea056a9
address _token
uint256 _amount
Recent Transactions
No transactions found for this address