diff --git a/modules/sdk-coin-vet/src/lib/transaction/burnNftTransaction.ts b/modules/sdk-coin-vet/src/lib/transaction/burnNftTransaction.ts index 5a7004b125..f45d1c565d 100644 --- a/modules/sdk-coin-vet/src/lib/transaction/burnNftTransaction.ts +++ b/modules/sdk-coin-vet/src/lib/transaction/burnNftTransaction.ts @@ -47,6 +47,13 @@ export class BurnNftTransaction extends Transaction { data: this._transactionData || this.getBurnNftData(), }, ]; + + this._recipients = [ + { + address: this._contract, + amount: '0', + }, + ]; } /** @@ -115,12 +122,13 @@ export class BurnNftTransaction extends Transaction { if (this.transactionData.startsWith(BURN_NFT_METHOD_ID)) { this.tokenId = utils.decodeBurnNftData(this.transactionData); } - // Set sender address if (signedTx.signature && signedTx.origin) { this.sender = signedTx.origin.toString().toLowerCase(); } + this.loadInputsAndOutputs(); + // Set signatures if present if (signedTx.signature) { // First signature is sender's signature diff --git a/modules/sdk-coin-vet/src/lib/transaction/exitDelegation.ts b/modules/sdk-coin-vet/src/lib/transaction/exitDelegation.ts index 740c4eab25..13a4fe5e0c 100644 --- a/modules/sdk-coin-vet/src/lib/transaction/exitDelegation.ts +++ b/modules/sdk-coin-vet/src/lib/transaction/exitDelegation.ts @@ -7,6 +7,7 @@ import { EXIT_DELEGATION_METHOD_ID } from '../constants'; import EthereumAbi from 'ethereumjs-abi'; import { addHexPrefix } from 'ethereumjs-util'; import utils from '../utils'; +import BigNumber from 'bignumber.js'; export class ExitDelegationTransaction extends Transaction { private _tokenId: string; @@ -47,6 +48,13 @@ export class ExitDelegationTransaction extends Transaction { data: this._transactionData || this.getExitDelegationData(), }, ]; + + this._recipients = [ + { + address: this._contract, + amount: '0', + }, + ]; } /** @@ -115,12 +123,18 @@ export class ExitDelegationTransaction extends Transaction { if (this.transactionData.startsWith(EXIT_DELEGATION_METHOD_ID)) { this.tokenId = utils.decodeExitDelegationData(this.transactionData); } + this.recipients = body.clauses.map((clause) => ({ + address: (clause.to || '0x0').toString().toLowerCase(), + amount: new BigNumber(clause.value || 0).toString(), + })); // Set sender address if (signedTx.signature && signedTx.origin) { this.sender = signedTx.origin.toString().toLowerCase(); } + this.loadInputsAndOutputs(); + // Set signatures if present if (signedTx.signature) { // First signature is sender's signature diff --git a/modules/sdk-coin-vet/test/transactionBuilder/burnNftBuilder.ts b/modules/sdk-coin-vet/test/transactionBuilder/burnNftBuilder.ts index 585a6f2d34..29ef361039 100644 --- a/modules/sdk-coin-vet/test/transactionBuilder/burnNftBuilder.ts +++ b/modules/sdk-coin-vet/test/transactionBuilder/burnNftBuilder.ts @@ -33,13 +33,27 @@ describe('Vet Burn NFT Transaction', () => { should.equal(tx.expiration, 64); should.equal(tx.type, TransactionType.StakingWithdraw); - // Verify the transaction data contains the correct method ID + // Verify the transaction data contains the correct method ID and tokenId tx.clauses[0].data.should.startWith(BURN_NFT_METHOD_ID); // Verify the transaction has the correct structure tx.clauses.length.should.equal(1); - should.equal(tx.clauses[0].to, STARGATE_NFT_ADDRESS_TESTNET); - should.equal(tx.clauses[0].value, '0x0'); + should.exist(tx.clauses[0]); + should.exist(tx.clauses[0].to); + tx.clauses[0]?.to?.should.equal(STARGATE_NFT_ADDRESS_TESTNET); + should.exist(tx.clauses[0].value); + tx.clauses[0].value.should.equal('0x0'); + + tx.inputs.length.should.equal(1); + tx.outputs.length.should.equal(1); + + should.equal(tx.inputs[0].address, testData.addresses.validAddresses[0]); + should.equal(tx.inputs[0].value, '0'); + should.equal(tx.inputs[0].coin, 'tvet'); + + should.equal(tx.outputs[0].address, STARGATE_NFT_ADDRESS_TESTNET); + should.equal(tx.outputs[0].value, '0'); + should.equal(tx.outputs[0].coin, 'tvet'); }); it('should build a burn NFT transaction with custom contract address', async function () { @@ -59,7 +73,9 @@ describe('Vet Burn NFT Transaction', () => { const tx = (await txBuilder.build()) as BurnNftTransaction; should.equal(tx.contract, customContractAddress); - should.equal(tx.clauses[0].to, customContractAddress); + should.exist(tx.clauses[0]); + should.exist(tx.clauses[0].to); + tx.clauses[0]?.to?.should.equal(customContractAddress); }); it('should deserialize and reserialize a signed burn NFT transaction', async function () { diff --git a/modules/sdk-coin-vet/test/transactionBuilder/exitDelegationBuilder.ts b/modules/sdk-coin-vet/test/transactionBuilder/exitDelegationBuilder.ts index 89a09db12d..e5ff87d353 100644 --- a/modules/sdk-coin-vet/test/transactionBuilder/exitDelegationBuilder.ts +++ b/modules/sdk-coin-vet/test/transactionBuilder/exitDelegationBuilder.ts @@ -43,6 +43,17 @@ describe('Vet Exit Delegation Transaction', () => { tx.clauses[0]?.to?.should.equal(STARGATE_DELEGATION_ADDRESS_TESTNET); should.exist(tx.clauses[0].value); tx.clauses[0].value.should.equal('0x0'); + + tx.inputs.length.should.equal(1); + tx.outputs.length.should.equal(1); + + should.equal(tx.inputs[0].address, testData.addresses.validAddresses[0]); + should.equal(tx.inputs[0].value, '0'); + should.equal(tx.inputs[0].coin, 'tvet'); + + should.equal(tx.outputs[0].address, STARGATE_DELEGATION_ADDRESS_TESTNET); + should.equal(tx.outputs[0].value, '0'); + should.equal(tx.outputs[0].coin, 'tvet'); }); it('should build an exit delegation transaction with custom contract address', async function () {