From 027354f319bd290dc7ace7bf016b4c80342b7ef0 Mon Sep 17 00:00:00 2001 From: aki Date: Tue, 25 Oct 2022 06:13:45 +0000 Subject: [PATCH] sdk/aptos: move transfer logic to sdk --- sdk/js/src/aptos/api/tokenBridge.ts | 34 ++++++++++++++++++----------- sdk/js/src/token_bridge/transfer.ts | 19 +++++++++++++--- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/sdk/js/src/aptos/api/tokenBridge.ts b/sdk/js/src/aptos/api/tokenBridge.ts index fa19ed86b..fa3c5ab8e 100644 --- a/sdk/js/src/aptos/api/tokenBridge.ts +++ b/sdk/js/src/aptos/api/tokenBridge.ts @@ -202,31 +202,39 @@ export const transferTokens = ( recipientChain: ChainId | ChainName, recipient: Uint8Array, relayerFee: string, - nonce: number, - payload: string = "", + nonce: number ): Types.EntryFunctionPayload => { if (!tokenBridgeAddress) throw new Error("Need token bridge address."); if (!isValidAptosType(fullyQualifiedType)) { - throw new Error("Need fully qualified address"); + throw new Error("Invalid qualified type"); } const recipientChainId = coalesceChainId(recipientChain); - if (payload) { - throw new Error("Transfer with payload are not yet supported in the sdk"); - } else { - return { - function: `${tokenBridgeAddress}::transfer_tokens::transfer_tokens_entry`, - type_arguments: [fullyQualifiedType], - arguments: [amount, recipientChainId, recipient, relayerFee, nonce], - }; - } + return { + function: `${tokenBridgeAddress}::transfer_tokens::transfer_tokens_entry`, + type_arguments: [fullyQualifiedType], + arguments: [amount, recipientChainId, recipient, relayerFee, nonce], + }; +}; + +export const transferTokensWithPayload = ( + tokenBridgeAddress: string, + fullyQualifiedType: string, + amount: string, + recipientChain: ChainId | ChainName, + recipient: Uint8Array, + relayerFee: string, + nonce: number, + payload: string +): Types.EntryFunctionPayload => { + throw new Error("Transfer with payload are not yet supported in the sdk"); }; // Created wrapped coin export const createWrappedCoinType = ( tokenBridgeAddress: string, - vaa: Uint8Array, + vaa: Uint8Array ): Types.EntryFunctionPayload => { if (!tokenBridgeAddress) throw new Error("Need token bridge address."); return { diff --git a/sdk/js/src/token_bridge/transfer.ts b/sdk/js/src/token_bridge/transfer.ts index 90118c2c7..b6ce1597c 100644 --- a/sdk/js/src/token_bridge/transfer.ts +++ b/sdk/js/src/token_bridge/transfer.ts @@ -53,7 +53,7 @@ const BN = require("bn.js"); import { FunctionCallOptions } from "near-api-js/lib/account"; import { Provider } from "near-api-js/lib/providers"; import { MsgExecuteContract as XplaMsgExecuteContract } from "@xpla/xpla.js"; -import { transferTokens as transferTokensAptos } from "../aptos"; +import { transferTokens as transferTokensAptos, transferTokensWithPayload } from "../aptos"; export async function getAllowanceEth( tokenBridgeAddress: string, @@ -981,6 +981,20 @@ export function transferFromAptos( relayerFee: string = "0", payload: string = "" ): Types.EntryFunctionPayload { + if (payload) { + // Currently unsupported + return transferTokensWithPayload( + tokenBridgeAddress, + fullyQualifiedType, + amount, + recipientChain, + recipient, + relayerFee, + createNonce().readUInt32LE(0), + payload + ); + } + return transferTokensAptos( tokenBridgeAddress, fullyQualifiedType, @@ -988,7 +1002,6 @@ export function transferFromAptos( recipientChain, recipient, relayerFee, - createNonce().readUInt32LE(0), - payload + createNonce().readUInt32LE(0) ); }