Skip to content

Commit 13f874c

Browse files
authored
Merge pull request #6837 from BitGo/coin-5449
fix: return raw data for vet nft transaction
2 parents e52226b + 92f0145 commit 13f874c

File tree

6 files changed

+45
-16
lines changed

6 files changed

+45
-16
lines changed

modules/sdk-coin-vet/src/vet.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ import {
1616
ParsedTransaction,
1717
SignedTransaction,
1818
SignTransactionOptions,
19+
TokenTransferRecipientParams,
1920
VerifyAddressOptions,
2021
VerifyTransactionOptions,
22+
TokenType,
2123
} from '@bitgo/sdk-core';
2224
import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics';
2325
import utils from './lib/utils';
@@ -245,18 +247,26 @@ export class Vet extends BaseCoin {
245247
} as unknown as Hash;
246248
}
247249

248-
buildNftTransferData(params: BuildNftTransferDataOptions): string {
249-
const { recipientAddress, fromAddress } = params;
250+
buildNftTransferData(params: BuildNftTransferDataOptions): TokenTransferRecipientParams {
251+
const { recipientAddress, fromAddress, tokenContractAddress } = params;
250252
if (!utils.isValidAddress(recipientAddress)) {
251253
throw new InvalidAddressError('Invalid recipient address');
252254
}
253255
if (!utils.isValidAddress(fromAddress)) {
254256
throw new InvalidAddressError('Invalid from address');
255257
}
258+
if (!utils.isValidAddress(tokenContractAddress)) {
259+
throw new InvalidAddressError('Invalid NFT contract address address');
260+
}
256261
switch (params.type) {
257262
case 'ERC721': {
258263
const tokenId = params.tokenId;
259-
return utils.getTransferNFTData(fromAddress, recipientAddress, tokenId);
264+
return {
265+
tokenType: TokenType.ERC721,
266+
tokenQuantity: '1', // This NFT standard will always have quantity of 1
267+
tokenContractAddress,
268+
tokenId,
269+
};
260270
}
261271
default:
262272
throw new NotImplementedError(`NFT type ${params.type} not supported on ${this.getChain()}`);

modules/sdk-coin-vet/test/unit/vet.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,12 @@ describe('Vechain', function () {
119119
tokenId: '1234',
120120
tokenContractAddress: testData.NFT_CONTRACT_ADDRESS,
121121
});
122-
data.should.equal(testData.VALID_NFT_CONTRACT_DATA);
122+
data.should.deepEqual({
123+
tokenType: 'ERC721',
124+
tokenQuantity: '1',
125+
tokenContractAddress: '0x1ec1d168574603ec35b9d229843b7c2b44bcb770',
126+
tokenId: '1234',
127+
});
123128
});
124129

125130
it('should build throw invalid address error', function () {

modules/sdk-core/src/bitgo/baseCoin/baseCoin.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,13 @@ import {
4949
AuditDecryptedKeyParams,
5050
} from './iBaseCoin';
5151
import { IInscriptionBuilder } from '../inscriptionBuilder';
52-
import { MPCSweepRecoveryOptions, MPCTxs, PopulatedIntent, PrebuildTransactionWithIntentOptions } from '../utils';
52+
import {
53+
MPCSweepRecoveryOptions,
54+
MPCTxs,
55+
PopulatedIntent,
56+
PrebuildTransactionWithIntentOptions,
57+
TokenTransferRecipientParams,
58+
} from '../utils';
5359

5460
export abstract class BaseCoin implements IBaseCoin {
5561
protected readonly bitgo: BitGoBase;
@@ -586,7 +592,7 @@ export abstract class BaseCoin implements IBaseCoin {
586592
throw new NotImplementedError('getHashFunction is not supported for this coin');
587593
}
588594

589-
buildNftTransferData(params: BuildNftTransferDataOptions): string {
595+
buildNftTransferData(params: BuildNftTransferDataOptions): string | TokenTransferRecipientParams {
590596
throw new NotImplementedError('buildNftTransferData is not supported for this coin');
591597
}
592598

modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { IWebhooks } from '../webhook/iWebhooks';
1414
import { TransactionType } from '../../account-lib';
1515
import { IInscriptionBuilder } from '../inscriptionBuilder';
1616
import { Hash } from 'crypto';
17-
import { MessageStandardType, MPCTx, PopulatedIntent, TokenType } from '../utils';
17+
import { MessageStandardType, MPCTx, PopulatedIntent, TokenTransferRecipientParams, TokenType } from '../utils';
1818

1919
export const multisigTypes = {
2020
onchain: 'onchain',
@@ -574,7 +574,7 @@ export interface IBaseCoin {
574574
* @param params Options specifying the token contract, token recipient & the token(s) to be transferred
575575
* @return the hex string for the contract call.
576576
*/
577-
buildNftTransferData(params: BuildNftTransferDataOptions): string;
577+
buildNftTransferData(params: BuildNftTransferDataOptions): string | TokenTransferRecipientParams;
578578
getHashFunction(): Hash;
579579
broadcastTransaction(params: BaseBroadcastTransactionOptions): Promise<BaseBroadcastTransactionResult>;
580580
setCoinSpecificFieldsInIntent(intent: PopulatedIntent, params: PrebuildTransactionWithIntentOptions): void;

modules/sdk-core/src/bitgo/wallet/iWallet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ export interface SendManyOptions extends PrebuildAndSignTransactionOptions {
671671
address: string;
672672
amount: string | number;
673673
feeLimit?: string;
674-
data?: string;
674+
data?: string | TokenTransferRecipientParams;
675675
tokenName?: string;
676676
tokenData?: TokenTransferRecipientParams;
677677
}[];

modules/sdk-core/src/bitgo/wallet/wallet.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2537,15 +2537,23 @@ export class Wallet implements IWallet {
25372537
}
25382538

25392539
const data = this.baseCoin.buildNftTransferData({ ...sendNftOptions, fromAddress: baseAddress });
2540+
let recipient;
2541+
if (this.baseCoin.getFamily() === 'vet') {
2542+
recipient = {
2543+
address: recipientAddress,
2544+
amount: '1',
2545+
tokenData: data,
2546+
};
2547+
} else {
2548+
recipient = {
2549+
address: sendNftOptions.tokenContractAddress,
2550+
amount: '0',
2551+
data,
2552+
};
2553+
}
25402554
return this.sendMany({
25412555
...sendOptions,
2542-
recipients: [
2543-
{
2544-
address: sendNftOptions.tokenContractAddress,
2545-
amount: '0',
2546-
data: data,
2547-
},
2548-
],
2556+
recipients: [recipient],
25492557
});
25502558
}
25512559
case 'ERC1155': {

0 commit comments

Comments
 (0)