Skip to content
Snippets Groups Projects

Transfer ud

Closed Pascal Engélibert requested to merge transfer_ud into master
5 unresolved threads
Files
2
@@ -27,11 +27,12 @@ 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},
traits::{One, Saturating, Zero},
};
use sp_runtime::traits::StaticLookup;
use sp_std::prelude::*;
const OFFCHAIN_PREFIX_UD_HISTORY: &[u8] = b"ud::history::";
@@ -251,5 +252,47 @@ pub mod pallet {
n.encode_to(&mut key);
sp_io::offchain_index::set(key.as_ref(), ud_amount.encode().as_ref());
}
fn inner_transfer_ud(
origin: OriginFor<T>,
dest: <T::Lookup as StaticLookup>::Source,
value: BalanceOf<T>,
existence_requirement: ExistenceRequirement,
) -> DispatchResultWithPostInfo {
let transactor = ensure_signed(origin)?;
let dest = T::Lookup::lookup(dest)?;
let ud_amount = <CurrentUdStorage<T>>::try_get()
.map_err(|_| DispatchError::Other("corrupted storage"))?;
T::Currency::transfer(
&transactor,
&dest,
value.saturating_mul(ud_amount) / BalanceOf::<T>::from(1000u32),
existence_requirement,
)?;
Ok(().into())
}
}
// CALLS //
#[pallet::call]
impl<T: Config> Pallet<T> {
/// Transfer some liquid free balance to another account, in milliUD.
#[pallet::weight(0)]
pub fn transfer_ud(
origin: OriginFor<T>,
dest: <T::Lookup as StaticLookup>::Source,
#[pallet::compact] value: BalanceOf<T>,
) -> DispatchResultWithPostInfo {
Self::inner_transfer_ud(origin, dest, value, ExistenceRequirement::AllowDeath)
}
/// Transfer some liquid free balance to another account, in milliUD.
#[pallet::weight(0)]
pub fn transfer_ud_keep_alive(
origin: OriginFor<T>,
dest: <T::Lookup as StaticLookup>::Source,
#[pallet::compact] value: BalanceOf<T>,
) -> DispatchResultWithPostInfo {
Self::inner_transfer_ud(origin, dest, value, ExistenceRequirement::KeepAlive)
}
}
}
Loading