From 7a8dea5158ac7761ac2df45f70f8c8ff62aa10b0 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Tue, 31 Jan 2023 14:59:00 +0000 Subject: [PATCH] sdk/js: getOriginalAssetAptos NFT returns tokenId --- .../nft_bridge/__tests__/aptos-integration.ts | 7 +++++++ sdk/js/src/nft_bridge/getOriginalAsset.ts | 18 +++++++++++++----- sdk/js/src/utils/aptos.ts | 4 +++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/sdk/js/src/nft_bridge/__tests__/aptos-integration.ts b/sdk/js/src/nft_bridge/__tests__/aptos-integration.ts index 086b11d4f..5e15b85dc 100644 --- a/sdk/js/src/nft_bridge/__tests__/aptos-integration.ts +++ b/sdk/js/src/nft_bridge/__tests__/aptos-integration.ts @@ -20,6 +20,7 @@ import { CONTRACTS, deriveCollectionHashFromTokenId, deriveTokenHashFromTokenId, + ensureHexPrefix, generateSignAndSubmitEntryFunction, tryNativeToHexString, tryNativeToUint8Array, @@ -160,6 +161,9 @@ describe("Aptos NFT SDK tests", () => { isWrapped: true, chainId: CHAIN_ID_ETH, assetAddress: Uint8Array.from(ethTransferVaaParsed.tokenAddress), + tokenId: ensureHexPrefix( + ethTransferVaaParsed.tokenId.toString(16).padStart(64, "0") + ), }); // transfer NFT from Aptos back to Ethereum @@ -345,6 +349,9 @@ describe("Aptos NFT SDK tests", () => { isWrapped: false, chainId: CHAIN_ID_APTOS, assetAddress: tokenAddressAptos, + tokenId: ensureHexPrefix( + ethTransferVaaParsed.tokenId.toString(16).padStart(64, "0") + ), }); }); diff --git a/sdk/js/src/nft_bridge/getOriginalAsset.ts b/sdk/js/src/nft_bridge/getOriginalAsset.ts index 2cd049abd..26ca8f727 100644 --- a/sdk/js/src/nft_bridge/getOriginalAsset.ts +++ b/sdk/js/src/nft_bridge/getOriginalAsset.ts @@ -22,6 +22,9 @@ import { coalesceChainId, deriveCollectionHashFromTokenId, hex, + deriveTokenHashFromTokenId, + ensureHexPrefix, + uint8ArrayToHex, } from "../utils"; import { getIsWrappedAssetEth } from "./getIsWrappedAsset"; @@ -198,7 +201,7 @@ export async function getOriginalAssetAptos( client: AptosClient, nftBridgeAddress: string, tokenId: TokenTypes.TokenId -): Promise { +): Promise { try { const originInfo = ( await client.getAccountResource( @@ -210,10 +213,12 @@ export async function getOriginalAssetAptos( assertChain(chainId); return { isWrapped: true, - chainId: chainId, - assetAddress: new Uint8Array( - hex(originInfo.token_address.external_address) - ), + chainId, + assetAddress: + chainId === CHAIN_ID_SOLANA + ? arrayify(BigNumber.from(hex(tokenId.token_data_id.name))) + : new Uint8Array(hex(originInfo.token_address.external_address)), + tokenId: ensureHexPrefix(hex(tokenId.token_data_id.name).toString("hex")), }; } catch (e: any) { if ( @@ -230,5 +235,8 @@ export async function getOriginalAssetAptos( isWrapped: false, chainId: CHAIN_ID_APTOS, assetAddress: await deriveCollectionHashFromTokenId(tokenId), + tokenId: ensureHexPrefix( + uint8ArrayToHex(await deriveTokenHashFromTokenId(tokenId)) + ), }; } diff --git a/sdk/js/src/utils/aptos.ts b/sdk/js/src/utils/aptos.ts index 096036839..20fb85aa7 100644 --- a/sdk/js/src/utils/aptos.ts +++ b/sdk/js/src/utils/aptos.ts @@ -315,7 +315,9 @@ export const deriveTokenHashFromTokenId = async ( const propertyVersion = Buffer.alloc(8); propertyVersion.writeBigUInt64BE(BigInt(tokenId.property_version)); const inputs = Buffer.concat([ - Buffer.from(tokenId.token_data_id.creator, "hex"), + BCS.bcsToBytes( + TxnBuilderTypes.AccountAddress.fromHex(tokenId.token_data_id.creator) + ), Buffer.from(sha3_256(tokenId.token_data_id.collection), "hex"), Buffer.from(sha3_256(tokenId.token_data_id.name), "hex"), propertyVersion,