From 9affcedc8a5f91d0cf4647cffeaa537b033d3b83 Mon Sep 17 00:00:00 2001 From: "nvrakeshreddy@bitgo.com" Date: Tue, 4 Aug 2026 08:33:47 +0000 Subject: [PATCH] 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 --- .../src/lib/transactionBuilderFactory.ts | 6 +++--- modules/sdk-coin-polyx/src/polyx.ts | 5 +++++ modules/sdk-coin-polyx/test/unit/polyx.ts | 11 ++++++++++ .../transactionBuilderFactory.ts | 21 +++++++++++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/modules/sdk-coin-polyx/src/lib/transactionBuilderFactory.ts b/modules/sdk-coin-polyx/src/lib/transactionBuilderFactory.ts index 370eece0ad..4199f844d7 100644 --- a/modules/sdk-coin-polyx/src/lib/transactionBuilderFactory.ts +++ b/modules/sdk-coin-polyx/src/lib/transactionBuilderFactory.ts @@ -1,4 +1,4 @@ -import { BaseTransactionBuilderFactory, NotImplementedError } from '@bitgo/sdk-core'; +import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { decode } from '@substrate/txwrapper-polkadot'; import { TransferBuilder } from './transferBuilder'; @@ -153,8 +153,8 @@ export class TransactionBuilderFactory extends BaseTransactionBuilderFactory { return new V8NominateBuilder(this._coinConfig); } - getWalletInitializationBuilder(): void { - throw new NotImplementedError(`walletInitialization for ${this._coinConfig.name} not implemented`); + getWalletInitializationBuilder(): RegisterDidWithCDDBuilder { + return this.getRegisterDidWithCDDBuilder(); } from(rawTxn: string): TransactionBuilder { diff --git a/modules/sdk-coin-polyx/src/polyx.ts b/modules/sdk-coin-polyx/src/polyx.ts index c0d1f70b97..08ad90e2d3 100644 --- a/modules/sdk-coin-polyx/src/polyx.ts +++ b/modules/sdk-coin-polyx/src/polyx.ts @@ -367,4 +367,9 @@ export class Polyx extends SubstrateCoin { }, }; } + + /** @inheritDoc */ + requiresWalletInitializationTransaction(): boolean { + return true; + } } diff --git a/modules/sdk-coin-polyx/test/unit/polyx.ts b/modules/sdk-coin-polyx/test/unit/polyx.ts index 0db9b3eb46..0a5b3531d7 100644 --- a/modules/sdk-coin-polyx/test/unit/polyx.ts +++ b/modules/sdk-coin-polyx/test/unit/polyx.ts @@ -360,4 +360,15 @@ describe('Polyx:', function () { }); }); }); + + describe('requiresWalletInitializationTransaction', function () { + it('returns true for polyx', function () { + const polyxCoin = bitgo.coin('polyx') as Polyx; + polyxCoin.requiresWalletInitializationTransaction().should.be.true(); + }); + + it('returns true for tpolyx', function () { + baseCoin.requiresWalletInitializationTransaction().should.be.true(); + }); + }); }); diff --git a/modules/sdk-coin-polyx/test/unit/transactionBuilder/transactionBuilderFactory.ts b/modules/sdk-coin-polyx/test/unit/transactionBuilder/transactionBuilderFactory.ts index 12d6fcbb12..030ee56638 100644 --- a/modules/sdk-coin-polyx/test/unit/transactionBuilder/transactionBuilderFactory.ts +++ b/modules/sdk-coin-polyx/test/unit/transactionBuilder/transactionBuilderFactory.ts @@ -3,6 +3,7 @@ import should from 'should'; import { TransactionBuilderFactory, TransferBuilder, + RegisterDidWithCDDBuilder, V8TransferBuilder, V8HexTransferBuilder, V8TokenTransferBuilder, @@ -247,4 +248,24 @@ describe('Tao Transaction Builder Factory', function () { ); }); }); + + describe('getWalletInitializationBuilder', function () { + it('returns a RegisterDidWithCDDBuilder instance for tpolyx', function () { + const factory = new TransactionBuilderFactory(coins.get('tpolyx')); + const builder = factory.getWalletInitializationBuilder(); + should.ok( + builder instanceof RegisterDidWithCDDBuilder, + 'expected RegisterDidWithCDDBuilder from getWalletInitializationBuilder' + ); + }); + + it('returns a RegisterDidWithCDDBuilder instance for polyx', function () { + const factory = new TransactionBuilderFactory(coins.get('polyx')); + const builder = factory.getWalletInitializationBuilder(); + should.ok( + builder instanceof RegisterDidWithCDDBuilder, + 'expected RegisterDidWithCDDBuilder from getWalletInitializationBuilder' + ); + }); + }); });