Transfer ud
Add transfer_ud
extrinsic to the pallet universal-dividend
.
@librelois Je suis parti du code de balances.
- Est-ce un problème de multiplier le montant avec
*
quand les valeurs ne sont pas vérifiées ? (risque d'overflow ou de panic)
Merge request reports
Activity
requested review from @librelois
Est-ce un problème de multiplier le montant avec * quand les valeurs ne sont pas vérifiées ? (risque d'overflow ou de panic)
Oui c'est une faille de sécu grave, un attaquant pouvant faire panic le nœud. Il faut utiliser
saturating_mul
. Aussi le problème avec ton code c'est qu'on ne peut envoyer qu'un nombre entier de DU. Il faudrait plutôt que tu prenne en param des centiDU (ou milliDU), et que tu convertisse selon.
191 191 let total_weight: Weight = 0; 192 192 193 193 let ud_amount = <CurrentUdStorage<T>>::try_get().expect("corrupted storage"); 194 let mut monetary_mass = <MonetaryMassStorage<T>>::try_get().expect("corrupted storage"); 194 let monetary_mass = <MonetaryMassStorage<T>>::try_get().expect("corrupted storage"); 195 195 196 196 for account_id in T::MembersIds::get() { 197 197 T::Currency::deposit_creating(&account_id, ud_amount); 198 monetary_mass += ud_amount; 199 198 Self::write_ud_history(n, account_id, ud_amount); 200 199 } 201 200 202 <MonetaryMassStorage<T>>::put(monetary_mass); 201 <MonetaryMassStorage<T>>::put(monetary_mass + ud_amount * members_count); changed this line in version 2 of the diff
252 251 sp_io::offchain_index::set(key.as_ref(), ud_amount.encode().as_ref()); 253 252 } 254 253 } 254 255 // CALLS // 256 #[pallet::call] 257 impl<T: Config> Pallet<T> { 258 /// Transfer some liquid free balance to another account, in UD. 259 #[pallet::weight(0)] 260 pub fn transfer_ud( 261 origin: OriginFor<T>, 262 dest: T::AccountId, changed this line in version 2 of the diff
256 #[pallet::call] 257 impl<T: Config> Pallet<T> { 258 /// Transfer some liquid free balance to another account, in UD. 259 #[pallet::weight(0)] 260 pub fn transfer_ud( 261 origin: OriginFor<T>, 262 dest: T::AccountId, 263 #[pallet::compact] value: BalanceOf<T>, 264 ) -> DispatchResultWithPostInfo { 265 let transactor = ensure_signed(origin)?; 266 let ud_amount = <CurrentUdStorage<T>>::try_get() 267 .map_err(|_| DispatchError::Other("corrupted storage"))?; 268 T::Currency::transfer( 269 &transactor, 270 &dest, 271 value * ud_amount, changed this line in version 2 of the diff
257 impl<T: Config> Pallet<T> { 258 /// Transfer some liquid free balance to another account, in UD. 259 #[pallet::weight(0)] 260 pub fn transfer_ud( 261 origin: OriginFor<T>, 262 dest: T::AccountId, 263 #[pallet::compact] value: BalanceOf<T>, 264 ) -> DispatchResultWithPostInfo { 265 let transactor = ensure_signed(origin)?; 266 let ud_amount = <CurrentUdStorage<T>>::try_get() 267 .map_err(|_| DispatchError::Other("corrupted storage"))?; 268 T::Currency::transfer( 269 &transactor, 270 &dest, 271 value * ud_amount, 272 ExistenceRequirement::AllowDeath, changed this line in version 2 of the diff
@tuxmain à tu un moment poru finaliser cette MR ? j'aimerais bien la mergée :)
added 7 commits
-
c40f7f49...2feb399b - 6 commits from branch
master
- 6a8bf59e - feat(ud): transfer_ud extrinsic
-
c40f7f49...2feb399b - 6 commits from branch
added 2 commits
included in !9 (merged)