From 9fb74b62f021575f3bc1df0f56cbb8f0a9dcf584 Mon Sep 17 00:00:00 2001 From: pifragile Date: Tue, 26 Jul 2022 13:43:44 +0200 Subject: [PATCH 01/10] wip --- Cargo.lock | 54 +++++++++++++++++++++++++++++++--------------- Cargo.toml | 31 +++++++++++++------------- node/Cargo.toml | 2 ++ node/src/rpc.rs | 7 +++++- runtime/Cargo.toml | 4 ++++ runtime/src/lib.rs | 11 ++++++++++ 6 files changed, 76 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6a6f44d9..e892ef48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1475,7 +1475,6 @@ dependencies = [ [[package]] name = "encointer-balances-tx-payment" version = "1.0.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "frame-support", @@ -1488,10 +1487,43 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "encointer-balances-tx-payment-rpc" +version = "1.0.0" +dependencies = [ + "encointer-balances-tx-payment-rpc-runtime-api", + "encointer-primitives", + "encointer-rpc", + "jsonrpsee", + "log", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc", + "parity-scale-codec", + "parking_lot 0.12.0", + "sc-rpc", + "sc-rpc-api", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "encointer-balances-tx-payment-rpc-runtime-api" +version = "1.0.0" +dependencies = [ + "encointer-balances-tx-payment", + "encointer-primitives", + "frame-support", + "sp-api", + "sp-std", +] + [[package]] name = "encointer-ceremonies-assignment" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "sp-runtime", @@ -1531,7 +1563,6 @@ dependencies = [ [[package]] name = "encointer-meetup-validation" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "parity-scale-codec", @@ -1546,6 +1577,8 @@ name = "encointer-node-notee" version = "1.2.0" dependencies = [ "clap 3.1.18", + "encointer-balances-tx-payment-rpc", + "encointer-balances-tx-payment-rpc-runtime-api", "encointer-node-notee-runtime", "frame-benchmarking", "frame-benchmarking-cli", @@ -1596,6 +1629,7 @@ name = "encointer-node-notee-runtime" version = "1.2.18" dependencies = [ "encointer-balances-tx-payment", + "encointer-balances-tx-payment-rpc-runtime-api", "encointer-primitives", "frame-benchmarking", "frame-executive", @@ -1644,7 +1678,6 @@ dependencies = [ [[package]] name = "encointer-primitives" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "bs58", "concat-arrays", @@ -1664,7 +1697,6 @@ dependencies = [ [[package]] name = "encointer-rpc" version = "0.1.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "jsonrpsee", "thiserror", @@ -1704,7 +1736,6 @@ checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" [[package]] name = "ep-core" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "impl-serde", "parity-scale-codec", @@ -4457,7 +4488,6 @@ dependencies = [ [[package]] name = "pallet-encointer-balances" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "approx", "encointer-primitives", @@ -4476,7 +4506,6 @@ dependencies = [ [[package]] name = "pallet-encointer-bazaar" version = "1.1.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "frame-benchmarking", @@ -4493,7 +4522,6 @@ dependencies = [ [[package]] name = "pallet-encointer-bazaar-rpc" version = "1.0.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "encointer-rpc", @@ -4512,7 +4540,6 @@ dependencies = [ [[package]] name = "pallet-encointer-bazaar-rpc-runtime-api" version = "1.0.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "frame-support", @@ -4523,7 +4550,6 @@ dependencies = [ [[package]] name = "pallet-encointer-ceremonies" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-ceremonies-assignment", "encointer-meetup-validation", @@ -4548,7 +4574,6 @@ dependencies = [ [[package]] name = "pallet-encointer-ceremonies-rpc" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "encointer-rpc", @@ -4567,7 +4592,6 @@ dependencies = [ [[package]] name = "pallet-encointer-ceremonies-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "frame-support", @@ -4578,7 +4602,6 @@ dependencies = [ [[package]] name = "pallet-encointer-communities" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "frame-benchmarking", @@ -4597,7 +4620,6 @@ dependencies = [ [[package]] name = "pallet-encointer-communities-rpc" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "encointer-rpc", @@ -4616,7 +4638,6 @@ dependencies = [ [[package]] name = "pallet-encointer-communities-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "sp-api", @@ -4626,7 +4647,6 @@ dependencies = [ [[package]] name = "pallet-encointer-scheduler" version = "1.1.0" -source = "git+https://github.com/encointer/pallets?branch=master#588953ebf300e51e1d7a752be1a72997dc526cf9" dependencies = [ "encointer-primitives", "frame-benchmarking", diff --git a/Cargo.toml b/Cargo.toml index 3409ac70..b9cfb72c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,21 +10,22 @@ members = [ ] #only while debugging -#[patch."https://github.com/encointer/pallets"] -#encointer-balances-tx-payment = { path = "../encointer-pallets/balances-tx-payment" } -#encointer-ceremonies-assignment = { path = "../encointer-pallets/ceremonies/assignment" } -#encointer-primitives = { path = "../encointer-pallets/primitives" } -#pallet-encointer-ceremonies = { path = "../encointer-pallets/ceremonies" } -#pallet-encointer-ceremonies-rpc = { path = "../encointer-pallets/ceremonies/rpc" } -#pallet-encointer-ceremonies-rpc-runtime-api = { path = "../encointer-pallets/ceremonies/rpc/runtime-api" } -#pallet-encointer-communities = { path = "../encointer-pallets/communities" } -#pallet-encointer-communities-rpc = { path = "../encointer-pallets/communities/rpc" } -#pallet-encointer-communities-rpc-runtime-api = { path = "../encointer-pallets/communities/rpc/runtime-api" } -#pallet-encointer-balances = { path = "../encointer-pallets/balances" } -#pallet-encointer-scheduler = { path = "../encointer-pallets/scheduler" } -#pallet-encointer-bazaar = { path = "../encointer-pallets/bazaar" } -#pallet-encointer-bazaar-rpc = { path = "../encointer-pallets/bazaar/rpc" } -#pallet-encointer-bazaar-rpc-runtime-api = { path = "../encointer-pallets/bazaar/rpc/runtime-api" } +[patch."https://github.com/encointer/pallets"] +encointer-balances-tx-payment = { path = "../pallets/balances-tx-payment" } +#encointer-balances-tx-payment-rpc-runtime-api = { path = "../pallets/balances-tx-payment/rpc/runtime-api" } +encointer-ceremonies-assignment = { path = "../pallets/ceremonies/assignment" } +encointer-primitives = { path = "../pallets/primitives" } +pallet-encointer-ceremonies = { path = "../pallets/ceremonies" } +pallet-encointer-ceremonies-rpc = { path = "../pallets/ceremonies/rpc" } +pallet-encointer-ceremonies-rpc-runtime-api = { path = "../pallets/ceremonies/rpc/runtime-api" } +pallet-encointer-communities = { path = "../pallets/communities" } +pallet-encointer-communities-rpc = { path = "../pallets/communities/rpc" } +pallet-encointer-communities-rpc-runtime-api = { path = "../pallets/communities/rpc/runtime-api" } +pallet-encointer-balances = { path = "../pallets/balances" } +pallet-encointer-scheduler = { path = "../pallets/scheduler" } +pallet-encointer-bazaar = { path = "../pallets/bazaar" } +pallet-encointer-bazaar-rpc = { path = "../pallets/bazaar/rpc" } +pallet-encointer-bazaar-rpc-runtime-api = { path = "../pallets/bazaar/rpc/runtime-api" } #[patch."https://github.com/scs/substrate-api-client"] #substrate-api-client = { path = "../substrate-api-client" } diff --git a/node/Cargo.toml b/node/Cargo.toml index 7d6113f8..5e47878e 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -72,6 +72,8 @@ pallet-encointer-communities-rpc = { git = "https://github.com/encointer/pallets pallet-encointer-communities-rpc-runtime-api = { git = "https://github.com/encointer/pallets", branch = "master"} pallet-encointer-bazaar-rpc = {git = "https://github.com/encointer/pallets", branch = "master"} pallet-encointer-bazaar-rpc-runtime-api = {git = "https://github.com/encointer/pallets", branch = "master"} +encointer-balances-tx-payment-rpc-runtime-api = { default-features = false, path = "../../pallets/balances-tx-payment/rpc/runtime-api" } +encointer-balances-tx-payment-rpc = { default-features = false, path = "../../pallets/balances-tx-payment/rpc" } # CLI-specific dependencies try-runtime-cli = { version = "0.10.0-dev", optional = true, git = "https://github.com/paritytech/substrate.git",branch = "master" } diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 7795e430..57d56ef8 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -7,7 +7,7 @@ use std::sync::Arc; -use encointer_node_notee_runtime::{opaque::Block, AccountId, Balance, BlockNumber, Index, Moment}; +use encointer_node_notee_runtime::{opaque::Block, AccountId, Balance, BlockNumber, Index, Moment, AssetBalance, AssetId}; use jsonrpsee::RpcModule; use sc_transaction_pool_api::TransactionPool; use sp_api::ProvideRuntimeApi; @@ -47,10 +47,12 @@ where C::Api: pallet_encointer_communities_rpc_runtime_api::CommunitiesApi, C::Api: pallet_encointer_bazaar_rpc_runtime_api::BazaarApi, + C::Api: encointer_balances_tx_payment_rpc_runtime_api::BalancesTxPaymentApi, P: TransactionPool + 'static, TBackend: sc_client_api::Backend, >::OffchainStorage: 'static, { + use encointer_balances_tx_payment_rpc::{BalancesTxPaymentApiServer, BalancesTxPaymentRpc}; use pallet_encointer_bazaar_rpc::{BazaarApiServer, BazaarRpc}; use pallet_encointer_ceremonies_rpc::{CeremoniesApiServer, CeremoniesRpc}; use pallet_encointer_communities_rpc::{CommunitiesApiServer, CommunitiesRpc}; @@ -61,7 +63,10 @@ where let FullDeps { client, pool, backend, offchain_indexing_enabled, deny_unsafe } = deps; module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; + let transaction_payment = TransactionPayment::new(client.clone()); + module.merge(TransactionPayment::new(client.clone()).into_rpc())?; + module.merge(BalancesTxPaymentRpc::new(client.clone(), transaction_payment).into_rpc())?; module.merge(BazaarRpc::new(client.clone(), deny_unsafe).into_rpc())?; diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 9c7bb926..334ef7b0 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -17,6 +17,9 @@ serde = { features = ["derive"], optional = true, version = "1.0.136" } # added # encointer deps encointer-primitives = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } encointer-balances-tx-payment = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } + +#encointer-balances-tx-rpc-runtime-api = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } +encointer-balances-tx-payment-rpc-runtime-api = { default-features = false, path = "../../pallets/balances-tx-payment/rpc/runtime-api" } pallet-encointer-balances = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } pallet-encointer-bazaar = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } pallet-encointer-bazaar-rpc-runtime-api = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } @@ -97,6 +100,7 @@ std = [ "sp-transaction-pool/std", "sp-version/std", "encointer-balances-tx-payment/std", + "encointer-balances-tx-payment-rpc-runtime-api/std", "encointer-primitives/std", "encointer-primitives/serde_derive", "pallet-encointer-balances/std", diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index af1a53ae..f363c636 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -30,6 +30,7 @@ use sp_version::NativeVersion; use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. +use frame_support::traits::tokens::BalanceConversion; pub use frame_support::{ construct_runtime, parameter_types, traits::{Contains, KeyOwnerProofSystem, Randomness, StorageInfo}, @@ -53,6 +54,7 @@ pub use pallet_encointer_ceremonies::Call as EncointerCeremoniesCall; pub use pallet_encointer_communities::Call as EncointerCommunitiesCall; pub use pallet_encointer_scheduler::Call as EncointerSchedulerCall; +pub use encointer_balances_tx_payment::{AssetBalanceOf, AssetIdOf, BalanceToCommunityBalance}; pub use encointer_primitives::{ balances::{BalanceEntry, BalanceType, Demurrage}, bazaar::{BusinessData, BusinessIdentifier, OfferingData}, @@ -88,6 +90,9 @@ pub type Hash = sp_core::H256; pub type Moment = u64; pub const ONE_DAY: Moment = 86_400_000; +pub type AssetId = AssetIdOf; +pub type AssetBalance = AssetBalanceOf; + /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know /// the specifics of the runtime. They can then be made to be agnostic over specific formats /// of data like extrinsics, allowing for them to continue syncing the network through upgrades @@ -720,6 +725,12 @@ impl_runtime_apis! { } } + impl encointer_balances_tx_payment_rpc_runtime_api::BalancesTxPaymentApi for Runtime { + fn balance_to_asset_balance(amount: Balance, asset_id: AssetId) -> AssetBalance { + BalanceToCommunityBalance::::to_asset_balance(amount, asset_id).unwrap() + } + } + #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn benchmark_metadata(extra: bool) -> ( From 2422f2187705f00b1195088d5bd7f11b7694596a Mon Sep 17 00:00:00 2001 From: pifragile Date: Tue, 26 Jul 2022 14:46:47 +0200 Subject: [PATCH 02/10] implement endpoint --- Cargo.lock | 2 +- node/src/rpc.rs | 11 +++++++++-- runtime/src/lib.rs | 6 ++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e892ef48..7d6c9dc1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1514,9 +1514,9 @@ dependencies = [ name = "encointer-balances-tx-payment-rpc-runtime-api" version = "1.0.0" dependencies = [ - "encointer-balances-tx-payment", "encointer-primitives", "frame-support", + "parity-scale-codec", "sp-api", "sp-std", ] diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 57d56ef8..c6c2e343 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -7,7 +7,9 @@ use std::sync::Arc; -use encointer_node_notee_runtime::{opaque::Block, AccountId, Balance, BlockNumber, Index, Moment, AssetBalance, AssetId}; +use encointer_node_notee_runtime::{ + opaque::Block, AccountId, AssetBalance, AssetId, Balance, BlockNumber, Index, Moment, +}; use jsonrpsee::RpcModule; use sc_transaction_pool_api::TransactionPool; use sp_api::ProvideRuntimeApi; @@ -47,7 +49,12 @@ where C::Api: pallet_encointer_communities_rpc_runtime_api::CommunitiesApi, C::Api: pallet_encointer_bazaar_rpc_runtime_api::BazaarApi, - C::Api: encointer_balances_tx_payment_rpc_runtime_api::BalancesTxPaymentApi, + C::Api: encointer_balances_tx_payment_rpc_runtime_api::BalancesTxPaymentApi< + Block, + Balance, + AssetId, + AssetBalance, + >, P: TransactionPool + 'static, TBackend: sc_client_api::Backend, >::OffchainStorage: 'static, diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index f363c636..d27d81b2 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -726,8 +726,10 @@ impl_runtime_apis! { } impl encointer_balances_tx_payment_rpc_runtime_api::BalancesTxPaymentApi for Runtime { - fn balance_to_asset_balance(amount: Balance, asset_id: AssetId) -> AssetBalance { - BalanceToCommunityBalance::::to_asset_balance(amount, asset_id).unwrap() + fn balance_to_asset_balance(amount: Balance, asset_id: AssetId) -> Result { + BalanceToCommunityBalance::::to_asset_balance(amount, asset_id).map_err(|_e| + encointer_balances_tx_payment_rpc_runtime_api::Error::RuntimeError + ) } } From 560a7b5a7490c046364f767d3c38a0df2ca186d2 Mon Sep 17 00:00:00 2001 From: pifragile Date: Wed, 27 Jul 2022 15:35:01 +0200 Subject: [PATCH 03/10] integrate asset fee details in cli --- client/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/Cargo.toml b/client/Cargo.toml index cb86d65d..091b9359 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -33,8 +33,11 @@ substrate-client-keystore = { git = "https://github.com/scs/substrate-api-client # substrate deps frame-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "master" } +frame-support = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "master" } +pallet-transaction-payment = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git",branch = "master" } sp-application-crypto = { version = "6.0.0", git = "https://github.com/paritytech/substrate.git", branch = "master" } sp-core = { version = "6.0.0", git = "https://github.com/paritytech/substrate.git", branch = "master" } +sp-rpc = { version = "6.0.0", git = "https://github.com/paritytech/substrate.git", branch = "master" } sp-keyring = { version = "6.0.0", git = "https://github.com/paritytech/substrate.git", branch = "master" } sp-keystore = { version = "0.12.0", git = "https://github.com/paritytech/substrate.git", branch = "master" } sp-runtime = { version = "6.0.0", git = "https://github.com/paritytech/substrate.git", branch = "master" } From e3ba458c70b746859563914f5885d7e8beb59ffa Mon Sep 17 00:00:00 2001 From: pifragile Date: Wed, 27 Jul 2022 15:35:30 +0200 Subject: [PATCH 04/10] integrate asset fee details in cli --- Cargo.lock | 3 +++ client/src/main.rs | 51 ++++++++++++++++++++++++++++++++++++++------- client/src/utils.rs | 40 +++++++++++++++++------------------ runtime/src/lib.rs | 2 +- 4 files changed, 66 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7d6c9dc1..ef8faab8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1541,6 +1541,7 @@ dependencies = [ "encointer-node-notee-runtime", "encointer-primitives", "env_logger", + "frame-support", "frame-system", "geojson", "hex", @@ -1549,12 +1550,14 @@ dependencies = [ "pallet-encointer-ceremonies", "pallet-encointer-communities", "pallet-encointer-scheduler", + "pallet-transaction-payment", "parity-scale-codec", "serde_json", "sp-application-crypto", "sp-core", "sp-keyring", "sp-keystore", + "sp-rpc", "sp-runtime", "substrate-api-client", "substrate-client-keystore", diff --git a/client/src/main.rs b/client/src/main.rs index 465ce79a..74e29814 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -73,6 +73,9 @@ use substrate_api_client::{ }; use substrate_client_keystore::{KeystoreExt, LocalKeystore}; +use pallet_transaction_payment::{FeeDetails}; +use sp_rpc::number::NumberOrHex; + type AccountPublic = ::Signer; const KEYSTORE_PATH: &str = "my_keystore"; const PREFUNDING_NR_OF_TRANSFER_EXTRINSICS: u128 = 1000; @@ -227,14 +230,8 @@ fn main() { let accountid = get_accountid_from_str(account); match matches.cid_arg() { Some(cid_str) => { - let cid = verify_cid(&api, cid_str, maybe_at); - let bn = get_block_number(&api); - let dr = get_demurrage_per_block(&api, cid); - let balance = if let Some(entry) = api - .get_storage_double_map("EncointerBalances", "Balance", cid, accountid, maybe_at).unwrap() { - apply_demurrage(entry, bn, dr) - } else { BalanceType::from_num(0) }; - println!("{}", balance); + let balance = get_community_balance(&api, &cid_str, &accountid, maybe_at); + println!{"{:?}", balance}; } None => { if matches.all_flag() { @@ -1449,6 +1446,26 @@ fn get_block_number(api: &Api) -> BlockNumber { hdr.number } +pub fn get_community_balance( + api: &Api, + cid_str: &str, + account_id: &AccountId, + maybe_at: Option, +) -> BalanceType { + let cid = verify_cid(&api, cid_str, maybe_at); + let bn = get_block_number(&api); + let dr = get_demurrage_per_block(&api, cid); + let balance = if let Some(entry) = api + .get_storage_double_map("EncointerBalances", "Balance", cid, account_id, maybe_at) + .unwrap() + { + apply_demurrage(entry, bn, dr) + } else { + BalanceType::from_num(0) + }; + balance +} + fn get_demurrage_per_block(api: &Api, cid: CommunityIdentifier) -> Demurrage { let d: Option = api .get_storage_map("EncointerBalances", "DemurragePerBlock", cid, None) @@ -1642,6 +1659,24 @@ fn get_all_balances( serde_json::from_str(&n).ok() } +fn get_asset_fee_details( + api: &Api, + cid_str: &str, + encoded_xt: &str, +) -> Option> { + let cid = verify_cid(&api, cid_str, None); + let req = json!({ + "method": "encointer_queryAssetFeeDetails", + "params": vec![to_value(cid).unwrap(), to_value(encoded_xt).unwrap()], + "jsonrpc": "2.0", + "id": "1", + }); + + let n = api.get_request(req.into()).unwrap().expect("Could not query asset fee details"); + + Some(serde_json::from_str(&n).unwrap()) +} + fn prove_attendance( prover: AccountId, cid: CommunityIdentifier, diff --git a/client/src/utils.rs b/client/src/utils.rs index 21973a3a..6a4b9d4c 100644 --- a/client/src/utils.rs +++ b/client/src/utils.rs @@ -1,15 +1,17 @@ -use crate::{exit_code, verify_cid}; +use crate::{ + exit_code, get_asset_fee_details, get_community_balance, BalanceType, +}; use codec::{Compact, Encode}; use encointer_api_client_extension::{Api, EncointerXt}; -use encointer_node_notee_runtime::{AccountId, BalanceEntry, BlockNumber}; -use encointer_primitives::scheduler::CeremonyIndexType; +use encointer_node_notee_runtime::{AccountId}; +use encointer_primitives::{balances::EncointerBalanceConverter, scheduler::CeremonyIndexType}; use log::{debug, error, info}; use sp_core::{Pair, H256}; +use sp_runtime::traits::Convert; use substrate_api_client::{ compose_call, compose_extrinsic_offline, ApiClientError, ApiResult as Result, ExtrinsicParams, Metadata, XtStatus, }; - /// Wrapper around the `compose_extrinsic_offline!` macro to be less verbose. pub fn offline_xt(api: &Api, call: C, nonce: u32) -> EncointerXt { compose_extrinsic_offline!(api.clone().signer.unwrap(), call, api.extrinsic_params(nonce)) @@ -102,30 +104,26 @@ pub fn contains_sudo_pallet(metadata: &Metadata) -> bool { /// Checks if the account has sufficient funds. Exits the process if not. pub fn ensure_payment(api: &Api, xt: &str, tx_payment_cid: Option<&str>) { if let Some(cid_str) = tx_payment_cid { - ensure_payment_cc(api, cid_str); + ensure_payment_cc(api, cid_str, xt); } else { ensure_payment_native(api, xt); } } -fn ensure_payment_cc(api: &Api, cid_str: &str) { - let cid = verify_cid(&api, cid_str, None); - match api - .get_storage_double_map::<_, _, BalanceEntry>( - "EncointerBalances", - "Balance", - cid, - &api.signer_account().unwrap(), - None, - ) +fn ensure_payment_cc(api: &Api, cid_str: &str, xt: &str) { + let balance: BalanceType = + get_community_balance(api, cid_str, &api.signer_account().unwrap(), None); + let asset_balance: u128 = EncointerBalanceConverter::convert(balance); + + let fee: u128 = get_asset_fee_details(&api, cid_str, xt) .unwrap() - { - None => { - error!("No balance available in community {}", cid); - std::process::exit(exit_code::FEE_PAYMENT_FAILED); - }, - _ => (), + .inclusion_fee + .map_or_else(|| 0u128, |details| details.base_fee.into_u256().as_u128()); + if asset_balance < fee { + error!("insufficient funds: fee: {} bal: {:?}", fee, balance); + std::process::exit(exit_code::FEE_PAYMENT_FAILED); } + debug!("account can pay fees: fee: {} bal: {}", fee, balance); } fn ensure_payment_native(api: &Api, xt: &str) { diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index d27d81b2..97b7daa2 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -727,7 +727,7 @@ impl_runtime_apis! { impl encointer_balances_tx_payment_rpc_runtime_api::BalancesTxPaymentApi for Runtime { fn balance_to_asset_balance(amount: Balance, asset_id: AssetId) -> Result { - BalanceToCommunityBalance::::to_asset_balance(amount, asset_id).map_err(|_e| + BalanceToCommunityBalance::::to_asset_balance(amount, asset_id).map_err(|_e| encointer_balances_tx_payment_rpc_runtime_api::Error::RuntimeError ) } From fd77cb94a7bd344be4d41b8d8655edab6b4e2dca Mon Sep 17 00:00:00 2001 From: pifragile Date: Wed, 27 Jul 2022 15:52:58 +0200 Subject: [PATCH 05/10] fmt --- client/src/main.rs | 2 +- client/src/utils.rs | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/client/src/main.rs b/client/src/main.rs index 74e29814..35595142 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -73,7 +73,7 @@ use substrate_api_client::{ }; use substrate_client_keystore::{KeystoreExt, LocalKeystore}; -use pallet_transaction_payment::{FeeDetails}; +use pallet_transaction_payment::FeeDetails; use sp_rpc::number::NumberOrHex; type AccountPublic = ::Signer; diff --git a/client/src/utils.rs b/client/src/utils.rs index 6a4b9d4c..54265fff 100644 --- a/client/src/utils.rs +++ b/client/src/utils.rs @@ -1,9 +1,7 @@ -use crate::{ - exit_code, get_asset_fee_details, get_community_balance, BalanceType, -}; +use crate::{exit_code, get_asset_fee_details, get_community_balance, BalanceType}; use codec::{Compact, Encode}; use encointer_api_client_extension::{Api, EncointerXt}; -use encointer_node_notee_runtime::{AccountId}; +use encointer_node_notee_runtime::AccountId; use encointer_primitives::{balances::EncointerBalanceConverter, scheduler::CeremonyIndexType}; use log::{debug, error, info}; use sp_core::{Pair, H256}; From 46c3efc956ab6a36cf1cc0a6839501b4c0b0d6fd Mon Sep 17 00:00:00 2001 From: pifragile Date: Mon, 8 Aug 2022 11:54:14 +0200 Subject: [PATCH 06/10] use runtime api instead of server --- client/src/utils.rs | 2 +- node/src/rpc.rs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/client/src/utils.rs b/client/src/utils.rs index 54265fff..52a9ef32 100644 --- a/client/src/utils.rs +++ b/client/src/utils.rs @@ -118,7 +118,7 @@ fn ensure_payment_cc(api: &Api, cid_str: &str, xt: &str) { .inclusion_fee .map_or_else(|| 0u128, |details| details.base_fee.into_u256().as_u128()); if asset_balance < fee { - error!("insufficient funds: fee: {} bal: {:?}", fee, balance); + error!("insufficient funds: fee: {} bal: {:?}", fee, asset_balance); std::process::exit(exit_code::FEE_PAYMENT_FAILED); } debug!("account can pay fees: fee: {} bal: {}", fee, balance); diff --git a/node/src/rpc.rs b/node/src/rpc.rs index c6c2e343..f1f22641 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -70,10 +70,9 @@ where let FullDeps { client, pool, backend, offchain_indexing_enabled, deny_unsafe } = deps; module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; - let transaction_payment = TransactionPayment::new(client.clone()); module.merge(TransactionPayment::new(client.clone()).into_rpc())?; - module.merge(BalancesTxPaymentRpc::new(client.clone(), transaction_payment).into_rpc())?; + module.merge(BalancesTxPaymentRpc::new(client.clone()).into_rpc())?; module.merge(BazaarRpc::new(client.clone(), deny_unsafe).into_rpc())?; From 4961a9064152177d1220ac17926b2f6f7adba9f6 Mon Sep 17 00:00:00 2001 From: pifragile Date: Wed, 10 Aug 2022 14:54:16 +0200 Subject: [PATCH 07/10] remove patches --- Cargo.toml | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b9cfb72c..3409ac70 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,22 +10,21 @@ members = [ ] #only while debugging -[patch."https://github.com/encointer/pallets"] -encointer-balances-tx-payment = { path = "../pallets/balances-tx-payment" } -#encointer-balances-tx-payment-rpc-runtime-api = { path = "../pallets/balances-tx-payment/rpc/runtime-api" } -encointer-ceremonies-assignment = { path = "../pallets/ceremonies/assignment" } -encointer-primitives = { path = "../pallets/primitives" } -pallet-encointer-ceremonies = { path = "../pallets/ceremonies" } -pallet-encointer-ceremonies-rpc = { path = "../pallets/ceremonies/rpc" } -pallet-encointer-ceremonies-rpc-runtime-api = { path = "../pallets/ceremonies/rpc/runtime-api" } -pallet-encointer-communities = { path = "../pallets/communities" } -pallet-encointer-communities-rpc = { path = "../pallets/communities/rpc" } -pallet-encointer-communities-rpc-runtime-api = { path = "../pallets/communities/rpc/runtime-api" } -pallet-encointer-balances = { path = "../pallets/balances" } -pallet-encointer-scheduler = { path = "../pallets/scheduler" } -pallet-encointer-bazaar = { path = "../pallets/bazaar" } -pallet-encointer-bazaar-rpc = { path = "../pallets/bazaar/rpc" } -pallet-encointer-bazaar-rpc-runtime-api = { path = "../pallets/bazaar/rpc/runtime-api" } +#[patch."https://github.com/encointer/pallets"] +#encointer-balances-tx-payment = { path = "../encointer-pallets/balances-tx-payment" } +#encointer-ceremonies-assignment = { path = "../encointer-pallets/ceremonies/assignment" } +#encointer-primitives = { path = "../encointer-pallets/primitives" } +#pallet-encointer-ceremonies = { path = "../encointer-pallets/ceremonies" } +#pallet-encointer-ceremonies-rpc = { path = "../encointer-pallets/ceremonies/rpc" } +#pallet-encointer-ceremonies-rpc-runtime-api = { path = "../encointer-pallets/ceremonies/rpc/runtime-api" } +#pallet-encointer-communities = { path = "../encointer-pallets/communities" } +#pallet-encointer-communities-rpc = { path = "../encointer-pallets/communities/rpc" } +#pallet-encointer-communities-rpc-runtime-api = { path = "../encointer-pallets/communities/rpc/runtime-api" } +#pallet-encointer-balances = { path = "../encointer-pallets/balances" } +#pallet-encointer-scheduler = { path = "../encointer-pallets/scheduler" } +#pallet-encointer-bazaar = { path = "../encointer-pallets/bazaar" } +#pallet-encointer-bazaar-rpc = { path = "../encointer-pallets/bazaar/rpc" } +#pallet-encointer-bazaar-rpc-runtime-api = { path = "../encointer-pallets/bazaar/rpc/runtime-api" } #[patch."https://github.com/scs/substrate-api-client"] #substrate-api-client = { path = "../substrate-api-client" } From 79b3cb11053a66450ffe55896d77e6c1f7517ca5 Mon Sep 17 00:00:00 2001 From: pifragile Date: Wed, 10 Aug 2022 15:09:26 +0200 Subject: [PATCH 08/10] remove all patches --- Cargo.lock | 31 +++++++++++++++++++------------ node/Cargo.toml | 4 ++-- runtime/Cargo.toml | 4 +--- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ef8faab8..7430e4b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -884,17 +884,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "concat-arrays" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df715824eb382e34b7afb7463b0247bf41538aeba731fba05241ecdb5dc3747" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "concurrent-queue" version = "1.2.2" @@ -1475,6 +1464,7 @@ dependencies = [ [[package]] name = "encointer-balances-tx-payment" version = "1.0.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "frame-support", @@ -1490,6 +1480,7 @@ dependencies = [ [[package]] name = "encointer-balances-tx-payment-rpc" version = "1.0.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-balances-tx-payment-rpc-runtime-api", "encointer-primitives", @@ -1513,6 +1504,7 @@ dependencies = [ [[package]] name = "encointer-balances-tx-payment-rpc-runtime-api" version = "1.0.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "frame-support", @@ -1524,6 +1516,7 @@ dependencies = [ [[package]] name = "encointer-ceremonies-assignment" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "sp-runtime", @@ -1566,6 +1559,7 @@ dependencies = [ [[package]] name = "encointer-meetup-validation" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "parity-scale-codec", @@ -1681,9 +1675,9 @@ dependencies = [ [[package]] name = "encointer-primitives" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "bs58", - "concat-arrays", "crc", "ep-core", "geohash", @@ -1700,6 +1694,7 @@ dependencies = [ [[package]] name = "encointer-rpc" version = "0.1.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "jsonrpsee", "thiserror", @@ -1739,6 +1734,7 @@ checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" [[package]] name = "ep-core" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "impl-serde", "parity-scale-codec", @@ -4491,6 +4487,7 @@ dependencies = [ [[package]] name = "pallet-encointer-balances" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "approx", "encointer-primitives", @@ -4509,6 +4506,7 @@ dependencies = [ [[package]] name = "pallet-encointer-bazaar" version = "1.1.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "frame-benchmarking", @@ -4525,6 +4523,7 @@ dependencies = [ [[package]] name = "pallet-encointer-bazaar-rpc" version = "1.0.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "encointer-rpc", @@ -4543,6 +4542,7 @@ dependencies = [ [[package]] name = "pallet-encointer-bazaar-rpc-runtime-api" version = "1.0.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "frame-support", @@ -4553,6 +4553,7 @@ dependencies = [ [[package]] name = "pallet-encointer-ceremonies" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-ceremonies-assignment", "encointer-meetup-validation", @@ -4577,6 +4578,7 @@ dependencies = [ [[package]] name = "pallet-encointer-ceremonies-rpc" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "encointer-rpc", @@ -4595,6 +4597,7 @@ dependencies = [ [[package]] name = "pallet-encointer-ceremonies-rpc-runtime-api" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "frame-support", @@ -4605,6 +4608,7 @@ dependencies = [ [[package]] name = "pallet-encointer-communities" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "frame-benchmarking", @@ -4623,6 +4627,7 @@ dependencies = [ [[package]] name = "pallet-encointer-communities-rpc" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "encointer-rpc", @@ -4641,6 +4646,7 @@ dependencies = [ [[package]] name = "pallet-encointer-communities-rpc-runtime-api" version = "1.2.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "sp-api", @@ -4650,6 +4656,7 @@ dependencies = [ [[package]] name = "pallet-encointer-scheduler" version = "1.1.0" +source = "git+https://github.com/encointer/pallets?branch=master#5b673f0141d47a406f2b0f4d98cfba93521cac28" dependencies = [ "encointer-primitives", "frame-benchmarking", diff --git a/node/Cargo.toml b/node/Cargo.toml index 5e47878e..a256a92d 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -72,8 +72,8 @@ pallet-encointer-communities-rpc = { git = "https://github.com/encointer/pallets pallet-encointer-communities-rpc-runtime-api = { git = "https://github.com/encointer/pallets", branch = "master"} pallet-encointer-bazaar-rpc = {git = "https://github.com/encointer/pallets", branch = "master"} pallet-encointer-bazaar-rpc-runtime-api = {git = "https://github.com/encointer/pallets", branch = "master"} -encointer-balances-tx-payment-rpc-runtime-api = { default-features = false, path = "../../pallets/balances-tx-payment/rpc/runtime-api" } -encointer-balances-tx-payment-rpc = { default-features = false, path = "../../pallets/balances-tx-payment/rpc" } +encointer-balances-tx-payment-rpc-runtime-api = { git = "https://github.com/encointer/pallets", branch = "master" } +encointer-balances-tx-payment-rpc = { git = "https://github.com/encointer/pallets", branch = "master" } # CLI-specific dependencies try-runtime-cli = { version = "0.10.0-dev", optional = true, git = "https://github.com/paritytech/substrate.git",branch = "master" } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 334ef7b0..c7654b36 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -17,9 +17,7 @@ serde = { features = ["derive"], optional = true, version = "1.0.136" } # added # encointer deps encointer-primitives = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } encointer-balances-tx-payment = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } - -#encointer-balances-tx-rpc-runtime-api = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } -encointer-balances-tx-payment-rpc-runtime-api = { default-features = false, path = "../../pallets/balances-tx-payment/rpc/runtime-api" } +encointer-balances-tx-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } pallet-encointer-balances = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } pallet-encointer-bazaar = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } pallet-encointer-bazaar-rpc-runtime-api = { default-features = false, git = "https://github.com/encointer/pallets", branch = "master" } From c075b69a55b4b6a59fa836f7544305beb732b29a Mon Sep 17 00:00:00 2001 From: Christian Langenbacher Date: Sun, 14 Aug 2022 13:29:05 +0200 Subject: [PATCH 09/10] [client] enhance log output to identify when fees are paid in CC --- client/src/utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/utils.rs b/client/src/utils.rs index 52a9ef32..371625fc 100644 --- a/client/src/utils.rs +++ b/client/src/utils.rs @@ -121,7 +121,7 @@ fn ensure_payment_cc(api: &Api, cid_str: &str, xt: &str) { error!("insufficient funds: fee: {} bal: {:?}", fee, asset_balance); std::process::exit(exit_code::FEE_PAYMENT_FAILED); } - debug!("account can pay fees: fee: {} bal: {}", fee, balance); + debug!("account can pay fees in CC: fee: {} bal: {}", fee, balance); } fn ensure_payment_native(api: &Api, xt: &str) { @@ -143,7 +143,7 @@ fn ensure_payment_native(api: &Api, xt: &str) { error!("insufficient funds: fee: {} ed: {} bal: {:?}", fee, ed, signer_balance); std::process::exit(exit_code::FEE_PAYMENT_FAILED); } - debug!("account can pay fees: fee: {} ed: {} bal: {}", fee, ed, signer_balance); + debug!("account can pay native fees: fee: {} ed: {} bal: {}", fee, ed, signer_balance); } /// Handles the potential case of a negative ceremony index CLI. From 4cb730f891b6e37e6a14e3e0e55f6cb7d7ae3011 Mon Sep 17 00:00:00 2001 From: Christian Langenbacher Date: Sun, 14 Aug 2022 13:45:12 +0200 Subject: [PATCH 10/10] [client] human readable output for CC fee. --- client/src/utils.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/src/utils.rs b/client/src/utils.rs index 371625fc..71b464f9 100644 --- a/client/src/utils.rs +++ b/client/src/utils.rs @@ -111,14 +111,16 @@ pub fn ensure_payment(api: &Api, xt: &str, tx_payment_cid: Option<&str>) { fn ensure_payment_cc(api: &Api, cid_str: &str, xt: &str) { let balance: BalanceType = get_community_balance(api, cid_str, &api.signer_account().unwrap(), None); - let asset_balance: u128 = EncointerBalanceConverter::convert(balance); - let fee: u128 = get_asset_fee_details(&api, cid_str, xt) + let fee: BalanceType = get_asset_fee_details(&api, cid_str, xt) .unwrap() .inclusion_fee - .map_or_else(|| 0u128, |details| details.base_fee.into_u256().as_u128()); - if asset_balance < fee { - error!("insufficient funds: fee: {} bal: {:?}", fee, asset_balance); + .map(|details| details.base_fee.into_u256().as_u128()) + .map(EncointerBalanceConverter::convert) + .unwrap_or_default(); + + if balance < fee { + error!("insufficient funds in CC: fee: {} bal: {:?}", fee, balance); std::process::exit(exit_code::FEE_PAYMENT_FAILED); } debug!("account can pay fees in CC: fee: {} bal: {}", fee, balance);