Skip to content

Commit 9affced

Browse files
nvrakesh06bitgobot
authored andcommitted
fix(sdk-coin-polyx): fix address creation flow for Polyx
Before this change, `TransactionBuilderFactory.getWalletInitializationBuilder()` threw `NotImplementedError` and `Polyx.requiresWalletInitializationTransaction()` inherited the base class default of `false`. Together these caused the wallet initialization transaction to never be built or enqueued, so the CDD DID-registration step was skipped and address creation subsequently failed because the chain initialization was never triggered. Fix: route `getWalletInitializationBuilder()` to the existing `getRegisterDidWithCDDBuilder()` implementation, and override `requiresWalletInitializationTransaction()` to return `true` on the `Polyx` coin class (inherited by `Tpolyx`). This matches the pattern used by other coins that require on-chain initialization (Canton, Starknet) and correctly signals to the SDK wallet layer that a CDD registration transaction must be submitted before an address can receive funds. Add unit tests verifying both behaviors for polyx and tpolyx. Ticket: CECHO-58 Session-Id: 0594e2d8-7ed3-4626-ad92-ec5f2f0d5f8c Task-Id: 3a7836f7-b547-445f-9860-54583a5ab35f
1 parent 3086eaa commit 9affced

4 files changed

Lines changed: 40 additions & 3 deletions

File tree

modules/sdk-coin-polyx/src/lib/transactionBuilderFactory.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BaseTransactionBuilderFactory, NotImplementedError } from '@bitgo/sdk-core';
1+
import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core';
22
import { BaseCoin as CoinConfig } from '@bitgo/statics';
33
import { decode } from '@substrate/txwrapper-polkadot';
44
import { TransferBuilder } from './transferBuilder';
@@ -153,8 +153,8 @@ export class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
153153
return new V8NominateBuilder(this._coinConfig);
154154
}
155155

156-
getWalletInitializationBuilder(): void {
157-
throw new NotImplementedError(`walletInitialization for ${this._coinConfig.name} not implemented`);
156+
getWalletInitializationBuilder(): RegisterDidWithCDDBuilder {
157+
return this.getRegisterDidWithCDDBuilder();
158158
}
159159

160160
from(rawTxn: string): TransactionBuilder<TxMethod, SupportedTransaction> {

modules/sdk-coin-polyx/src/polyx.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,4 +367,9 @@ export class Polyx extends SubstrateCoin {
367367
},
368368
};
369369
}
370+
371+
/** @inheritDoc */
372+
requiresWalletInitializationTransaction(): boolean {
373+
return true;
374+
}
370375
}

modules/sdk-coin-polyx/test/unit/polyx.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,15 @@ describe('Polyx:', function () {
360360
});
361361
});
362362
});
363+
364+
describe('requiresWalletInitializationTransaction', function () {
365+
it('returns true for polyx', function () {
366+
const polyxCoin = bitgo.coin('polyx') as Polyx;
367+
polyxCoin.requiresWalletInitializationTransaction().should.be.true();
368+
});
369+
370+
it('returns true for tpolyx', function () {
371+
baseCoin.requiresWalletInitializationTransaction().should.be.true();
372+
});
373+
});
363374
});

modules/sdk-coin-polyx/test/unit/transactionBuilder/transactionBuilderFactory.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import should from 'should';
33
import {
44
TransactionBuilderFactory,
55
TransferBuilder,
6+
RegisterDidWithCDDBuilder,
67
V8TransferBuilder,
78
V8HexTransferBuilder,
89
V8TokenTransferBuilder,
@@ -247,4 +248,24 @@ describe('Tao Transaction Builder Factory', function () {
247248
);
248249
});
249250
});
251+
252+
describe('getWalletInitializationBuilder', function () {
253+
it('returns a RegisterDidWithCDDBuilder instance for tpolyx', function () {
254+
const factory = new TransactionBuilderFactory(coins.get('tpolyx'));
255+
const builder = factory.getWalletInitializationBuilder();
256+
should.ok(
257+
builder instanceof RegisterDidWithCDDBuilder,
258+
'expected RegisterDidWithCDDBuilder from getWalletInitializationBuilder'
259+
);
260+
});
261+
262+
it('returns a RegisterDidWithCDDBuilder instance for polyx', function () {
263+
const factory = new TransactionBuilderFactory(coins.get('polyx'));
264+
const builder = factory.getWalletInitializationBuilder();
265+
should.ok(
266+
builder instanceof RegisterDidWithCDDBuilder,
267+
'expected RegisterDidWithCDDBuilder from getWalletInitializationBuilder'
268+
);
269+
});
270+
});
250271
});

0 commit comments

Comments
 (0)