We need snapshots (Snapshots allow to lock user's balances to prevent multiple votes with same tokens https://docs.openzeppelin.com/contracts/3.x/api/token/erc20#ERC20Snapshot) in the token smart contract deployed on Aurora. Could we deploy our own custom token smart contract on Aurora and map it to a token on Ethereum?

1 Answer 1


It is possible to map custom smart contracts to Ethereum. Any Ethereum ERC-20 can be bridged to Aurora, there are no restrictions. However, deploying your own custom token smart contracts on Aurora and mapping it to a token on Ethereum cannot be done directly with the recent update.

Aurora bridge works the following way: if a user wants to bridge the token from Ethereum (let’s call it ERC-20) to Aurora (let’s call it aERC-20), then they need to:

  • Check that aERC-20 is already deployed to Aurora. If not, then a user should issue a specific transaction for deployment of aERC-20. This transaction includes the address of the ERC-20 so that Aurora can store the mapping. This transaction is called only once. The aERC-20 is a standard vanilla OpenZepplin ERC-20 with minor updates to allow bridging: https://github.com/aurora-is-near/aurora-engine/blob/master/etc/eth-contracts/contracts/EvmErc20.sol
  • Once done, the user is able to bridge ERC-20 into aERC-20. The transfer requires two transactions on Ethereum side (approve and lock, which calls transferFrom), and one transaction on NEAR side (which is issued automatically by our relayer). As you see, the aERC-20 contract is fixed. So it doesn’t have any specific methods or anything. After the deployment any contract can put special clauses based on the aERC-20 address. This is the way you need to interact with bridge tokens at the moment. There is a discussion whether Aurora will allow projects to do the following thing:
  • Deploy their Aurora token (pERC-20)
  • Change the mapping ERC-20 -> aERC-20, so it’s mapped to a custom implementation of the token: ERC-20 -> pERC-20
  • Migrate the tokens from aERC-20 to pERC-20.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.