lib.rs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // Ensure we're `no_std` when compiling for Wasm.
  2. #![cfg_attr(not(feature = "std"), no_std)]
  3. use frame_support::traits::Currency;
  4. use frame_support::{decl_event, decl_module, decl_storage, ensure};
  5. use frame_system::ensure_signed;
  6. use sp_arithmetic::traits::Zero;
  7. use sp_std::vec::Vec;
  8. use common::currency::GovernanceCurrency;
  9. pub trait Trait: frame_system::Trait + GovernanceCurrency {
  10. type Event: From<Event<Self>> + Into<<Self as frame_system::Trait>::Event>;
  11. }
  12. pub type MemoText = Vec<u8>;
  13. decl_storage! {
  14. trait Store for Module<T: Trait> as Memo {
  15. Memo get(fn memo) : map hasher(blake2_128_concat) T::AccountId => MemoText;
  16. MaxMemoLength get(fn max_memo_length) : u32 = 4096;
  17. }
  18. }
  19. decl_event! {
  20. pub enum Event<T> where <T as frame_system::Trait>::AccountId {
  21. MemoUpdated(AccountId),
  22. }
  23. }
  24. decl_module! {
  25. pub struct Module<T: Trait> for enum Call where origin: T::Origin {
  26. fn deposit_event() = default;
  27. #[weight = 10_000_000] // TODO: adjust weight
  28. fn update_memo(origin, memo: MemoText) {
  29. let sender = ensure_signed(origin)?;
  30. ensure!(!T::Currency::total_balance(&sender).is_zero(), "account must have a balance");
  31. ensure!(memo.len() as u32 <= Self::max_memo_length(), "memo too long");
  32. <Memo<T>>::insert(&sender, memo);
  33. Self::deposit_event(RawEvent::MemoUpdated(sender));
  34. }
  35. }
  36. }