Transfer
This page instructs you how to transfer assets from a logged-in users Passport wallet to another wallet.
Pre-requisites
- The user must be logged into your application via Passport
1. Creating the transfer
Once you have a user logged into your application via Passport, you will be able to initiate the transfer of an asset
(ETH, ERC20 or ERC721) from the users Passport wallet to another wallet. To do this, we must create an
UnsignedTransferRequest argument that will be passed to the transfer function. The structure of the
UnsignedTransferRequest varies depending on the type property, which specifies the type of asset that is being
transferred. You'll need to ensure that the wallet that you're attempting to transfer the asset from is in fact the
owner, otherwise the transfer request will fail.
1.1. Transferring an ERC721
To transfer an ERC721, the following properties must be specified:
- type: The type of asset to transfer. Must be
ERC721 - tokenId: The unique identifier of the NFT to be transferred
- tokenAddress: The address of the
ERC721contract to be transferred - receiver: The address of the wallet that will receive the
ERC721
For example:
const transferRequest: UnsignedTransferRequest = {
type: 'ERC721',
tokenId: '1295',
receiver: '0x0000000000000000000000000000000000000000',
tokenAddress: '0xacb3c6a43d15b907e8433077b6d38ae40936fe2c',
};
1.2. Transferring an ERC20
To transfer ERC20, the following properties must be specified:
- type: The type of asset to transfer. Must be
ERC20 - amount: The amount of the
ERC20token to be transferred - receiver: The address of the wallet that will receive the
ERC20 - tokenAddress: The address of the
ERC20contract to be transferred
For example:
const transferRequest: UnsignedTransferRequest = {
type: 'ERC20',
amount: '1',
receiver: '0x0000000000000000000000000000000000000000',
tokenAddress: '0xacb3c6a43d15b907e8433077b6d38ae40936fe2c',
};
1.3. Transferring ETH
To transfer ETH, the following properties must be specified:
- type: The type of asset to transfer. Must be
ETH - amount: The amount of the
ERC20token to be transferred - receiver: The address of the wallet that will receive the
ETH
For example:
const transferRequest: UnsignedTransferRequest = {
type: 'ETH',
amount: '1',
receiver: '0x0000000000000000000000000000000000000000',
};
2. Performing the transfer
Once you've created an UnsignedTransferRequest, it's time to perform the transfer. This can be done by calling
the transfer function on the IMXProvider instance that is returned from the connectImx function:
const transferResponse: CreateTransferResponseV1 = await provider.transfer(transferRequest);
The transfer function returns a promise that resolves to a CreateTransferResponseV1, which contains the following
properties:
- sent_signature: The signature of the transfer that was executed
- status: The status of the transfer
- time: The time that the transfer occurred
- transfer_id: The unique identifier for the transfer
In the event of a failure, the promise will reject with the following properties:
- code: The error code associated with the failure
- details: A string containing details about the failure
- message: A string containing a message that describes the failure