Skip to content

Commit

Permalink
feat(sdk-coin-apt): addition of test cases for digital asset
Browse files Browse the repository at this point in the history
TICKET: COIN-2920
  • Loading branch information
baltiyal committed Jan 28, 2025
1 parent 248276e commit 42b6792
Show file tree
Hide file tree
Showing 8 changed files with 181 additions and 203 deletions.
4 changes: 2 additions & 2 deletions modules/sdk-coin-apt/src/lib/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ export const SECONDS_PER_WEEK = 7 * 24 * 60 * 60; // Days * Hours * Minutes * Se

export const APTOS_COIN = '0x1::aptos_account::transfer_coins';
export const FUNGIBLE_ASSET = '0x1::primary_fungible_store::transfer';
export const NON_FUNGIBLE_ASSET = '0x1::object::transfer';
export const DIGITAL_ASSET = '0x1::object::transfer';

export const NON_FUNGIBLE_ASSET_TRANSFER_SUPPLY_PER_TRANSACTION = '1';
export const DIGITAL_ASSET_TRANSFER_SUPPLY_PER_TRANSACTION = '1';
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ import {
} from '@aptos-labs/ts-sdk';
import { InvalidTransactionError, TransactionRecipient, TransactionType } from '@bitgo/sdk-core';
import { BaseCoin as CoinConfig, NetworkType } from '@bitgo/statics';
import { NON_FUNGIBLE_ASSET_TRANSFER_SUPPLY_PER_TRANSACTION } from '../constants';
import { DIGITAL_ASSET_TRANSFER_SUPPLY_PER_TRANSACTION } from '../constants';

export class NonFungibleAssetTransaction extends Transaction {
export class DigitalAssetTransaction extends Transaction {
constructor(coinConfig: Readonly<CoinConfig>) {
super(coinConfig);
this._type = TransactionType.SendNFT;
Expand All @@ -34,15 +34,15 @@ export class NonFungibleAssetTransaction extends Transaction {
}
this._assetId = entryFunction.args[0].toString();
this._recipient.address = entryFunction.args[1].toString();
this._recipient.amount = NON_FUNGIBLE_ASSET_TRANSFER_SUPPLY_PER_TRANSACTION;
this._recipient.amount = DIGITAL_ASSET_TRANSFER_SUPPLY_PER_TRANSACTION;
}

protected async buildRawTransaction(): Promise<void> {
const network: Network = this._coinConfig.network.type === NetworkType.MAINNET ? Network.MAINNET : Network.TESTNET;
const aptos = new Aptos(new AptosConfig({ network }));
const senderAddress = AccountAddress.fromString(this._sender);
const recipientAddress = AccountAddress.fromString(this._recipient.address);
const nonFungibleAssetAccountAddress = AccountAddress.fromString(this._assetId);
const digitalAssetAccountAddress = AccountAddress.fromString(this._assetId);

const transferDigitalAssetAbi: EntryFunctionABI = {
typeParameters: [{ constraints: [MoveAbility.KEY] }],
Expand All @@ -54,7 +54,7 @@ export class NonFungibleAssetTransaction extends Transaction {
data: {
function: '0x1::object::transfer',
typeArguments: ['0x4::token::Token'],
functionArguments: [nonFungibleAssetAccountAddress, recipientAddress],
functionArguments: [digitalAssetAccountAddress, recipientAddress],
abi: transferDigitalAssetAbi,
},
options: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import { TransactionBuilder } from './transactionBuilder';
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { FungibleAssetTransaction } from '../transaction/fungibleAssetTransaction';
import { TransactionType } from '@bitgo/sdk-core';
import { Transaction } from '../transaction/transaction';
import utils from '../utils';
import { TransactionPayload, TransactionPayloadEntryFunction } from '@aptos-labs/ts-sdk';
import { NonFungibleAssetTransaction } from '../transaction/nonFungibleAssetTransaction';
import { DigitalAssetTransaction } from '../transaction/digitalAssetTransaction';

export class NonFungibleAssetTransactionBuilder extends TransactionBuilder {
export class DigitalAssetTransactionBuilder extends TransactionBuilder {
constructor(_coinConfig: Readonly<CoinConfig>) {
super(_coinConfig);
this._transaction = new NonFungibleAssetTransaction(_coinConfig);
this._transaction = new DigitalAssetTransaction(_coinConfig);
}

protected get transactionType(): TransactionType {
Expand All @@ -24,12 +23,12 @@ export class NonFungibleAssetTransactionBuilder extends TransactionBuilder {
}

/** @inheritdoc */
initBuilder(tx: FungibleAssetTransaction): void {
initBuilder(tx: DigitalAssetTransaction): void {
this._transaction = tx;
}

/** @inheritdoc */
validateTransaction(transaction?: FungibleAssetTransaction): void {
validateTransaction(transaction?: DigitalAssetTransaction): void {
if (!transaction) {
throw new Error('transaction not defined');
}
Expand All @@ -45,9 +44,9 @@ export class NonFungibleAssetTransactionBuilder extends TransactionBuilder {
return false;
}
const entryFunction = payload.entryFunction;
const nonFungibleAssetAddress = entryFunction.args[0].toString();
const digitalAssetAddress = entryFunction.args[0].toString();
const recipientAddress = entryFunction.args[1].toString();
return utils.isValidAddress(recipientAddress) && utils.isValidAddress(nonFungibleAssetAddress);
return utils.isValidAddress(recipientAddress) && utils.isValidAddress(digitalAssetAddress);
} catch (e) {
console.error('invalid transaction payload', e);
return false;
Expand Down
14 changes: 7 additions & 7 deletions modules/sdk-coin-apt/src/lib/transactionBuilderFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import { TransferTransaction } from './transaction/transferTransaction';
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import { FungibleAssetTransaction } from './transaction/fungibleAssetTransaction';
import { FungibleAssetTransactionBuilder } from './transactionBuilder/fungibleAssetTransactionBuilder';
import { NonFungibleAssetTransaction } from './transaction/nonFungibleAssetTransaction';
import { NonFungibleAssetTransactionBuilder } from './transactionBuilder/nonFungibleAssetTransactionBuilder';
import { DigitalAssetTransaction } from './transaction/digitalAssetTransaction';
import { DigitalAssetTransactionBuilder } from './transactionBuilder/digitalAssestTransactionBuilder';

export class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
constructor(_coinConfig: Readonly<CoinConfig>) {
Expand All @@ -31,9 +31,9 @@ export class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
fungibleTransferTokenTx.fromDeserializedSignedTransaction(signedTxn);
return this.getFungibleAssetTransactionBuilder(fungibleTransferTokenTx);
case TransactionType.SendNFT:
const nonFungibleTransferTokenTx = new NonFungibleAssetTransaction(this._coinConfig);
nonFungibleTransferTokenTx.fromDeserializedSignedTransaction(signedTxn);
return this.getNonFungibleAssetTransactionBuilder(nonFungibleTransferTokenTx);
const digitalAssetTransferTx = new DigitalAssetTransaction(this._coinConfig);
digitalAssetTransferTx.fromDeserializedSignedTransaction(signedTxn);
return this.getDigitalAssetTransactionBuilder(digitalAssetTransferTx);
default:
throw new InvalidTransactionError('Invalid transaction');
}
Expand All @@ -58,8 +58,8 @@ export class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
}

/** @inheritdoc */
getNonFungibleAssetTransactionBuilder(tx?: Transaction): NonFungibleAssetTransactionBuilder {
return this.initializeBuilder(tx, new NonFungibleAssetTransactionBuilder(this._coinConfig));
getDigitalAssetTransactionBuilder(tx?: Transaction): DigitalAssetTransactionBuilder {
return this.initializeBuilder(tx, new DigitalAssetTransactionBuilder(this._coinConfig));
}

/** @inheritdoc */
Expand Down
4 changes: 2 additions & 2 deletions modules/sdk-coin-apt/src/lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import {
APT_SIGNATURE_LENGTH,
APT_TRANSACTION_ID_LENGTH,
APTOS_COIN,
DIGITAL_ASSET,
FUNGIBLE_ASSET,
NON_FUNGIBLE_ASSET,
} from './constants';
import BigNumber from 'bignumber.js';

Expand Down Expand Up @@ -82,7 +82,7 @@ export class Utils implements BaseUtils {
return TransactionType.Send;
case FUNGIBLE_ASSET:
return TransactionType.SendToken;
case NON_FUNGIBLE_ASSET:
case DIGITAL_ASSET:
return TransactionType.SendNFT;
default:
throw new InvalidTransactionError(`Invalid transaction: unable to fetch transaction type ${moduleIdentifier}`);
Expand Down
16 changes: 14 additions & 2 deletions modules/sdk-coin-apt/test/resources/apt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ export const fungibleTokenRecipients: Recipient[] = [
},
];

export const digitalTokenRecipients: Recipient[] = [
{
address: addresses.validAddresses[0],
amount: '1',
},
];

export const invalidRecipients: Recipient[] = [
{
address: addresses.invalidAddresses[0],
Expand All @@ -67,14 +74,19 @@ export const TRANSFER =
export const CHANGED_FUNCTION_TRANSFER =
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a37244992000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d0300000000006400000000000000979390670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f6614644240caeb90efd4b7ecd922c97bb3163e6a9de1fbb2ee0fc0d56af484f4af9b0015c5831341550af29b3686713b6657c821d894635fe13c7933f06ee043728f040b090000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff4013e7e8a1325ee5f656c93baa3d0206a1d9bd6da5abdc6f5d9b8bbbb0926ddac68f3e57a915dd217d2d43e776a6cc01af72f895ea712acc836d30349f29a3c606';

export const FUNGIBLE_TOKEN_TRANSFER =
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449a700000000000000020000000000000000000000000000000000000000000000000000000000000001167072696d6172795f66756e6769626c655f73746f7265087472616e73666572010700000000000000000000000000000000000000000000000000000000000000010e66756e6769626c655f6173736574084d65746164617461000320d5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e3819205020f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9080100000000000000400d0300000000006400000000000000e42696670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f661464424029665cd4c94658a0d83907bbed7e761794b25bccc03fc87e6dd63a543accdddfd7a6f1e7a15e8681547ca437ff99b58c92f816e35a0f333d7f1fd1330c21ad0a0000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff40de7b0bb86ca346031942e9cf21ff9604c7c08c2c662e38a0afe3dd640512c0441396c0697cd8bbbcf39694d6f88e35f6bed9fb34bd209b0479b5e8bd0cf3eb0b';

export const DIGITAL_ASSET_TRANSFER =
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449ab00000000000000020000000000000000000000000000000000000000000000000000000000000001066f626a656374087472616e736665720107000000000000000000000000000000000000000000000000000000000000000405746f6b656e05546f6b656e0002202e356062777469d39ca5d9b72512ce2d5713d7938ed6ca9193d4fc2016a819fd20f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9400d0300000000006400000000000000526798670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f66146442400c2c31eae495d22d1d31031b9756e8238a3df6e760515aa3e1108d93b3aec6aeb91684307e8365ad9dc44c0b5957e95a21a6f47d8d4a6e0eb3b145fb3d517f030000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff40dd6c064e44642819dec2f63d32d6daa4f889d62d06025ad99b42562c4c6cdef8b1437739115d7f38050078829efb9dd05528f53309bcab5b89fadb283423100d';

export const INVALID_TRANSFER =
'AAAAAAAAAAAAA6e7361637469bc4a58e500b9e64cb6547ee9b403000000000000002064ba1fb2f2fbd2938a350015d601f4db89cd7e8e2370d0dd9ae3ac4f635c1581111b8a49f67370bc4a58e500b9e64cb6462e39b802000000000000002064ba1fb2f2fbd2938a350015d601f4db89cd7e8e2370d0dd9ae3ac47aa1ff81f01c4173a804406a365e69dfb297d4eaaf002546ebd016400000000000000cba4a48bb0f8b586c167e5dcefaa1c5e96ab3f0836d6ca08f2081732944d1e5b6b406a4a462e39b8030000000000000020b9490ede63215262c434e03f606d9799f3ba704523ceda184b386d47aa1ff81f01000000000000006400000000000000';

export const fungibleTokenAddress = {
usdt: '0xd5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e38192050',
};

export const FUNGIBLE_TOKEN_TRANSFER =
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449a700000000000000020000000000000000000000000000000000000000000000000000000000000001167072696d6172795f66756e6769626c655f73746f7265087472616e73666572010700000000000000000000000000000000000000000000000000000000000000010e66756e6769626c655f6173736574084d65746164617461000320d5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e3819205020f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9080100000000000000400d0300000000006400000000000000e42696670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f661464424029665cd4c94658a0d83907bbed7e761794b25bccc03fc87e6dd63a543accdddfd7a6f1e7a15e8681547ca437ff99b58c92f816e35a0f333d7f1fd1330c21ad0a0000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff40de7b0bb86ca346031942e9cf21ff9604c7c08c2c662e38a0afe3dd640512c0441396c0697cd8bbbcf39694d6f88e35f6bed9fb34bd209b0479b5e8bd0cf3eb0b';
export const digitalAssetAddress = '0x2e356062777469d39ca5d9b72512ce2d5713d7938ed6ca9193d4fc2016a819fd';

export const LEGACY_COIN_ASSEST = '0x4fb379c10c763a13e724064ecfb7d946690bea519ba982c81b518d1c11dd23fe::fa_test::Coinz';
Loading

0 comments on commit 42b6792

Please sign in to comment.