1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
// Copyright 2019 Parity Technologies (UK) Ltd. // This file is part of substrate-subxt. // // subxt is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // subxt is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with substrate-subxt. If not, see <http://www.gnu.org/licenses/>. //! Implements support for the pallet_balances module. use crate::frame::{ system::System, Call, }; use codec::{ Decode, Encode, }; use frame_support::Parameter; use sp_runtime::traits::{ AtLeast32Bit, MaybeSerialize, Member, }; use std::fmt::Debug; /// The subset of the `pallet_balances::Trait` that a client must implement. pub trait Balances: System { /// The balance of an account. type Balance: Parameter + Member + AtLeast32Bit + codec::Codec + Default + Copy + MaybeSerialize + Debug + From<<Self as System>::BlockNumber>; } /// All balance information for an account. #[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, Default)] pub struct AccountData<Balance> { /// Non-reserved part of the balance. There may still be restrictions on this, but it is the /// total pool what may in principle be transferred, reserved and used for tipping. /// /// This is the only balance that matters in terms of most operations on tokens. It /// alone is used to determine the balance when in the contract execution environment. pub free: Balance, /// Balance which is reserved and may not be used at all. /// /// This can still get slashed, but gets slashed last of all. /// /// This balance is a 'reserve' balance that other subsystems use in order to set aside tokens /// that are still 'owned' by the account holder, but which are suspendable. pub reserved: Balance, /// The amount that `free` may not drop below when withdrawing for *anything except transaction /// fee payment*. pub misc_frozen: Balance, /// The amount that `free` may not drop below when withdrawing specifically for transaction /// fee payment. pub fee_frozen: Balance, } const MODULE: &str = "Balances"; const TRANSFER: &str = "transfer"; /// Arguments for transferring a balance #[derive(codec::Encode)] pub struct TransferArgs<T: Balances> { to: <T as System>::Address, #[codec(compact)] amount: <T as Balances>::Balance, } /// Transfer some liquid free balance to another account. /// /// `transfer` will set the `FreeBalance` of the sender and receiver. /// It will decrease the total issuance of the system by the `TransferFee`. /// If the sender's account is below the existential deposit as a result /// of the transfer, the account will be reaped. pub fn transfer<T: Balances>( to: <T as System>::Address, amount: <T as Balances>::Balance, ) -> Call<TransferArgs<T>> { Call::new(MODULE, TRANSFER, TransferArgs { to, amount }) }