PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-apt/src/lib/transaction
Просмотр файла: digitalAssetTransfer.ts
import { Transaction } from './transaction';
import {
AccountAddress,
EntryFunctionABI,
InputGenerateTransactionPayloadData,
MoveAbility,
objectStructTag,
TransactionPayload,
TransactionPayloadEntryFunction,
TypeTagAddress,
TypeTagGeneric,
TypeTagStruct,
} from '@aptos-labs/ts-sdk';
import { InvalidTransactionError, TransactionRecipient, TransactionType } from '@bitgo/sdk-core';
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import {
DIGITAL_ASSET_TYPE_ARGUMENT,
DIGITAL_ASSET_TRANSFER_FUNCTION,
DIGITAL_ASSET_TRANSFER_AMOUNT,
} from '../constants';
export class DigitalAssetTransfer extends Transaction {
constructor(coinConfig: Readonly<CoinConfig>) {
super(coinConfig);
this._type = TransactionType.SendNFT;
}
protected parseTransactionPayload(payload: TransactionPayload): void {
if (
!(payload instanceof TransactionPayloadEntryFunction) ||
payload.entryFunction.args.length !== 2 ||
payload.entryFunction.type_args.length !== 1 ||
DIGITAL_ASSET_TYPE_ARGUMENT !== payload.entryFunction.type_args[0].toString()
) {
throw new InvalidTransactionError('Invalid transaction payload');
}
const entryFunction = payload.entryFunction;
this._assetId = entryFunction.args[0].toString();
this.recipients = [
{
address: entryFunction.args[1].toString(),
amount: DIGITAL_ASSET_TRANSFER_AMOUNT,
},
] as TransactionRecipient[];
}
protected getTransactionPayloadData(): InputGenerateTransactionPayloadData {
const recipientAddress = AccountAddress.fromString(this.recipients[0].address);
const digitalAssetAddress = AccountAddress.fromString(this._assetId);
return {
function: DIGITAL_ASSET_TRANSFER_FUNCTION,
typeArguments: [DIGITAL_ASSET_TYPE_ARGUMENT],
functionArguments: [digitalAssetAddress, recipientAddress],
abi: this.transferDigitalAssetAbi,
};
}
private transferDigitalAssetAbi: EntryFunctionABI = {
typeParameters: [{ constraints: [MoveAbility.KEY] }],
parameters: [new TypeTagStruct(objectStructTag(new TypeTagGeneric(0))), new TypeTagAddress()],
};
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!