Skip to content
Snippets Groups Projects

Transfer ud

Closed Pascal Engélibert requested to merge transfer_ud into master
5 unresolved threads
@@ -27,7 +27,7 @@ mod tests;
#[cfg(feature = "runtime-benchmarks")]
mod benchmarking;
use frame_support::traits::Currency;
use frame_support::traits::{tokens::ExistenceRequirement, Currency};
use sp_arithmetic::{
per_things::Permill,
traits::{One, Zero},
@@ -191,15 +191,14 @@ pub mod pallet {
let total_weight: Weight = 0;
let ud_amount = <CurrentUdStorage<T>>::try_get().expect("corrupted storage");
let mut monetary_mass = <MonetaryMassStorage<T>>::try_get().expect("corrupted storage");
let monetary_mass = <MonetaryMassStorage<T>>::try_get().expect("corrupted storage");
for account_id in T::MembersIds::get() {
T::Currency::deposit_creating(&account_id, ud_amount);
monetary_mass += ud_amount;
Self::write_ud_history(n, account_id, ud_amount);
}
<MonetaryMassStorage<T>>::put(monetary_mass);
<MonetaryMassStorage<T>>::put(monetary_mass + ud_amount * members_count);
Please register or sign in to reply
Self::deposit_event(Event::NewUdCreated(ud_amount, members_count));
total_weight
@@ -252,4 +251,27 @@ pub mod pallet {
sp_io::offchain_index::set(key.as_ref(), ud_amount.encode().as_ref());
}
}
// CALLS //
#[pallet::call]
impl<T: Config> Pallet<T> {
/// Transfer some liquid free balance to another account, in UD.
#[pallet::weight(0)]
pub fn transfer_ud(
origin: OriginFor<T>,
dest: T::AccountId,
Please register or sign in to reply
#[pallet::compact] value: BalanceOf<T>,
) -> DispatchResultWithPostInfo {
let transactor = ensure_signed(origin)?;
let ud_amount = <CurrentUdStorage<T>>::try_get()
.map_err(|_| DispatchError::Other("corrupted storage"))?;
T::Currency::transfer(
&transactor,
&dest,
value * ud_amount,
Please register or sign in to reply
ExistenceRequirement::AllowDeath,
Please register or sign in to reply
)?;
Ok(().into())
}
}
}
Loading