diff --git a/framework/src/modules/nft/cc_commands/cc_transfer.ts b/framework/src/modules/nft/cc_commands/cc_transfer.ts index 74c06e9efb..3213c30fbb 100644 --- a/framework/src/modules/nft/cc_commands/cc_transfer.ts +++ b/framework/src/modules/nft/cc_commands/cc_transfer.ts @@ -131,13 +131,16 @@ export class CrossChainTransferCommand extends BaseCCCommand { senderAddress, recipientAddress, nftID, + receivingChainID: ccm.receivingChainID, + sendingChainID: ccm.sendingChainID, }, NftEventResult.RESULT_NFT_NOT_SUPPORTED, ); throw new Error('Non-supported NFT'); } + this._feeMethod.payFee(getMethodContext(), BigInt(FEE_CREATE_NFT)); + if (status === CCM_STATUS_CODE_OK) { - this._feeMethod.payFee(getMethodContext(), BigInt(FEE_CREATE_NFT)); await nftStore.save(getMethodContext(), nftID, { owner: recipientAddress, attributesArray: receivedAttributes as NFTAttributes[], @@ -157,6 +160,8 @@ export class CrossChainTransferCommand extends BaseCCCommand { senderAddress, recipientAddress, nftID, + receivingChainID: ccm.receivingChainID, + sendingChainID: ccm.sendingChainID, }); } } diff --git a/framework/src/modules/nft/events/ccm_transfer.ts b/framework/src/modules/nft/events/ccm_transfer.ts index 990f267885..be4e36df18 100644 --- a/framework/src/modules/nft/events/ccm_transfer.ts +++ b/framework/src/modules/nft/events/ccm_transfer.ts @@ -13,18 +13,27 @@ */ import { BaseEvent, EventQueuer } from '../../base_event'; -import { LENGTH_NFT_ID, NftEventResult } from '../constants'; +import { LENGTH_CHAIN_ID, LENGTH_NFT_ID, NftEventResult } from '../constants'; export interface CCMTransferEventData { senderAddress: Buffer; recipientAddress: Buffer; nftID: Buffer; + receivingChainID: Buffer; + sendingChainID: Buffer; } export const ccmTransferEventSchema = { $id: '/nft/events/ccmTransfer', type: 'object', - required: ['senderAddress', 'recipientAddress', 'nftID', 'result'], + required: [ + 'senderAddress', + 'recipientAddress', + 'nftID', + 'receivingChainID', + 'sendingChainID', + 'result', + ], properties: { senderAddress: { dataType: 'bytes', @@ -42,9 +51,21 @@ export const ccmTransferEventSchema = { maxLength: LENGTH_NFT_ID, fieldNumber: 3, }, + receivingChainID: { + dataType: 'bytes', + minLength: LENGTH_CHAIN_ID, + maxLength: LENGTH_CHAIN_ID, + fieldNumber: 4, + }, + sendingChainID: { + dataType: 'bytes', + minLength: LENGTH_CHAIN_ID, + maxLength: LENGTH_CHAIN_ID, + fieldNumber: 5, + }, result: { dataType: 'uint32', - fieldNumber: 4, + fieldNumber: 6, }, }, }; diff --git a/framework/test/unit/modules/nft/cc_comands/cc_transfer.spec.ts b/framework/test/unit/modules/nft/cc_comands/cc_transfer.spec.ts index a8b20e3144..ecfb6bc4e8 100644 --- a/framework/test/unit/modules/nft/cc_comands/cc_transfer.spec.ts +++ b/framework/test/unit/modules/nft/cc_comands/cc_transfer.spec.ts @@ -415,6 +415,8 @@ describe('CrossChain Transfer Command', () => { senderAddress, recipientAddress, nftID, + receivingChainID: ccm.receivingChainID, + sendingChainID: ccm.sendingChainID, }); }); @@ -465,6 +467,8 @@ describe('CrossChain Transfer Command', () => { senderAddress, recipientAddress: senderAddress, nftID, + receivingChainID: ccm.receivingChainID, + sendingChainID: ccm.sendingChainID, }); }); @@ -514,6 +518,8 @@ describe('CrossChain Transfer Command', () => { senderAddress, recipientAddress, nftID: newNftID, + receivingChainID: ccm.receivingChainID, + sendingChainID: ccm.sendingChainID, }, NftEventResult.RESULT_NFT_NOT_SUPPORTED, ); @@ -560,6 +566,8 @@ describe('CrossChain Transfer Command', () => { senderAddress, recipientAddress, nftID, + receivingChainID: ccm.receivingChainID, + sendingChainID: ccm.sendingChainID, }); }); @@ -610,7 +618,7 @@ describe('CrossChain Transfer Command', () => { methodContext, userStore.getKey(senderAddress, nftID), ); - expect(feeMethod.payFee).not.toHaveBeenCalled(); + expect(feeMethod.payFee).toHaveBeenCalledWith(methodContext, BigInt(FEE_CREATE_NFT)); expect(nftStoreData.owner).toStrictEqual(senderAddress); expect(nftStoreData.attributesArray).toEqual(attributesArray); expect(userAccountExistsForRecipient).toBe(false); @@ -619,6 +627,8 @@ describe('CrossChain Transfer Command', () => { senderAddress, recipientAddress: senderAddress, nftID, + receivingChainID: ccm.receivingChainID, + sendingChainID: ccm.sendingChainID, }); }); });