Skip to content

Commit 6ac02ac

Browse files
committed
feat: add sdk changes for mpc tss support for TRON
TICKET: CHALO-33
1 parent e1378ac commit 6ac02ac

File tree

7 files changed

+280
-8
lines changed

7 files changed

+280
-8
lines changed

modules/sdk-coin-trx/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
},
4848
"dependencies": {
4949
"@bitgo/sdk-core": "^36.33.2",
50+
"@bitgo/sdk-lib-mpc": "^10.9.0",
5051
"@bitgo/secp256k1": "^1.10.0",
5152
"@bitgo/statics": "^58.29.0",
5253
"@stablelib/hex": "^1.0.0",

modules/sdk-coin-trx/src/lib/transaction.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,14 @@ export class Transaction extends BaseTransaction {
318318
return this._inputs;
319319
}
320320

321+
/** @inheritDoc */
322+
get signablePayload(): Buffer {
323+
if (!this._transaction) {
324+
throw new ParseTransactionError('Empty transaction');
325+
}
326+
return Buffer.from(this._transaction.raw_data_hex, 'hex');
327+
}
328+
321329
/** @inheritdoc */
322330
canSign(key: BaseKey): boolean {
323331
// Tron transaction do not contain the owners account address so it is not possible to check the

modules/sdk-coin-trx/src/lib/transactionBuilder.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
BuildTransactionError,
99
InvalidTransactionError,
1010
ParseTransactionError,
11+
PublicKey as BasePublicKey,
1112
SigningError,
1213
ExtendTransactionError,
1314
InvalidParameterValueError,
@@ -36,6 +37,8 @@ export class TransactionBuilder extends BaseTransactionBuilder {
3637
protected _refBlockHash: string;
3738
protected _expiration: number;
3839
protected _timestamp: number;
40+
protected _signature?: Buffer;
41+
protected _signaturePublicKey?: string;
3942

4043
/**
4144
* Public constructor.
@@ -162,12 +165,29 @@ export class TransactionBuilder extends BaseTransactionBuilder {
162165
return new Transaction(this._coinConfig, signedTransaction);
163166
}
164167

168+
/** @inheritDoc */
169+
addSignature(publicKey: BasePublicKey, signature: Buffer): void {
170+
this._signature = signature;
171+
this._signaturePublicKey = publicKey.pub;
172+
}
173+
165174
/** @inheritdoc */
166175
protected async buildImplementation(): Promise<Transaction> {
167-
// This is a no-op since Tron transactions are built from
168176
if (!this.transaction.id) {
169177
throw new BuildTransactionError('A valid transaction must have an id');
170178
}
179+
180+
if (this._signature) {
181+
const txJson = this.transaction.toJson();
182+
const signatures = txJson.signature ? [...txJson.signature] : [];
183+
signatures.push(this._signature.toString('hex'));
184+
const updatedReceipt: TransactionReceipt = {
185+
...txJson,
186+
signature: signatures,
187+
};
188+
return new Transaction(this._coinConfig, updatedReceipt);
189+
}
190+
171191
return Promise.resolve(this.transaction);
172192
}
173193

modules/sdk-coin-trx/src/lib/wrappedBuilder.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import BigNumber from 'bignumber.js';
22
import { BaseCoin as CoinConfig } from '@bitgo/statics';
3-
import { BaseKey, BaseTransaction, InvalidTransactionError } from '@bitgo/sdk-core';
3+
import { BaseKey, BaseTransaction, InvalidTransactionError, PublicKey as BasePublicKey } from '@bitgo/sdk-core';
44
import { Transaction } from './transaction';
55
import { Address } from './address';
66
import { TransactionBuilder } from './transactionBuilder';
@@ -137,6 +137,11 @@ export class WrappedBuilder extends TransactionBuilder {
137137
this._builder.sign(key);
138138
}
139139

140+
/** @inheritDoc */
141+
addSignature(publicKey: BasePublicKey, signature: Buffer): void {
142+
this._builder.addSignature(publicKey, signature);
143+
}
144+
140145
/** @inheritdoc */
141146
async build(): Promise<BaseTransaction> {
142147
return this._builder.build();

0 commit comments

Comments
 (0)