Token Vault
Token Vault
Section titled “Token Vault”This vault holds all ERC20 tokens (but not Ether) that users have deposited. It also manages the mapping between canonical ERC20 tokens and their bridged tokens.
Ether is held by Bridges on L1 and by the EtherVault on L2, not TokenVaults.
CanonicalERC20
Section titled “CanonicalERC20”struct CanonicalERC20 { uint256 chainId; address addr; uint8 decimals; string symbol; string name;}
MessageDeposit
Section titled “MessageDeposit”struct MessageDeposit { address token; uint256 amount;}
isBridgedToken
Section titled “isBridgedToken”mapping(address => bool) isBridgedToken
bridgedToCanonical
Section titled “bridgedToCanonical”mapping(address => struct TokenVault.CanonicalERC20) bridgedToCanonical
canonicalToBridged
Section titled “canonicalToBridged”mapping(uint256 => mapping(address => address)) canonicalToBridged
messageDeposits
Section titled “messageDeposits”mapping(bytes32 => struct TokenVault.MessageDeposit) messageDeposits
BridgedERC20Deployed
Section titled “BridgedERC20Deployed”event BridgedERC20Deployed(uint256 srcChainId, address canonicalToken, address bridgedToken, string canonicalTokenSymbol, string canonicalTokenName, uint8 canonicalTokenDecimal)
EtherSent
Section titled “EtherSent”event EtherSent(bytes32 msgHash, address from, address to, uint256 destChainId, uint256 amount)
ERC20Sent
Section titled “ERC20Sent”event ERC20Sent(bytes32 msgHash, address from, address to, uint256 destChainId, address token, uint256 amount)
ERC20Released
Section titled “ERC20Released”event ERC20Released(bytes32 msgHash, address from, address token, uint256 amount)
ERC20Received
Section titled “ERC20Received”event ERC20Received(bytes32 msgHash, address from, address to, uint256 srcChainId, address token, uint256 amount)
TOKENVAULT_INVALID_TO
Section titled “TOKENVAULT_INVALID_TO”error TOKENVAULT_INVALID_TO()
TOKENVAULT_INVALID_VALUE
Section titled “TOKENVAULT_INVALID_VALUE”error TOKENVAULT_INVALID_VALUE()
TOKENVAULT_INVALID_CALL_VALUE
Section titled “TOKENVAULT_INVALID_CALL_VALUE”error TOKENVAULT_INVALID_CALL_VALUE()
TOKENVAULT_INVALID_TOKEN
Section titled “TOKENVAULT_INVALID_TOKEN”error TOKENVAULT_INVALID_TOKEN()
TOKENVAULT_INVALID_AMOUNT
Section titled “TOKENVAULT_INVALID_AMOUNT”error TOKENVAULT_INVALID_AMOUNT()
TOKENVAULT_CANONICAL_TOKEN_NOT_FOUND
Section titled “TOKENVAULT_CANONICAL_TOKEN_NOT_FOUND”error TOKENVAULT_CANONICAL_TOKEN_NOT_FOUND()
TOKENVAULT_INVALID_OWNER
Section titled “TOKENVAULT_INVALID_OWNER”error TOKENVAULT_INVALID_OWNER()
TOKENVAULT_INVALID_SRC_CHAIN_ID
Section titled “TOKENVAULT_INVALID_SRC_CHAIN_ID”error TOKENVAULT_INVALID_SRC_CHAIN_ID()
TOKENVAULT_MESSAGE_NOT_FAILED
Section titled “TOKENVAULT_MESSAGE_NOT_FAILED”error TOKENVAULT_MESSAGE_NOT_FAILED()
TOKENVAULT_INVALID_SENDER
Section titled “TOKENVAULT_INVALID_SENDER”error TOKENVAULT_INVALID_SENDER()
function init(address addressManager) external
sendEther
Section titled “sendEther”function sendEther(uint256 destChainId, address to, uint256 gasLimit, uint256 processingFee, address refundAddress, string memo) external payable
Receives Ether and constructs a Bridge message. Sends the Ether and message along to the Bridge.
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
destChainId | uint256 | @custom:see IBridge.Message |
to | address | @custom:see IBridge.Message |
gasLimit | uint256 | @custom:see IBridge.Message |
processingFee | uint256 | @custom:see IBridge.Message |
refundAddress | address | @custom:see IBridge.Message |
memo | string | @custom:see IBridge.Message |
sendERC20
Section titled “sendERC20”function sendERC20(uint256 destChainId, address to, address token, uint256 amount, uint256 gasLimit, uint256 processingFee, address refundAddress, string memo) external payable
Transfers ERC20 tokens to this vault and sends a message to the destination chain so the user can receive the same amount of tokens by invoking the message call.
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
destChainId | uint256 | @custom:see IBridge.Message |
to | address | @custom:see IBridge.Message |
token | address | The address of the token to be sent. |
amount | uint256 | The amount of token to be transferred. |
gasLimit | uint256 | @custom:see IBridge.Message |
processingFee | uint256 | @custom:see IBridge.Message |
refundAddress | address | @custom:see IBridge.Message |
memo | string | @custom:see IBridge.Message |
releaseERC20
Section titled “releaseERC20”function releaseERC20(struct IBridge.Message message, bytes proof) external
Release deposited ERC20 back to the owner on the source TokenVault with a proof that the message processing on the destination Bridge has failed.
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
message | struct IBridge.Message | The message that corresponds the ERC20 deposit on the |
source chain. | ||
proof | bytes | The proof from the destination chain to show the message |
has failed. |
receiveMCH
Section titled “receiveMCH”function receiveMCH(address to, uint256 amount) external
This function can only be called by the bridge contract while receiving L2 eth
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
to | address | The destination address. |
amount | uint256 | The amount of tokens to be sent. 0 is a valid value. |
receiveERC20
Section titled “receiveERC20”function receiveERC20(struct TokenVault.CanonicalERC20 canonicalToken, address from, address to, uint256 amount) external
This function can only be called by the bridge contract while invoking a message call. See sendERC20, which sets the data to invoke this function.
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
canonicalToken | struct TokenVault.CanonicalERC20 | The canonical ERC20 token which may or may not |
live on this chain. If not, a BridgedERC20 contract will be deployed. | | from | address | The source address. | | to | address | The destination address. | | amount | uint256 | The amount of tokens to be sent. 0 is a valid value. |