Asset transfers
Asset transfers
A user might want to transfer their asset from one wallet to another for various reasons, ie. sending the asset as a gift.
📝GUIDES
Core SDK
Link SDK
Core SDK
1. Initialize the Core SDK
In order to use the Core SDK, you need to initialize it.
2. Generate signers
Transferring an asset requires a user's signature, so your application will need to generate signers.
3. Set the transfer params
The transfer request requires:
ETH and Stark signers (see previous step)
Token type, and token amount/details to be transferred
Address of receiving account
Token types that can be transferred and details required:
ETH -
amount
ERC20 -
amount
,tokenAddress
ERC721 -
tokenAddress
,tokenId
amount
The amount of the token required. If token is ETH, the amount is denominated in wei
tokenAddress
The address of the smart contract from which the token originates
tokenId
The token ID of a non-fungible token (only for ERC721 token types)
Typescript Core SDK
📚SDK REFERENCE
unsignedTransferRequest
Example request params for the different token types:
ETH
const unsignedTransferRequest = {
type: 'ETH',
amount: '100000000', // Denominated in wei
receiver: "RECEIVER'S ETH ADDRESS",
};
ERC20
const unsignedTransferRequest = {
type: "ERC20",
amount: "100000000",
tokenAddress: '0x...'
receiver: "RECEIVER'S ETH ADDRESS",
}
ERC721
const unsignedTransferRequest = {
type: 'ERC721',
tokenId: '1',
tokenAddress: '0x...',
receiver: "RECEIVER'S ETH ADDRESS",
};
Kotlin (JVM) Core SDK
📚SDK REFERENCE
AssetModel
Erc20Asset
Erc721Asset
EthAsset
Example request params for the different token types:
ETH
val token = EthAsset(
quantity = "100000000"
)
ERC20
val token = Erc20Asset(
tokenAddress = "0x...",
decimals = 18,
quantity = "100000000"
)
ERC721
val token = Erc721Asset(
tokenAddress = "0x...",
tokenId: "1"
)
Swift Core SDK
📚SDK REFERENCE
createTransferRequest
Golang Core SDK
📚SDK REFERENCE
GetSignableTransferRequestV1
Token type models:
SignableETHToken
SignableERC20Token
SignableERC721Token
import (
"github.com/XpansionChain/imx-core-sdk-golang/imx"
"github.com/XpansionChain/imx-core-sdk-golang/tokens"
"github.com/XpansionChain/imx-core-sdk-golang/examples/workflows/utils"
)
var l1signer imx.L1Signer
// ETH token
transferRequest := api.GetSignableTransferRequestV1{
Token: *tokens.SignableETHToken(),
// Amount to be transferred, denominated in wei
Amount: "100000000",
// Sender's ETH address
Sender: l1signer.GetAddress(),
// Receiver's ETH address
Receiver: "UPDATE WITH RECEIVER'S ETH ADDRESS",
}
// ERC20 token
transferRequest := api.GetSignableTransferRequestV1{
// Pass in decimals and token address
Token: *tokens.SignableERC20Token(18, "0x..."),
Amount: "100000000",
Sender: l1signer.GetAddress(),
Receiver: "UPDATE WITH RECEIVER'S ETH ADDRESS",
}
// ERC721 token
transferRequest := api.GetSignableTransferRequestV1{
// Pass in token address and token ID
Token: *tokens.SignableERC721Token("0x...", "1"),
Sender: l1signer.GetAddress(),
Receiver: "UPDATE WITH RECEIVER'S ETH ADDRESS",
}
See also:
💻EXAMPLE
Transfer
4. Create the transfer
Typescript Core SDK
📚SDK REFERENCE
transfer
const walletConnection = { ethSigner, starkSigner };
// Transfers the asset
const response = await client.transfer(
walletConnection,
unsignedTransferRequest
);
// Print out the response
console.log(response);
Example response:
interface CreateTransferResponseV1 {
/**
* [deprecated] Sent signature
* @type {string}
*/
sent_signature: string;
/**
* [deprecated] The status of transfer
* @type {string}
*/
status: string;
/**
* [deprecated] Time of the transfer
* @type {number}
*/
time: number;
/**
* ID of the transfer
* @type {number}
*/
transfer_id: number;
}
Kotlin (JVM) Core SDK
📚SDK REFERENCE
transfer
import com.XpansionChain.sdk.XpansionChainCore.transfer
import com.XpansionChain.sdk.Signer
import com.XpansionChain.sdk.StandardStarkSigner
import com.XpansionChain.sdk.model.Erc20Asset
import jdk.jpackage.internal.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.future.await
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
fun main(): Unit = runBlocking {
launch(Dispatchers.Default) {
val signer : Signer
val starkSigner : StandardStarkSigner
try {
// Token to be transferred
val token = Erc20Asset(
tokenAddress = "0x...",
decimals = 18,
quantity = "100000000"
)
// Executes the transfer workflow
val createTransferResponse = transfer(
token = token,
recipientAddress = "UPDATE WITH RECEIVER'S ETH ADDRESS",
signer = signer,
starkSigner = starkSigner
).await()
// Prints the response
Log.verbose(createTransferResponse.toString())
} catch (e: Exception) {
throw e
}
}
}
Example response:
data class CreateTransferResponse (
/* List of transfer IDs */
@Json(name = "transfer_ids")
val transferIds: kotlin.collections.List<kotlin.Int>
)
Swift Core SDK
📚SDK REFERENCE
createTransfer
Golang Core SDK
📚SDK REFERENCE
Transfer
// Transfer asset workflow example
package transferexample
import (
"context"
"log"
"github.com/XpansionChain/imx-core-sdk-golang/generated/api"
"github.com/XpansionChain/imx-core-sdk-golang/imx"
transfersWorkflow "github.com/XpansionChain/imx-core-sdk-golang/workflows/transfers"
)
func main() {
var ctx context.Context
var apiClient imx.Client
var l1signer imx.L1Signer
var l2signer imx.l2signer
var transferRequest api.GetSignableTransferRequestV1
// Executes the transfer workflow
response, err := transfersWorkflow.CreateTransfer(ctx, apiClient, l1signer, l2signer, transferRequest)
if err != nil {
log.Panicf("error in executing the transfer workflow: %v\n", err)
}
// Prints out the response
log.Printf("Response: %v", response)
}
Example response:
type CreateTransferResponseV1 struct {
// [deprecated] Sent signature
SentSignature string `json:"sent_signature"`
// [deprecated] The status of transfer
Status string `json:"status"`
// [deprecated] Time of the transfer
Time int32 `json:"time"`
// ID of the transfer
TransferId int32 `json:"transfer_id"`
}
See also:
💻EXAMPLE
Transfer
Last updated