diff --git a/packages/@core-js/src/service/contractService.ts b/packages/@core-js/src/service/contractService.ts index dd1d47ea0..b9522cdf5 100644 --- a/packages/@core-js/src/service/contractService.ts +++ b/packages/@core-js/src/service/contractService.ts @@ -11,6 +11,7 @@ import nacl from 'tweetnacl'; export enum OpCodes { JETTON_TRANSFER = 0xf8a7ea5, NFT_TRANSFER = 0x5fcc3d14, + STONFI_SWAP = 0x25938561, } export enum WalletVersion { diff --git a/packages/@core-js/src/service/transactionService.ts b/packages/@core-js/src/service/transactionService.ts index 5aeb27bdb..5ee4dbdc3 100644 --- a/packages/@core-js/src/service/transactionService.ts +++ b/packages/@core-js/src/service/transactionService.ts @@ -104,6 +104,21 @@ export class TransactionService { let builder = beginCell(); switch (opCode) { + case OpCodes.STONFI_SWAP: + builder = builder + .storeUint(OpCodes.STONFI_SWAP, 32) + .storeAddress(slice.loadAddress()) + .storeCoins(slice.loadCoins()) + .storeAddress(slice.loadAddress()); + + if (slice.loadBoolean()) { + slice.loadAddress(); + } + + return builder + .storeBit(1) + .storeAddress(Address.parse(customExcessesAccount)) + .endCell(); case OpCodes.NFT_TRANSFER: builder = builder .storeUint(OpCodes.NFT_TRANSFER, 32) @@ -130,7 +145,11 @@ export class TransactionService { slice.loadMaybeAddress(); while (slice.remainingRefs) { - builder = builder.storeRef(slice.loadRef()); + const forwardCell = slice.loadRef(); + // recursively rebuild forward payloads + builder = builder.storeRef( + this.rebuildBodyWithCustomExcessesAccount(forwardCell, customExcessesAccount), + ); } return builder