Skip to content

Commit

Permalink
feat(sdk-coin-apt): code improvement
Browse files Browse the repository at this point in the history
TICKET: COIN-2914
  • Loading branch information
baltiyal committed Jan 28, 2025
1 parent 8049b14 commit 84fca2c
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 4 deletions.
2 changes: 2 additions & 0 deletions modules/sdk-coin-apt/src/lib/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ export const APTOS_ACCOUNT_MODULE = 'aptos_account';
export const FUNGIBLE_ASSET_MODULE = 'primary_fungible_store';

export const FUNGIBLE_ASSET_FUNCTION = '0x1::primary_fungible_store::transfer';
export const APTOS_COIN_FUNCTION = '0x1::aptos_account::transfer_coins';

export const FUNGIBLE_ASSET = '0x1::fungible_asset::Metadata';
export const APTOS_COIN = '0x1::aptos_coin::AptosCoin';
14 changes: 10 additions & 4 deletions modules/sdk-coin-apt/src/lib/transaction/transferTransaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,28 @@ import {
} from '@aptos-labs/ts-sdk';

import { BaseCoin as CoinConfig, NetworkType } from '@bitgo/statics';
import { APTOS_COIN, APTOS_COIN_FUNCTION } from '../constants';

export class TransferTransaction extends Transaction {
constructor(coinConfig: Readonly<CoinConfig>) {
super(coinConfig);
this._type = TransactionType.Send;
this._assetId = APTOS_COIN;
}

protected parseTransactionPayload(payload: TransactionPayload): void {
if (!(payload instanceof TransactionPayloadEntryFunction)) {
if (
!(payload instanceof TransactionPayloadEntryFunction) ||
!payload.entryFunction.type_args[0] ||
payload.entryFunction.type_args[0].toString().length === 0
) {
throw new InvalidTransactionError('Invalid transaction payload');
}
const entryFunction = payload.entryFunction;
if (!this._recipient) {
this._recipient = {} as TransactionRecipient;
}
this._assetId = entryFunction.type_args[0].toString();
this._recipient.address = entryFunction.args[0].toString();
const amountBuffer = Buffer.from(entryFunction.args[1].bcsToBytes());
this._recipient.amount = amountBuffer.readBigUint64LE().toString();
Expand All @@ -35,12 +42,11 @@ export class TransferTransaction extends Transaction {
const aptos = new Aptos(new AptosConfig({ network }));
const senderAddress = AccountAddress.fromString(this._sender);
const recipientAddress = AccountAddress.fromString(this._recipient.address);
const typeArgs = this.assetId ? [this.assetId] : ['0x1::aptos_coin::AptosCoin'];
const simpleTxn = await aptos.transaction.build.simple({
sender: senderAddress,
data: {
function: '0x1::aptos_account::transfer_coins',
typeArguments: typeArgs,
function: APTOS_COIN_FUNCTION,
typeArguments: [this.assetId],
functionArguments: [recipientAddress, this.recipient.amount],
},
options: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ export class TransferBuilder extends TransactionBuilder {
return TransactionType.Send;
}

assetId(assetId: string): TransactionBuilder {
this.transaction.assetId = assetId;
return this;
}

/** @inheritdoc */
validateTransaction(transaction?: TransferTransaction): void {
if (!transaction) {
Expand Down

0 comments on commit 84fca2c

Please sign in to comment.