Skip to content
Snippets Groups Projects

Transfer ud

Closed Pascal Engélibert requested to merge transfer_ud into master
5 unresolved threads

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

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • 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.

    • J'ai essayé plusieurs méthodes pour les milliDU (un type MilliUd implémentant FixedPointNumber, ou juste avec les méthodes ad hoc, ou juste une division par 1000), mais comme c'est générique je ne sais pas comment faire ça correctement...

    • Parce que tu t'y prend à l'envers, il te suffit de convertir 1000 en type Balance et de faire tout tes calculs en Balance, car il impl From<u32>

    • Aaah ok, j'avais essayé ça mais sans expliciter u32. C'est fait.

    • Please register or sign in to reply
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);
  • 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,
  • 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,
  • 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,
  • @tuxmain à tu un moment poru finaliser cette MR ? j'aimerais bien la mergée :)

  • added 7 commits

    Compare with previous version

  • added 2 commits

    • b59eacda - 1 commit from branch master
    • 2cb3d20e - feat(ud): transfer_ud extrinsic

    Compare with previous version

  • closed

  • Please register or sign in to reply
    Loading