# 5.3 IBC-Ethereum

**Contract Interface**

```javascript
 event AddToken(address tokenAddr, bytes32 tokenSummary, bytes32 tokenId);
    event RemoveToken(address tokenAddr, bytes32 tokenSummary, bytes32 tokenId);

    event DepositRelay(address mainAddr, address tokenAddr, address addr, address toAddr, uint amount, uint depositId, address extraToAddr);
    event DepositValidated(address mainAddr, address tokenAddr, address addr, address toAddr, uint amount, uint depositId, address extraToAddr);
    
    event WithdrawRelay(uint withdrawId, address balanceContractAddr, bytes32 tokenSummary, address addr, bytes destination, uint amount, bytes comment);
    event WithdrawValidated(uint withdrawId, address balanceContractAddr, bytes32 tokenSummary, address addr, bytes destination, uint amount, bytes comment);

    mapping (bytes32=>bool) public deposits;
    mapping (bytes32=>address) public tokenAddr;
    mapping (address=>bytes32) public tokenSummaries;
    mapping (bytes32=>bool) public isListing;
    
    struct Withdrawal{
        address user;
        bytes32 tokenSummary;
        bytes destination;
        uint amount;
        bytes comment;
    }
    
    mapping (uint=>Withdrawal) public withdrawals;
    
    function relayDepositToken(address mainAddr, address fromAddr, address toAddr, address token, uint amount, uint depositId, address extraToAddr) public
    function validateDepositToken(address mainAddr, address fromAddr, address toAddr, address token, uint amount, uint depositId, address extraToAddr, address validator, uint8 v, bytes32 r, bytes32 s) public
    function checkValidateDepositToken(address mainAddr, address fromAddr,address toAddr, address token, uint amount, uint depositId, address extraToAddr) public
    function withdraw(uint withdrawId, address user, bytes32 tokenSummary, bytes memory destination, uint amount, bytes memory comment) public
    function withdraw(uint withdrawId, address user, address extraUser, bytes32 tokenSummary, bytes memory destination, uint amount, bytes memory comment) public
    function relayWithdraw(uint withdrawId) public
    function validateWithdraw(uint withdrawId, address validator, uint8 v, bytes32 r, bytes32 s) public
    function checkValidateWithdraw(uint withdrawId) public
```
