Skip to content

Commit b4368fb

Browse files
Add move_stake and transfer_stake precompiles.
1 parent 46b9b65 commit b4368fb

File tree

2 files changed

+88
-4
lines changed

2 files changed

+88
-4
lines changed

pallets/subtensor/src/macros/dispatches.rs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2435,5 +2435,85 @@ mod dispatches {
24352435
allow_partial,
24362436
)
24372437
}
2438+
2439+
/// move_stake with EVM origin
2440+
#[pallet::call_index(127)]
2441+
#[pallet::weight((Weight::from_parts(157_100_000, 0)
2442+
.saturating_add(T::DbWeight::get().reads(15_u64))
2443+
.saturating_add(T::DbWeight::get().writes(7_u64)), DispatchClass::Operational, Pays::Yes))]
2444+
pub fn move_stake_evm(
2445+
origin: OriginFor<T>,
2446+
origin_hotkey: T::AccountId,
2447+
destination_hotkey: T::AccountId,
2448+
origin_netuid: NetUid,
2449+
destination_netuid: NetUid,
2450+
alpha_amount: AlphaCurrency,
2451+
) -> DispatchResult {
2452+
let account_id = crate::ensure_evm_origin(<T as Config>::RuntimeOrigin::from(origin))?;
2453+
let verified_evm_origin = RawOrigin::Signed(account_id);
2454+
2455+
Self::do_move_stake(
2456+
verified_evm_origin.into(),
2457+
origin_hotkey,
2458+
destination_hotkey,
2459+
origin_netuid,
2460+
destination_netuid,
2461+
alpha_amount,
2462+
)
2463+
}
2464+
2465+
/// transfer_stake with EVM origin
2466+
#[pallet::call_index(128)]
2467+
#[pallet::weight((Weight::from_parts(154_800_000, 0)
2468+
.saturating_add(T::DbWeight::get().reads(13_u64))
2469+
.saturating_add(T::DbWeight::get().writes(6_u64)), DispatchClass::Operational, Pays::Yes))]
2470+
pub fn transfer_stake_evm(
2471+
origin: OriginFor<T>,
2472+
destination_coldkey: T::AccountId,
2473+
hotkey: T::AccountId,
2474+
origin_netuid: NetUid,
2475+
destination_netuid: NetUid,
2476+
alpha_amount: AlphaCurrency,
2477+
) -> DispatchResult {
2478+
let account_id = crate::ensure_evm_origin(<T as Config>::RuntimeOrigin::from(origin))?;
2479+
let verified_evm_origin = RawOrigin::Signed(account_id);
2480+
2481+
Self::do_transfer_stake(
2482+
verified_evm_origin.into(),
2483+
destination_coldkey,
2484+
hotkey,
2485+
origin_netuid,
2486+
destination_netuid,
2487+
alpha_amount,
2488+
)
2489+
}
2490+
2491+
/// swap_stake with EVM origin
2492+
#[pallet::call_index(129)]
2493+
#[pallet::weight((
2494+
Weight::from_parts(351_300_000, 0)
2495+
.saturating_add(T::DbWeight::get().reads(32))
2496+
.saturating_add(T::DbWeight::get().writes(17)),
2497+
DispatchClass::Operational,
2498+
Pays::Yes
2499+
))]
2500+
pub fn swap_stake(
2501+
origin: OriginFor<T>,
2502+
hotkey: T::AccountId,
2503+
origin_netuid: NetUid,
2504+
destination_netuid: NetUid,
2505+
alpha_amount: AlphaCurrency,
2506+
) -> DispatchResult {
2507+
let account_id = crate::ensure_evm_origin(<T as Config>::RuntimeOrigin::from(origin))?;
2508+
let verified_evm_origin = RawOrigin::Signed(account_id);
2509+
2510+
Self::do_swap_stake(
2511+
verified_evm_origin.into(),
2512+
hotkey,
2513+
origin_netuid,
2514+
destination_netuid,
2515+
alpha_amount,
2516+
)
2517+
}
24382518
}
24392519
}

precompiles/src/staking.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,15 +179,17 @@ where
179179
let origin_netuid = try_u16_from_u256(origin_netuid)?;
180180
let destination_netuid = try_u16_from_u256(destination_netuid)?;
181181
let alpha_amount: u64 = amount_alpha.unique_saturated_into();
182-
let call = pallet_subtensor::Call::<R>::move_stake {
182+
let call = pallet_subtensor::Call::<R>::move_stake_evm {
183183
origin_hotkey,
184184
destination_hotkey,
185185
origin_netuid: origin_netuid.into(),
186186
destination_netuid: destination_netuid.into(),
187187
alpha_amount: alpha_amount.into(),
188188
};
189189

190-
handle.try_dispatch_runtime_call::<R, _>(call, RawOrigin::Signed(account_id))
190+
let evm_origin = R::EvmOriginHelper::make_evm_origin(account_id);
191+
192+
handle.try_dispatch_runtime_call_with_custom_origin::<R, _>(call, evm_origin)
191193
}
192194

193195
#[precompile::public("transferStake(bytes32,bytes32,uint256,uint256,uint256)")]
@@ -205,15 +207,17 @@ where
205207
let origin_netuid = try_u16_from_u256(origin_netuid)?;
206208
let destination_netuid = try_u16_from_u256(destination_netuid)?;
207209
let alpha_amount: u64 = amount_alpha.unique_saturated_into();
208-
let call = pallet_subtensor::Call::<R>::transfer_stake {
210+
let call = pallet_subtensor::Call::<R>::transfer_stake_evm {
209211
destination_coldkey,
210212
hotkey,
211213
origin_netuid: origin_netuid.into(),
212214
destination_netuid: destination_netuid.into(),
213215
alpha_amount: alpha_amount.into(),
214216
};
215217

216-
handle.try_dispatch_runtime_call::<R, _>(call, RawOrigin::Signed(account_id))
218+
let evm_origin = R::EvmOriginHelper::make_evm_origin(account_id);
219+
220+
handle.try_dispatch_runtime_call_with_custom_origin::<R, _>(call, evm_origin)
217221
}
218222

219223
#[precompile::public("getTotalColdkeyStake(bytes32)")]

0 commit comments

Comments
 (0)