Skip to content

Commit 1781b47

Browse files
authored
Merge pull request #5777 from BitGo/COIN-3446
fix(sdk-coin-stx): from implementation issue for fungible token transfer builder
2 parents c5f35e0 + eb709cc commit 1781b47

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

modules/sdk-coin-stx/src/lib/fungibleTokenTransferBuilder.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import BigNum from 'bn.js';
1515
import { AbstractContractBuilder } from './abstractContractBuilder';
1616
import { Transaction } from './transaction';
1717
import {
18+
findContractTokenNameUsingContract,
1819
functionArgsToTokenTransferParams,
1920
getSTXAddressFromPubKeys,
2021
isValidAddress,
@@ -138,6 +139,12 @@ export class FungibleTokenTransferBuilder extends AbstractContractBuilder {
138139
* @returns {PostCondition[]} returns stx fungible post condition
139140
*/
140141
private tokenTransferParamsToPostCondition(tokenTransferParams: TokenTransferParams): PostCondition[] {
142+
if (!this._tokenName) {
143+
const contractTokenName = findContractTokenNameUsingContract(this._contractAddress, this._contractName);
144+
if (contractTokenName) {
145+
this.tokenName(contractTokenName);
146+
}
147+
}
141148
const amount: BigNum = new BigNum(tokenTransferParams.amount);
142149
return [
143150
makeStandardFungiblePostCondition(

modules/sdk-coin-stx/src/lib/utils.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,3 +551,19 @@ export function findTokenNameByContract(contractAddress: string, contractName: s
551551
return tokenName ? tokenName[0] : undefined;
552552
}
553553
}
554+
555+
/**
556+
* Function to get contractTokenName from list of sip10 tokens using contract details
557+
*
558+
* @param {String} contractAddress
559+
* @param {String} contractName
560+
* @returns {String|Undefined}
561+
*/
562+
export function findContractTokenNameUsingContract(contractAddress: string, contractName: string): string | undefined {
563+
{
564+
const sip10Token = coins
565+
.filter((coin) => coin instanceof Sip10Token && coin.assetId.includes(`${contractAddress}.${contractName}`))
566+
.map((coin) => coin as Sip10Token);
567+
return sip10Token ? sip10Token[0].assetId.split('::')[1] : undefined;
568+
}
569+
}

modules/sdk-coin-stx/test/fixtures.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export const txForExplainFungibleTokenTransfer =
3737
'808000000004012fe507c09dbb23c3b7e5d166c81fc4b87692510b000000000000000000000000000000b40000000302004f1813139aad38ac90ba905885ad4822bf33b7a56fff9127780c52359edee495587008204b0a7eaf39a0ba467b54a3e1896f863559349e5142f929cc4c706cd20201ae3fa80f2900c950667d827ed3b843afc94c63179dca70e6205f7d629a5f511a0ed45137c2baa16e33753c8e672dc61182869b6304fdea7daee42d8896f1a3fd00038e3c4529395611be9abf6fa3b6987e81d402385e3d605a073f42f407565a4a3d00020302000000010102152fe507c09dbb23c3b7e5d166c81fc4b87692510b1a1500a1c42f0c11bfe3893f479af18904677685be0d747369703664702d746f6b656e0d747369703664702d746f6b656e010000000000002710021a1500a1c42f0c11bfe3893f479af18904677685be0d747369703664702d746f6b656e087472616e73666572000000040100000000000000000000000000002710051a1500a1c42f0c11bfe3893f479af18904677685be0515ab50cac953ac55edc14e2b236854b1ead863fece020000000131';
3838

3939
export const fungibleTokenTransferTx = {
40-
id: 'b09ba559258dce27bf42526f7169969e70d694d4c8ecef2ce1abcdb3fb5f713c',
40+
id: '60f5c02136de2f2c01a24e25d7022bdf49ef28712a7ba6ac0bac9dd2215cdc59',
4141
fee: '180',
4242
contractAddress: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH',
4343
contractName: 'tsip6dp-token',

0 commit comments

Comments
 (0)