Skip to content

Commit 378d7fd

Browse files
authored
Merge pull request #5758 from BitGo/eric/SC-1335-babylon-CreateBtcDelegation
feat(sdk-coin-baby): add CreateBtcDelegation transaction
2 parents fed5e02 + 67c089a commit 378d7fd

27 files changed

+501
-105
lines changed

modules/abstract-cosmos/src/cosmosCoin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ interface CosmosCoinSpecific {
5959
rootAddress: string;
6060
}
6161

62-
export class CosmosCoin extends BaseCoin {
62+
export class CosmosCoin<CustomMessage = never> extends BaseCoin {
6363
protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
6464
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>) {
6565
super(bitgo);
@@ -223,7 +223,7 @@ export class CosmosCoin extends BaseCoin {
223223
txnBuilder.publicKey(publicKey);
224224
}
225225

226-
const unsignedTransaction = (await txnBuilder.build()) as CosmosTransaction;
226+
const unsignedTransaction = (await txnBuilder.build()) as CosmosTransaction<CustomMessage>;
227227
let serializedTx = unsignedTransaction.toBroadcastFormat();
228228
const signableHex = unsignedTransaction.signablePayload.toString('hex');
229229

@@ -334,7 +334,7 @@ export class CosmosCoin extends BaseCoin {
334334
.accountNumber(Number(accountNumber))
335335
.chainId(chainId);
336336

337-
const unsignedTransaction = (await txnBuilder.build()) as CosmosTransaction;
337+
const unsignedTransaction = (await txnBuilder.build()) as CosmosTransaction<CustomMessage>;
338338
let serializedTx = unsignedTransaction.toBroadcastFormat();
339339
const signableHex = unsignedTransaction.signablePayload.toString('hex');
340340
const message = unsignedTransaction.signablePayload;

modules/abstract-cosmos/src/lib/ContractCallBuilder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { ExecuteContractMessage } from './iface';
66
import { CosmosTransactionBuilder } from './transactionBuilder';
77
import { CosmosUtils } from './utils';
88

9-
export class ContractCallBuilder extends CosmosTransactionBuilder {
10-
protected _utils: CosmosUtils;
9+
export class ContractCallBuilder<CustomMessage = never> extends CosmosTransactionBuilder<CustomMessage> {
10+
protected _utils: CosmosUtils<CustomMessage>;
1111

12-
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils) {
12+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
1313
super(_coinConfig, utils);
1414
this._utils = utils;
1515
}

modules/abstract-cosmos/src/lib/StakingActivateBuilder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { DelegateOrUndelegeteMessage } from './iface';
66
import { CosmosTransactionBuilder } from './transactionBuilder';
77
import { CosmosUtils } from './utils';
88

9-
export class StakingActivateBuilder extends CosmosTransactionBuilder {
10-
protected _utils: CosmosUtils;
9+
export class StakingActivateBuilder<CustomMessage = never> extends CosmosTransactionBuilder<CustomMessage> {
10+
protected _utils: CosmosUtils<CustomMessage>;
1111

12-
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils) {
12+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
1313
super(_coinConfig, utils);
1414
this._utils = utils;
1515
}

modules/abstract-cosmos/src/lib/StakingDeactivateBuilder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { DelegateOrUndelegeteMessage } from './iface';
66
import { CosmosTransactionBuilder } from './transactionBuilder';
77
import { CosmosUtils } from './utils';
88

9-
export class StakingDeactivateBuilder extends CosmosTransactionBuilder {
10-
protected _utils: CosmosUtils;
9+
export class StakingDeactivateBuilder<CustomMessage = never> extends CosmosTransactionBuilder<CustomMessage> {
10+
protected _utils: CosmosUtils<CustomMessage>;
1111

12-
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils) {
12+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
1313
super(_coinConfig, utils);
1414
this._utils = utils;
1515
}

modules/abstract-cosmos/src/lib/StakingRedelegateBuilder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import { RedelegateMessage } from './iface';
55
import { CosmosTransactionBuilder } from './transactionBuilder';
66
import { CosmosUtils } from './utils';
77

8-
export class StakingRedelegateBuilder extends CosmosTransactionBuilder {
9-
protected _utils: CosmosUtils;
8+
export class StakingRedelegateBuilder<CustomMessage = never> extends CosmosTransactionBuilder<CustomMessage> {
9+
protected _utils: CosmosUtils<CustomMessage>;
1010

11-
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils) {
11+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
1212
super(_coinConfig, utils);
1313
this._utils = utils;
1414
}

modules/abstract-cosmos/src/lib/StakingWithdrawRewardsBuilder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { WithdrawDelegatorRewardsMessage } from './iface';
66
import { CosmosTransactionBuilder } from './transactionBuilder';
77
import { CosmosUtils } from './utils';
88

9-
export class StakingWithdrawRewardsBuilder extends CosmosTransactionBuilder {
10-
protected _utils: CosmosUtils;
9+
export class StakingWithdrawRewardsBuilder<CustomMessage = never> extends CosmosTransactionBuilder<CustomMessage> {
10+
protected _utils: CosmosUtils<CustomMessage>;
1111

12-
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils) {
12+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
1313
super(_coinConfig, utils);
1414
this._utils = utils;
1515
}

modules/abstract-cosmos/src/lib/iface.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,17 @@ export interface ExecuteContractMessage {
6767
funds?: Coin[];
6868
}
6969

70-
export type CosmosTransactionMessage =
70+
export type CosmosTransactionMessage<CustomMessage = never> =
7171
| SendMessage
7272
| DelegateOrUndelegeteMessage
7373
| WithdrawDelegatorRewardsMessage
7474
| ExecuteContractMessage
75-
| RedelegateMessage;
75+
| RedelegateMessage
76+
| CustomMessage;
7677

77-
export interface MessageData {
78+
export interface MessageData<CustomMessage = never> {
7879
typeUrl: string;
79-
value: CosmosTransactionMessage;
80+
value: CosmosTransactionMessage<CustomMessage>;
8081
}
8182

8283
export interface FeeData {
@@ -92,16 +93,16 @@ export interface GasAmountDetails {
9293
/**
9394
* The transaction data returned from the toJson() function of a transaction
9495
*/
95-
export interface TxData extends CosmosLikeTransaction {
96+
export interface TxData<CustomMessage = never> extends CosmosLikeTransaction<CustomMessage> {
9697
id?: string;
9798
type?: TransactionType;
9899
accountNumber: number;
99100
chainId: string;
100101
}
101102

102-
export interface CosmosLikeTransaction {
103+
export interface CosmosLikeTransaction<CustomMessage = never> {
103104
readonly sequence: number;
104-
readonly sendMessages: MessageData[];
105+
readonly sendMessages: MessageData<CustomMessage>[];
105106
readonly gasBudget: FeeData;
106107
readonly publicKey?: string;
107108
readonly signature?: Uint8Array;

modules/abstract-cosmos/src/lib/transaction.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,23 @@ import {
2424
} from './iface';
2525
import { CosmosUtils } from './utils';
2626

27-
export class CosmosTransaction extends BaseTransaction {
28-
protected _cosmosLikeTransaction: CosmosLikeTransaction;
27+
export class CosmosTransaction<CustomMessage = never> extends BaseTransaction {
28+
protected _cosmosLikeTransaction: CosmosLikeTransaction<CustomMessage>;
2929
protected _accountNumber: number;
3030
protected _chainId: string;
3131

32-
protected _utils: CosmosUtils;
32+
protected _utils: CosmosUtils<CustomMessage>;
3333

34-
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils) {
34+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
3535
super(_coinConfig);
3636
this._utils = utils;
3737
}
3838

39-
get cosmosLikeTransaction(): CosmosLikeTransaction {
39+
get cosmosLikeTransaction(): CosmosLikeTransaction<CustomMessage> {
4040
return this._cosmosLikeTransaction;
4141
}
4242

43-
set cosmosLikeTransaction(cosmosLikeTransaction: Readonly<CosmosLikeTransaction>) {
43+
set cosmosLikeTransaction(cosmosLikeTransaction: Readonly<CosmosLikeTransaction<CustomMessage>>) {
4444
this._cosmosLikeTransaction = cosmosLikeTransaction;
4545
}
4646

@@ -84,7 +84,7 @@ export class CosmosTransaction extends BaseTransaction {
8484
}
8585

8686
/** @inheritdoc */
87-
toJson(): TxData {
87+
toJson(): TxData<CustomMessage> {
8888
if (!this._cosmosLikeTransaction) {
8989
throw new ParseTransactionError('Empty transaction');
9090
}
@@ -171,7 +171,10 @@ export class CosmosTransaction extends BaseTransaction {
171171
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
172172
* @returns {TransactionExplanation}
173173
*/
174-
explainTransactionInternal(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation {
174+
explainTransactionInternal(
175+
json: TxData<CustomMessage>,
176+
explanationResult: TransactionExplanation
177+
): TransactionExplanation {
175178
let outputs: TransactionRecipient[];
176179
let outputAmount;
177180
switch (json.type) {

modules/abstract-cosmos/src/lib/transactionBuilder.ts

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ import { CosmosKeyPair as KeyPair } from './keyPair';
1717
import { CosmosTransaction } from './transaction';
1818
import { CosmosUtils } from './utils';
1919

20-
export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
21-
protected _transaction: CosmosTransaction;
20+
export abstract class CosmosTransactionBuilder<CustomMessage = never> extends BaseTransactionBuilder {
21+
protected _transaction: CosmosTransaction<CustomMessage>;
2222
protected _sequence: number;
23-
protected _messages: MessageData[];
23+
protected _messages: MessageData<CustomMessage>[];
2424
protected _gasBudget: FeeData;
2525
protected _accountNumber?: number;
2626
protected _signature: Buffer;
@@ -29,9 +29,9 @@ export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
2929
protected _signer: KeyPair;
3030
protected _memo?: string;
3131

32-
protected _utils: CosmosUtils;
32+
protected _utils: CosmosUtils<CustomMessage>;
3333

34-
constructor(_coinConfig: Readonly<CoinConfig>, _utils: CosmosUtils) {
34+
constructor(_coinConfig: Readonly<CoinConfig>, _utils: CosmosUtils<CustomMessage>) {
3535
super(_coinConfig);
3636
this._transaction = new CosmosTransaction(_coinConfig, _utils);
3737
}
@@ -42,12 +42,12 @@ export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
4242
protected abstract get transactionType(): TransactionType;
4343

4444
/** @inheritdoc */
45-
protected get transaction(): CosmosTransaction {
45+
protected get transaction(): CosmosTransaction<CustomMessage> {
4646
return this._transaction;
4747
}
4848

4949
/** @inheritdoc */
50-
protected set transaction(transaction: CosmosTransaction) {
50+
protected set transaction(transaction: CosmosTransaction<CustomMessage>) {
5151
this._transaction = transaction;
5252
}
5353

@@ -78,7 +78,7 @@ export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
7878
* @param {CosmosTransactionMessage[]} messages
7979
* @returns {TransactionBuilder} This transaction builder
8080
*/
81-
abstract messages(messages: CosmosTransactionMessage[]): this;
81+
abstract messages(messages: CosmosTransactionMessage<CustomMessage>[]): this;
8282

8383
publicKey(publicKey: string | undefined): this {
8484
this._publicKey = publicKey;
@@ -101,7 +101,7 @@ export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
101101
}
102102

103103
/** @inheritdoc */
104-
protected signImplementation(key: BaseKey): CosmosTransaction {
104+
protected signImplementation(key: BaseKey): CosmosTransaction<CustomMessage> {
105105
this.validateKey(key);
106106
if (this._accountNumber === undefined) {
107107
throw new SigningError('accountNumber is required before signing');
@@ -147,7 +147,7 @@ export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
147147
* Initialize the transaction builder fields using the decoded transaction data
148148
* @param {CosmosTransaction} tx the transaction data
149149
*/
150-
initBuilder(tx: CosmosTransaction): void {
150+
initBuilder(tx: CosmosTransaction<CustomMessage>): void {
151151
this._transaction = tx;
152152
const txData = tx.toJson();
153153
this.gasBudget(txData.gasBudget);
@@ -166,16 +166,23 @@ export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
166166
}
167167
}
168168

169+
/**
170+
* Creates a new CosmosTransaction instance
171+
*/
172+
protected newTransaction(): CosmosTransaction<CustomMessage> {
173+
return new CosmosTransaction<CustomMessage>(this._coinConfig, this._utils);
174+
}
175+
169176
/** @inheritdoc */
170-
protected fromImplementation(rawTransaction: string): CosmosTransaction {
171-
const tx = new CosmosTransaction(this._coinConfig, this._utils);
177+
protected fromImplementation(rawTransaction: string): CosmosTransaction<CustomMessage> {
178+
const tx = this.newTransaction();
172179
tx.enrichTransactionDetailsFromRawTransaction(rawTransaction);
173180
this.initBuilder(tx);
174181
return this.transaction;
175182
}
176183

177184
/** @inheritdoc */
178-
protected async buildImplementation(): Promise<CosmosTransaction> {
185+
protected async buildImplementation(): Promise<CosmosTransaction<CustomMessage>> {
179186
this.transaction.transactionType = this.transactionType;
180187
if (this._accountNumber) {
181188
this.transaction.accountNumber = this._accountNumber;
@@ -240,7 +247,7 @@ export abstract class CosmosTransactionBuilder extends BaseTransactionBuilder {
240247
}
241248

242249
/** @inheritdoc */
243-
validateTransaction(transaction: CosmosTransaction): void {
250+
validateTransaction(transaction: CosmosTransaction<CustomMessage>): void {
244251
this._utils.validateTransaction({
245252
sequence: this._sequence,
246253
sendMessages: this._messages,

modules/abstract-cosmos/src/lib/transferBuilder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { SendMessage } from './iface';
66
import { CosmosTransactionBuilder } from './transactionBuilder';
77
import { CosmosUtils } from './utils';
88

9-
export class CosmosTransferBuilder extends CosmosTransactionBuilder {
10-
protected _utils: CosmosUtils;
9+
export class CosmosTransferBuilder<CustomMessage = never> extends CosmosTransactionBuilder<CustomMessage> {
10+
protected _utils: CosmosUtils<CustomMessage>;
1111

12-
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils) {
12+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
1313
super(_coinConfig, utils);
1414
this._utils = utils;
1515
}

0 commit comments

Comments
 (0)