From 34d2024141ab1ec456f1f61e2fd16b418748b628 Mon Sep 17 00:00:00 2001 From: Vijay Jagannathan Date: Fri, 28 Feb 2025 14:32:49 +0530 Subject: [PATCH] feat(sdk-coin-tao): add netuid validation Ticket: SC-1044 --- .../abstract-substrate/src/lib/transactionBuilder.ts | 11 +++++++++++ modules/sdk-coin-tao/src/lib/stakingBuilder.ts | 1 + modules/sdk-coin-tao/src/lib/unstakeBuilder.ts | 1 + .../test/unit/transactionBuilder/stakingBuilder.ts | 10 ++++++++++ .../test/unit/transactionBuilder/unstakeBuilder.ts | 10 ++++++++++ 5 files changed, 33 insertions(+) diff --git a/modules/abstract-substrate/src/lib/transactionBuilder.ts b/modules/abstract-substrate/src/lib/transactionBuilder.ts index 36d272e1b2..2de7fb9024 100644 --- a/modules/abstract-substrate/src/lib/transactionBuilder.ts +++ b/modules/abstract-substrate/src/lib/transactionBuilder.ts @@ -256,6 +256,17 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder { } } + /** + * Helper method to check whether netuid is 0 (only root network is supported now) + * @param {string} netduid of the subnet + */ + public validateNetuid(netduid: string) { + const netuidBigNumber = new BigNumber(netduid); + if (!netuidBigNumber.isZero()) { + throw new BuildTransactionError('Only root network netuid(0) is supported'); + } + } + /** @inheritdoc */ validateKey({ key }: BaseKey): void { let isValidPrivateKeyFromBytes; diff --git a/modules/sdk-coin-tao/src/lib/stakingBuilder.ts b/modules/sdk-coin-tao/src/lib/stakingBuilder.ts index 12c583ae08..db5e1cc9d5 100644 --- a/modules/sdk-coin-tao/src/lib/stakingBuilder.ts +++ b/modules/sdk-coin-tao/src/lib/stakingBuilder.ts @@ -68,6 +68,7 @@ export class StakingBuilder extends TransactionBuilder { * @returns {StakingBuilder} This staking builder. */ netuid(netuid: string): this { + this.validateNetuid(netuid); this._netuid = netuid; return this; } diff --git a/modules/sdk-coin-tao/src/lib/unstakeBuilder.ts b/modules/sdk-coin-tao/src/lib/unstakeBuilder.ts index 09fc8fa669..6ccce52c94 100644 --- a/modules/sdk-coin-tao/src/lib/unstakeBuilder.ts +++ b/modules/sdk-coin-tao/src/lib/unstakeBuilder.ts @@ -71,6 +71,7 @@ export class UnstakeBuilder extends TransactionBuilder { * @returns {UnstakeBuilder} This unstaking builder */ netuid(netuid: string): this { + this.validateNetuid(netuid); this._netuid = netuid; return this; } diff --git a/modules/sdk-coin-tao/test/unit/transactionBuilder/stakingBuilder.ts b/modules/sdk-coin-tao/test/unit/transactionBuilder/stakingBuilder.ts index 53baf50d13..7eeb09bc30 100644 --- a/modules/sdk-coin-tao/test/unit/transactionBuilder/stakingBuilder.ts +++ b/modules/sdk-coin-tao/test/unit/transactionBuilder/stakingBuilder.ts @@ -38,6 +38,16 @@ describe('Tao Stake Builder', function () { should.doesNotThrow(() => builder.hotkey({ address: '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT' })); SinonAssert.calledTwice(spyValidateAddress); }); + + it('should validate netuid', function () { + const spyValidateNetuid = spy(builder, 'validateNetuid'); + assert.throws( + () => builder.netuid('1'), + (e: Error) => e.message === 'Only root network netuid(0) is supported' + ); + should.doesNotThrow(() => builder.netuid('0')); + SinonAssert.calledTwice(spyValidateNetuid); + }); }); describe('build stake transaction', function () { diff --git a/modules/sdk-coin-tao/test/unit/transactionBuilder/unstakeBuilder.ts b/modules/sdk-coin-tao/test/unit/transactionBuilder/unstakeBuilder.ts index 1902ba98b1..974129103a 100644 --- a/modules/sdk-coin-tao/test/unit/transactionBuilder/unstakeBuilder.ts +++ b/modules/sdk-coin-tao/test/unit/transactionBuilder/unstakeBuilder.ts @@ -37,6 +37,16 @@ describe('Tao Unstake Builder', function () { should.doesNotThrow(() => builder.hotkey({ address: '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT' })); SinonAssert.calledTwice(spyValidateAddress); }); + + it('should validate netuid', function () { + const spyValidateNetuid = spy(builder, 'validateNetuid'); + assert.throws( + () => builder.netuid('1'), + (e: Error) => e.message === 'Only root network netuid(0) is supported' + ); + should.doesNotThrow(() => builder.netuid('0')); + SinonAssert.calledTwice(spyValidateNetuid); + }); }); describe('build unstake transaction', function () {