Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0x09d6bd033Ca67422512e6b7399c58dfA530F7D61
Balance 0 ETH
Nonce 1
Code Size 1707 bytes
Indexed Transactions 0 (1 on-chain, 0% indexed)
External Etherscan · Sourcify

Contract Bytecode

1707 bytes
0x6003361161000c57610697565b60003560e01c63440849b78118610269576084361061069957600435600401600a81351161069957803580604052600081600a811161069957801561007257905b8060051b6020850101358060a01c610699578160051b6060015260010181811861004d575b50505050602435600401600a813511610699578035806101a052600081600a81116106995780156100c557905b8060051b6020850101358060a01c610699578160051b6101c0015260010181811861009f575b50505050346106995760015433181561013e57600e610300527f4e6f7420417574686f72697365640000000000000000000000000000000000006103205261030050610300518061032001601f826000031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b6101a05160405118156101b1576016610300527f4c697374206d7573742062652073616d652073697a65000000000000000000006103205261030050610300518061032001601f826000031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610300526000604051600a811161069957801561025a57905b8060051b606001516103205261030051600181018060000b81186106995790506103005260006103205160205260005260406000205461024f57610300516101a0518110156106995760051b6101c001516000610320516020526000526040600020555b6001018181186101eb575b50506001610320526020610320f35b6347e7ef2481186104465760443618610699576004358060a01c610699576040523461069957600060405160205260005260406000205461030157600d6060527f4e6f7420537570706f727465640000000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60243561036557600e6060527f496e76616c696420416d6f756e7400000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516323b872dd606052336080523060a05260243560c052602060606064607c6000855af161039a573d600060003e3d6000fd5b60203d10610699576060518060011c6106995760e05260e0505060006040516020526000526040600020546340c10f196060523360805260243560a052803b1561069957600060606044607c6000855af16103fa573d600060003e3d6000fd5b5060006040516020526000526040600020546040517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f6260243560605260206060a3600160605260206060f35b63f3fef3a381186106315760443618610699576004358060a01c61069957604052346106995760006040516020526000526040600020546104de57600d6060527f4e6f7420537570706f727465640000000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60243561054257600e6060527f496e76616c696420416d6f756e7400000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60006040516020526000526040600020546379cc67906060523360805260243560a052602060606044607c6000855af1610581573d600060003e3d6000fd5b60203d10610699576060518060011c6106995760c05260c0505060405163a9059cbb6060523360805260243560a052602060606044607c6000855af16105cc573d600060003e3d6000fd5b60203d10610699576060518060011c6106995760c05260c0505060006040516020526000526040600020546040517f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb60243560605260206060a3600160605260206060f35b63b7ff920e81186106715760243618610699576004358060a01c610699576040523461069957600060405160205260005260406000205460605260206060f35b63f851a4408118610695576004361861069957346106995760015460405260206040f35b505b005b600080fda165767970657283000306000b

Verified Source Code Partial Match

Compiler: v0.3.6+commit.4a2124d0
Vyper_contract.vy 92 lines
#@version ^0.3.3

# @dev Implementation of urtoken.org controller contract.
# Contract handles conversion of erc20 to urtoken and vice versa
# @author Robert Mutua (https://github.com/freelancer254)
# https://github.com/freelancer254/

#events
event Deposit:
    erc20: indexed(address)
    urltoken: indexed(address)
    value: uint256


event Withdraw:
    erc20: indexed(address)
    urltoken: indexed(address)
    value: uint256


#ERC20 Interface to interact with ERC20 contracts
interface IERC20:
    def transfer(_to: address, _value: uint256) -> bool: nonpayable
    def mint(_to: address, _value: uint256): nonpayable
    def transferFrom(_from: address, _to:address, _value: uint256) -> bool: nonpayable
    def burnFrom(_from: address, _value: uint256) -> bool: nonpayable
    def approve(_spender: address, _value: uint256) -> bool: nonpayable
    def balanceOf(_owner: address) -> uint256: view
    def allowance(_owner: address, _spender: address) -> uint256: view

supportedContracts: public(HashMap[address, address])
admin: public(address)

#constructor
@nonpayable
@external
def __init__():
    self.admin = msg.sender

@nonpayable
@external
def addSupportedContracts(erc20:DynArray[address, 10] , urtoken: DynArray[address, 10]) -> bool:
    #only admin allowed
    assert msg.sender == self.admin, "Not Authorised"
    #check lists are same length
    assert len(erc20) == len(urtoken), "List must be same size"
    #to keep track of index
    #vyper doesn't support index(list)
    i: int8 = convert(-1, int8) #assigned -1 to be incremented to 0,1,2,3 etc
    for _address in erc20:
        #increment i
        i += convert(1, int8)
        #add only when not set
        #prevents changing of urtoken contract in the future
        if self.supportedContracts[_address] == empty(address):
            self.supportedContracts[_address] = urtoken[i]
    return True

#the default function, similar to fallback fxn in solidity
#called when value is sent directly to the smart contract
@payable
@external
def __default__():
    pass

@nonpayable
@external
def deposit(erc20: address, _value: uint256) -> bool:
    assert self.supportedContracts[erc20] != empty(address), "Not Supported"
    #check value > 0
    assert _value > convert(0, uint256), "Invalid Amount"
    #transferFrom msg.sender
    IERC20(erc20).transferFrom(msg.sender, self, _value)
    #mint urtoken for msg.sender
    IERC20(self.supportedContracts[erc20]).mint(msg.sender, _value)
    #emit deposit event
    log Deposit(erc20, self.supportedContracts[erc20], _value)
    return True

@nonpayable
@external
def withdraw(erc20: address, _value: uint256) -> bool:
    assert self.supportedContracts[erc20] != empty(address), "Not Supported"
    #check _value > 0
    assert _value > convert(0, uint256), "Invalid Amount"
    #burn urtoken
    IERC20(self.supportedContracts[erc20]).burnFrom(msg.sender, _value)
    #send erc20
    IERC20(erc20).transfer(msg.sender, _value)
    #emit withdraw event
    log Withdraw(erc20, self.supportedContracts[erc20], _value)
    return True

Read Contract

admin 0xf851a440 → address
supportedContracts 0xb7ff920e → address

Write Contract 3 functions

These functions modify contract state and require a wallet transaction to execute.

addSupportedContracts 0x440849b7
address[] erc20
address[] urtoken
returns: bool
deposit 0x47e7ef24
address erc20
uint256 _value
returns: bool
withdraw 0xf3fef3a3
address erc20
uint256 _value
returns: bool

Token Balances (1) $10.56

View Transfers →
TokenBalancePriceValue
WETH 0.0053 $1991.77 $10.56

Recent Transactions

This address has 1 on-chain transactions, but only 0% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →