From 76aa1b87acd78fbea87b3231542112a46d5f54ed Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 21 May 2026 13:16:06 +0800 Subject: [PATCH 1/3] add min stake const --- chain-extensions/src/mock.rs | 2 ++ eco-tests/src/mock.rs | 2 ++ pallets/admin-utils/src/tests/mock.rs | 2 ++ pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/src/macros/config.rs | 3 +++ pallets/subtensor/src/tests/mock.rs | 2 ++ pallets/subtensor/src/tests/mock_high_ed.rs | 2 ++ pallets/transaction-fee/src/tests/mock.rs | 2 ++ precompiles/src/mock.rs | 2 ++ runtime/src/lib.rs | 2 ++ 10 files changed, 20 insertions(+), 1 deletion(-) diff --git a/chain-extensions/src/mock.rs b/chain-extensions/src/mock.rs index 9c4b3bd4a6..37c6d4fb47 100644 --- a/chain-extensions/src/mock.rs +++ b/chain-extensions/src/mock.rs @@ -311,6 +311,7 @@ parameter_types! { pub const InitialTxChildKeyTakeRateLimit: u64 = 1; // 1 block take rate limit for testing pub const InitialBurn: u64 = 0; pub const InitialMinBurn: u64 = 500_000; + pub const InitialMinStake: u64 = 2_000_000; pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO @@ -398,6 +399,7 @@ impl pallet_subtensor::Config for Test { type InitialBurn = InitialBurn; type InitialMaxBurn = InitialMaxBurn; type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; diff --git a/eco-tests/src/mock.rs b/eco-tests/src/mock.rs index 9ab48c12a7..aba98da9b5 100644 --- a/eco-tests/src/mock.rs +++ b/eco-tests/src/mock.rs @@ -194,6 +194,7 @@ parameter_types! { pub const InitialTxChildKeyTakeRateLimit: u64 = 1; // 1 block take rate limit for testing pub const InitialBurn: u64 = 0; pub const InitialMinBurn: u64 = 500_000; + pub const InitialMinStake: u64 = 2_000_000; pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO @@ -281,6 +282,7 @@ impl pallet_subtensor::Config for Test { type InitialBurn = InitialBurn; type InitialMaxBurn = InitialMaxBurn; type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; diff --git a/pallets/admin-utils/src/tests/mock.rs b/pallets/admin-utils/src/tests/mock.rs index 9faf870cbe..37b4e06aa5 100644 --- a/pallets/admin-utils/src/tests/mock.rs +++ b/pallets/admin-utils/src/tests/mock.rs @@ -119,6 +119,7 @@ parameter_types! { pub const InitialTxChildKeyTakeRateLimit: u64 = 0; // Disable rate limit for testing pub const InitialBurn: TaoBalance = TaoBalance::new(0); pub const InitialMinBurn: TaoBalance = TaoBalance::new(500_000); + pub const InitialMinStake: TaoBalance = TaoBalance::new(2_000_000); pub const InitialMaxBurn: TaoBalance = TaoBalance::new(1_000_000_000); pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO @@ -205,6 +206,7 @@ impl pallet_subtensor::Config for Test { type InitialBurn = InitialBurn; type InitialMaxBurn = InitialMaxBurn; type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 7c664fc1c1..2891d4e5cf 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -998,7 +998,7 @@ pub mod pallet { /// Default minimum stake. #[pallet::type_value] pub fn DefaultMinStake() -> TaoBalance { - 2_000_000.into() + T::InitialMinStake::get().into() } /// Default unicode vector for tau symbol. diff --git a/pallets/subtensor/src/macros/config.rs b/pallets/subtensor/src/macros/config.rs index 8eec97a5be..7b94866b52 100644 --- a/pallets/subtensor/src/macros/config.rs +++ b/pallets/subtensor/src/macros/config.rs @@ -111,6 +111,9 @@ mod config { /// Initial Min Burn. #[pallet::constant] type InitialMinBurn: Get; + /// Initial minimum stake. + #[pallet::constant] + type InitialMinStake: Get; /// Min burn upper bound. #[pallet::constant] type MinBurnUpperBound: Get; diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 8c553e3ee8..277162dde4 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -210,6 +210,7 @@ parameter_types! { pub const InitialTxChildKeyTakeRateLimit: u64 = 1; // 1 block take rate limit for testing pub const InitialBurn: u64 = 0; pub const InitialMinBurn: u64 = 500_000; + pub const InitialMinStake: u64 = 2_000_000; pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO @@ -297,6 +298,7 @@ impl crate::Config for Test { type InitialBurn = InitialBurn; type InitialMaxBurn = InitialMaxBurn; type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; diff --git a/pallets/subtensor/src/tests/mock_high_ed.rs b/pallets/subtensor/src/tests/mock_high_ed.rs index 0f0d818c38..5f19edf455 100644 --- a/pallets/subtensor/src/tests/mock_high_ed.rs +++ b/pallets/subtensor/src/tests/mock_high_ed.rs @@ -170,6 +170,7 @@ parameter_types! { pub const InitialTxChildKeyTakeRateLimit: u64 = 1; // 1 block take rate limit for testing pub const InitialBurn: u64 = 0; pub const InitialMinBurn: u64 = 500_000; + pub const InitialMinStake: u64 = 2_000_000; pub const InitialMaxBurn: u64 = 1_000_000_000; pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO @@ -257,6 +258,7 @@ impl crate::Config for Test { type InitialBurn = InitialBurn; type InitialMaxBurn = InitialMaxBurn; type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; diff --git a/pallets/transaction-fee/src/tests/mock.rs b/pallets/transaction-fee/src/tests/mock.rs index 3607fd3dfa..343decb8a8 100644 --- a/pallets/transaction-fee/src/tests/mock.rs +++ b/pallets/transaction-fee/src/tests/mock.rs @@ -191,6 +191,7 @@ parameter_types! { pub const InitialTxChildKeyTakeRateLimit: u64 = 0; // Disable rate limit for testing pub const InitialBurn: TaoBalance = TaoBalance::new(0); pub const InitialMinBurn: TaoBalance = TaoBalance::new(500_000); + pub const InitialMinStake: TaoBalance = TaoBalance::new(2_000_000); pub const InitialMaxBurn: TaoBalance = TaoBalance::new(1_000_000_000); pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO @@ -277,6 +278,7 @@ impl pallet_subtensor::Config for Test { type InitialBurn = InitialBurn; type InitialMaxBurn = InitialMaxBurn; type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; diff --git a/precompiles/src/mock.rs b/precompiles/src/mock.rs index d82422bf51..037e02d864 100644 --- a/precompiles/src/mock.rs +++ b/precompiles/src/mock.rs @@ -113,6 +113,7 @@ parameter_types! { pub const InitialTxChildKeyTakeRateLimit: u64 = 0; pub const InitialBurn: TaoBalance = TaoBalance::new(0); pub const InitialMinBurn: TaoBalance = TaoBalance::new(500_000); + pub const InitialMinStake: TaoBalance = TaoBalance::new(2_000_000); pub const InitialMaxBurn: TaoBalance = TaoBalance::new(1_000_000_000); pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); @@ -457,6 +458,7 @@ impl pallet_subtensor::Config for Runtime { type InitialBurn = InitialBurn; type InitialMaxBurn = InitialMaxBurn; type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index bd0c55f9d4..09abdff0a5 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -1105,6 +1105,7 @@ parameter_types! { pub const SubtensorInitialServingRateLimit: u64 = 50; pub const SubtensorInitialBurn: TaoBalance = TaoBalance::new(100_000_000); // 0.1 tao pub const SubtensorInitialMinBurn: TaoBalance = TaoBalance::new(500_000); // 500k RAO + pub const SubtensorInitialMinStake: TaoBalance = TaoBalance::new(2_000_000); // 0.002 tao pub const SubtensorInitialMaxBurn: TaoBalance = TaoBalance::new(100_000_000_000); // 100 tao pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO @@ -1179,6 +1180,7 @@ impl pallet_subtensor::Config for Runtime { type InitialBurn = SubtensorInitialBurn; type InitialMaxBurn = SubtensorInitialMaxBurn; type InitialMinBurn = SubtensorInitialMinBurn; + type InitialMinStake = SubtensorInitialMinStake; type MinBurnUpperBound = MinBurnUpperBound; type MaxBurnLowerBound = MaxBurnLowerBound; type InitialTxRateLimit = SubtensorInitialTxRateLimit; From 4b9fe16801b44c8f90c9c6ecd3dbf06a8288f5eb Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 21 May 2026 15:35:39 +0800 Subject: [PATCH 2/3] commit Cargo.lock --- contract-tests/package-lock.json | 2 +- contract-tests/test/alphaPool.test.ts | 21 +++++++++++---------- contract-tests/yarn.lock | 24 ++++++++++++------------ 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/contract-tests/package-lock.json b/contract-tests/package-lock.json index 06c722a6de..52b74f2bf8 100644 --- a/contract-tests/package-lock.json +++ b/contract-tests/package-lock.json @@ -35,7 +35,7 @@ }, ".papi/descriptors": { "name": "@polkadot-api/descriptors", - "version": "0.1.0-autogenerated.5063582544821983772", + "version": "0.1.0-autogenerated.9947536328969970535", "peerDependencies": { "polkadot-api": ">=1.21.0" } diff --git a/contract-tests/test/alphaPool.test.ts b/contract-tests/test/alphaPool.test.ts index f3ec5dde66..d8ecdc8a00 100644 --- a/contract-tests/test/alphaPool.test.ts +++ b/contract-tests/test/alphaPool.test.ts @@ -1,18 +1,17 @@ -import * as assert from "assert"; -import * as chai from "chai"; +import { devnet } from "@polkadot-api/descriptors"; import { u8aToHex } from "@polkadot/util"; -import { getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate" -import { generateRandomEthersWallet, getPublicClient } from "../src/utils"; -import { ETH_LOCAL_URL } from "../src/config"; -import { devnet } from "@polkadot-api/descriptors" -import { PublicClient } from "viem"; +import * as assert from "assert"; +import { ethers } from "ethers"; import { TypedApi } from "polkadot-api"; -import { ALPHA_POOL_CONTRACT_ABI, ALPHA_POOL_CONTRACT_BYTECODE } from "../src/contracts/alphaPool"; +import { PublicClient } from "viem"; import { convertH160ToPublicKey, convertH160ToSS58, convertPublicKeyToSs58, toViemAddress } from "../src/address-utils"; -import { forceSetBalanceToEthAddress, disableWhiteListCheck, addNewSubnetwork, forceSetBalanceToSs58Address, startCall, burnedRegister, getStake } from "../src/subtensor"; -import { ethers } from "ethers" import { tao } from "../src/balance-math"; +import { ETH_LOCAL_URL } from "../src/config"; +import { ALPHA_POOL_CONTRACT_ABI, ALPHA_POOL_CONTRACT_BYTECODE } from "../src/contracts/alphaPool"; import { ISTAKING_V2_ADDRESS, IStakingV2ABI } from "../src/contracts/staking"; +import { getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate"; +import { addNewSubnetwork, burnedRegister, disableWhiteListCheck, forceSetBalanceToEthAddress, forceSetBalanceToSs58Address, getStake, startCall } from "../src/subtensor"; +import { generateRandomEthersWallet, getPublicClient } from "../src/utils"; // import { KeyPair } from "@polkadot-labs/hdkd-helpers"; describe("bridge token contract deployment", () => { // init eth part @@ -29,6 +28,8 @@ describe("bridge token contract deployment", () => { publicClient = await getPublicClient(ETH_LOCAL_URL) api = await getDevnetApi() + let value = await api.constants.SubtensorModule.InitialMinStake; + await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(hotkey.publicKey)) await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(coldkey.publicKey)) await addNewSubnetwork(api, hotkey, coldkey) diff --git a/contract-tests/yarn.lock b/contract-tests/yarn.lock index 080ecb1325..037e0a53ce 100644 --- a/contract-tests/yarn.lock +++ b/contract-tests/yarn.lock @@ -38,10 +38,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/darwin-arm64@0.25.12": +"@esbuild/linux-x64@0.25.12": version "0.25.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz" - integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== "@ethereumjs/rlp@^10.0.0": version "10.1.0" @@ -255,7 +255,7 @@ integrity sha512-cgA9fh8dfBai9b46XaaQmj9vwzyHStQjc/xrAvQksgF6SqvZ0yAfxVqLvGrsz/Xi3dsAdKLg09PybC7MUAMv9w== "@polkadot-api/descriptors@file:.papi/descriptors": - version "0.1.0-autogenerated.5063582544821983772" + version "0.1.0-autogenerated.9947536328969970535" resolved "file:.papi/descriptors" "@polkadot-api/ink-contracts@^0.4.1", "@polkadot-api/ink-contracts@>=0.4.0", "@polkadot-api/ink-contracts@0.4.3": @@ -950,10 +950,15 @@ tslib "^2.8.0" ws "^8.18.0" -"@rollup/rollup-darwin-arm64@4.53.3": +"@rollup/rollup-linux-x64-gnu@4.53.3": version "4.53.3" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz" - integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA== + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz" + integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w== + +"@rollup/rollup-linux-x64-musl@4.53.3": + version "4.53.3" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz" + integrity sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q== "@rx-state/core@^0.1.4": version "0.1.4" @@ -1655,11 +1660,6 @@ fs.promises.exists@^1.1.4: resolved "https://registry.npmjs.org/fs.promises.exists/-/fs.promises.exists-1.1.4.tgz" integrity sha512-lJzUGWbZn8vhGWBedA+RYjB/BeJ+3458ljUfmplqhIeb6ewzTFWNPCR1HCiYCkXV9zxcHz9zXkJzMsEgDLzh3Q== -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" From 9fe4e8ca5b195a3d27d6ad021e18b334a5512782 Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 28 May 2026 08:55:55 +0800 Subject: [PATCH 3/3] bump version --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index f03bb6fe13..bde8c9e65b 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -274,7 +274,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 411, + spec_version: 412, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1,