diff --git a/core/src/client/client.rs b/core/src/client/client.rs
index d5efdb8de9..db701cee44 100644
--- a/core/src/client/client.rs
+++ b/core/src/client/client.rs
@@ -31,6 +31,7 @@ use crate::scheme::Scheme;
use crate::service::ClientIoMessage;
use crate::transaction::{LocalizedTransaction, PendingSignedTransactions, SignedTransaction, UnverifiedTransaction};
use crate::types::{BlockId, BlockStatus, TransactionId, VerificationQueueInfo as BlockQueueInfo};
+use crate::MemPoolMinFees;
use cdb::{new_journaldb, Algorithm, AsHashDB, DatabaseError};
use cio::IoChannel;
use ckey::{Address, NetworkId, PlatformAddress, Public};
@@ -826,6 +827,10 @@ impl MiningBlockChainClient for Client {
fn register_immune_users(&self, immune_user_vec: Vec
) {
self.importer.miner.register_immune_users(immune_user_vec)
}
+
+ fn mem_pool_min_fees(&self) -> MemPoolMinFees {
+ self.importer.miner.get_options().mem_pool_min_fees
+ }
}
impl ChainTimeInfo for Client {
diff --git a/core/src/client/mod.rs b/core/src/client/mod.rs
index 487330c4c9..53bc350b07 100644
--- a/core/src/client/mod.rs
+++ b/core/src/client/mod.rs
@@ -33,6 +33,7 @@ use crate::blockchain_info::BlockChainInfo;
use crate::consensus::EngineError;
use crate::encoded;
use crate::error::{BlockImportError, Error as GenericError};
+use crate::miner::MemPoolMinFees;
use crate::transaction::{LocalizedTransaction, PendingSignedTransactions, SignedTransaction};
use crate::types::{BlockId, BlockStatus, TransactionId, VerificationQueueInfo as BlockQueueInfo};
use cdb::DatabaseError;
@@ -290,6 +291,8 @@ pub trait MiningBlockChainClient: BlockChainClient + BlockProducer + FindActionH
/// Append designated users to the immune user list.
fn register_immune_users(&self, immune_user_vec: Vec);
+
+ fn mem_pool_min_fees(&self) -> MemPoolMinFees;
}
/// Provides methods to access database.
diff --git a/core/src/client/test_client.rs b/core/src/client/test_client.rs
index 518c8fd8e5..527a150f57 100644
--- a/core/src/client/test_client.rs
+++ b/core/src/client/test_client.rs
@@ -41,7 +41,7 @@ use crate::consensus::EngineError;
use crate::db::{COL_STATE, NUM_COLUMNS};
use crate::encoded;
use crate::error::{BlockImportError, Error as GenericError};
-use crate::miner::{Miner, MinerService, TransactionImportResult};
+use crate::miner::{MemPoolMinFees, Miner, MinerService, TransactionImportResult};
use crate::scheme::Scheme;
use crate::transaction::{LocalizedTransaction, PendingSignedTransactions, SignedTransaction};
use crate::types::{BlockId, TransactionId, VerificationQueueInfo as QueueInfo};
@@ -373,6 +373,10 @@ impl MiningBlockChainClient for TestBlockChainClient {
fn register_immune_users(&self, immune_user_vec: Vec) {
self.miner.register_immune_users(immune_user_vec)
}
+
+ fn mem_pool_min_fees(&self) -> MemPoolMinFees {
+ self.miner.get_options().mem_pool_min_fees
+ }
}
impl AccountData for TestBlockChainClient {
diff --git a/core/src/lib.rs b/core/src/lib.rs
index b76df55952..cfa928bee9 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -75,7 +75,7 @@ pub use crate::consensus::stake;
pub use crate::consensus::{EngineType, TimeGapParams};
pub use crate::db::{COL_STATE, NUM_COLUMNS};
pub use crate::error::{BlockImportError, Error, ImportError};
-pub use crate::miner::{MemPoolFees, Miner, MinerOptions, MinerService};
+pub use crate::miner::{MemPoolMinFees, Miner, MinerOptions, MinerService};
pub use crate::peer_db::PeerDb;
pub use crate::rlp::Encodable;
pub use crate::scheme::Scheme;
diff --git a/core/src/miner/mem_pool.rs b/core/src/miner/mem_pool.rs
index 42a77abd92..7494016ed2 100644
--- a/core/src/miner/mem_pool.rs
+++ b/core/src/miner/mem_pool.rs
@@ -16,8 +16,8 @@
use super::backup;
use super::mem_pool_types::{
- AccountDetails, CurrentQueue, FutureQueue, MemPoolFees, MemPoolInput, MemPoolItem, MemPoolStatus, PoolingInstant,
- QueueTag, TransactionOrder, TransactionOrderWithTag, TxOrigin, TxTimelock,
+ AccountDetails, CurrentQueue, FutureQueue, MemPoolInput, MemPoolItem, MemPoolMinFees, MemPoolStatus,
+ PoolingInstant, QueueTag, TransactionOrder, TransactionOrderWithTag, TxOrigin, TxTimelock,
};
use super::TransactionImportResult;
use crate::client::{AccountData, BlockChainTrait};
@@ -73,7 +73,7 @@ impl From for Error {
pub struct MemPool {
/// Fee threshold for transactions that can be imported to this pool
- minimum_fees: MemPoolFees,
+ minimum_fees: MemPoolMinFees,
/// A value which is used to check whether a new transaciton can replace a transaction in the memory pool with the same signer and seq.
/// If the fee of the new transaction is `new_fee` and the fee of the transaction in the memory pool is `old_fee`,
/// then `new_fee > old_fee + old_fee >> mem_pool_fee_bump_shift` should be satisfied to replace.
@@ -118,7 +118,7 @@ impl MemPool {
memory_limit: usize,
fee_bump_shift: usize,
db: Arc,
- minimum_fees: MemPoolFees,
+ minimum_fees: MemPoolMinFees,
) -> Self {
MemPool {
minimum_fees,
@@ -1410,7 +1410,7 @@ pub mod test {
let test_client = TestBlockChainClient::new();
// Set the pay transaction minimum fee
- let fees = MemPoolFees::create_from_options(
+ let fees = MemPoolMinFees::create_from_options(
Some(150),
None,
None,
@@ -1463,7 +1463,7 @@ pub mod test {
fn external_transactions_whose_fees_are_under_the_mem_pool_min_fee_are_rejected() {
let test_client = TestBlockChainClient::new();
// Set the pay transaction minimum fee
- let fees = MemPoolFees::create_from_options(
+ let fees = MemPoolMinFees::create_from_options(
Some(150),
None,
None,
diff --git a/core/src/miner/mem_pool_types.rs b/core/src/miner/mem_pool_types.rs
index aeb535e3db..3421b0da44 100644
--- a/core/src/miner/mem_pool_types.rs
+++ b/core/src/miner/mem_pool_types.rs
@@ -420,22 +420,22 @@ pub struct AccountDetails {
#[derive(Default, Clone, Copy, Debug, PartialEq)]
/// Minimum fee thresholds defined not by network but by Mempool
-pub struct MemPoolFees {
- min_pay_transaction_cost: u64,
- min_set_regular_key_transaction_cost: u64,
- min_create_shard_transaction_cost: u64,
- min_set_shard_owners_transaction_cost: u64,
- min_set_shard_users_transaction_cost: u64,
- min_wrap_ccc_transaction_cost: u64,
- min_custom_transaction_cost: u64,
- min_asset_mint_cost: u64,
- min_asset_transfer_cost: u64,
- min_asset_scheme_change_cost: u64,
- min_asset_supply_increase_cost: u64,
- min_asset_unwrap_ccc_cost: u64,
+pub struct MemPoolMinFees {
+ pub min_pay_transaction_cost: u64,
+ pub min_set_regular_key_transaction_cost: u64,
+ pub min_create_shard_transaction_cost: u64,
+ pub min_set_shard_owners_transaction_cost: u64,
+ pub min_set_shard_users_transaction_cost: u64,
+ pub min_wrap_ccc_transaction_cost: u64,
+ pub min_custom_transaction_cost: u64,
+ pub min_asset_mint_cost: u64,
+ pub min_asset_transfer_cost: u64,
+ pub min_asset_scheme_change_cost: u64,
+ pub min_asset_supply_increase_cost: u64,
+ pub min_asset_unwrap_ccc_cost: u64,
}
-impl MemPoolFees {
+impl MemPoolMinFees {
#[allow(clippy::too_many_arguments)]
pub fn create_from_options(
min_pay_cost_option: Option,
@@ -451,7 +451,7 @@ impl MemPoolFees {
min_asset_supply_increase_cost_option: Option,
min_asset_unwrap_ccc_cost_option: Option,
) -> Self {
- MemPoolFees {
+ MemPoolMinFees {
min_pay_transaction_cost: min_pay_cost_option.unwrap_or_default(),
min_set_regular_key_transaction_cost: min_set_regular_key_cost_option.unwrap_or_default(),
min_create_shard_transaction_cost: min_create_shard_cost_option.unwrap_or_default(),
diff --git a/core/src/miner/miner.rs b/core/src/miner/miner.rs
index 47103cd271..cafade4d1e 100644
--- a/core/src/miner/miner.rs
+++ b/core/src/miner/miner.rs
@@ -15,7 +15,7 @@
// along with this program. If not, see .
use super::mem_pool::{Error as MemPoolError, MemPool};
-pub use super::mem_pool_types::MemPoolFees;
+pub use super::mem_pool_types::MemPoolMinFees;
use super::mem_pool_types::{MemPoolInput, TxOrigin, TxTimelock};
use super::{fetch_account_creator, MinerService, MinerStatus, TransactionImportResult};
use crate::account_provider::{AccountProvider, Error as AccountProviderError};
@@ -69,7 +69,7 @@ pub struct MinerOptions {
pub mem_pool_fee_bump_shift: usize,
pub allow_create_shard: bool,
/// Minimum fees configured by the machine.
- pub mem_pool_fees: MemPoolFees,
+ pub mem_pool_min_fees: MemPoolMinFees,
}
impl Default for MinerOptions {
@@ -83,7 +83,7 @@ impl Default for MinerOptions {
mem_pool_memory_limit: Some(2 * 1024 * 1024),
mem_pool_fee_bump_shift: 3,
allow_create_shard: false,
- mem_pool_fees: Default::default(),
+ mem_pool_min_fees: Default::default(),
}
}
}
@@ -137,7 +137,7 @@ impl Miner {
mem_limit,
options.mem_pool_fee_bump_shift,
db,
- options.mem_pool_fees,
+ options.mem_pool_min_fees,
)));
Self {
diff --git a/core/src/miner/mod.rs b/core/src/miner/mod.rs
index e211d93093..24be1d0841 100644
--- a/core/src/miner/mod.rs
+++ b/core/src/miner/mod.rs
@@ -29,7 +29,7 @@ use primitives::Bytes;
use std::ops::Range;
use self::mem_pool_types::AccountDetails;
-pub use self::mem_pool_types::MemPoolFees;
+pub use self::mem_pool_types::MemPoolMinFees;
pub use self::miner::{AuthoringParams, Miner, MinerOptions};
use crate::account_provider::{AccountProvider, Error as AccountProviderError};
use crate::client::{
diff --git a/foundry/config/mod.rs b/foundry/config/mod.rs
index 32ce97dfd4..beee5ae4a2 100644
--- a/foundry/config/mod.rs
+++ b/foundry/config/mod.rs
@@ -1,4 +1,4 @@
-// Copyright 2018-2019 Kodebox, Inc.
+// Copyright 2018-2020 Kodebox, Inc.
// This file is part of CodeChain.
//
// This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
mod chain_type;
-use ccore::{MemPoolFees, MinerOptions, TimeGapParams};
+use ccore::{MemPoolMinFees, MinerOptions, TimeGapParams};
use cidr::IpCidr;
use ckey::PlatformAddress;
use clap;
@@ -73,7 +73,7 @@ impl Config {
None => unreachable!(),
};
- let mem_pool_fees = MemPoolFees::create_from_options(
+ let mem_pool_min_fees = MemPoolMinFees::create_from_options(
self.mining.min_pay_transaction_cost,
self.mining.min_set_regular_key_transaction_cost,
self.mining.min_create_shard_transaction_cost,
@@ -100,7 +100,7 @@ impl Config {
reseal_on_external_transaction,
reseal_min_period: Duration::from_millis(self.mining.reseal_min_period.unwrap()),
no_reseal_timer: self.mining.no_reseal_timer.unwrap(),
- mem_pool_fees,
+ mem_pool_min_fees,
})
}
diff --git a/rpc/src/v1/impls/mempool.rs b/rpc/src/v1/impls/mempool.rs
index 9706663dd0..dddf2c31e8 100644
--- a/rpc/src/v1/impls/mempool.rs
+++ b/rpc/src/v1/impls/mempool.rs
@@ -16,7 +16,7 @@
use super::super::errors;
use super::super::traits::Mempool;
-use super::super::types::PendingTransactions;
+use super::super::types::{MemPoolMinFees, PendingTransactions};
use ccore::{BlockChainClient, EngineInfo, MiningBlockChainClient, SignedTransaction};
use cjson::bytes::Bytes;
use ckey::{Address, PlatformAddress};
@@ -114,4 +114,8 @@ where
self.client.register_immune_users(immune_user_vec);
Ok(())
}
+
+ fn get_machine_minimum_fees(&self) -> Result {
+ Ok(MemPoolMinFees::from(self.client.mem_pool_min_fees()))
+ }
}
diff --git a/rpc/src/v1/traits/mempool.rs b/rpc/src/v1/traits/mempool.rs
index 3079d1df4e..dd38d37918 100644
--- a/rpc/src/v1/traits/mempool.rs
+++ b/rpc/src/v1/traits/mempool.rs
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
-use super::super::types::PendingTransactions;
+use super::super::types::{MemPoolMinFees, PendingTransactions};
use cjson::bytes::Bytes;
use ckey::PlatformAddress;
use ctypes::{Tracker, TxHash};
@@ -60,4 +60,7 @@ pub trait Mempool {
#[rpc(name = "mempool_registerImmuneAccounts")]
fn register_immune_accounts(&self, immune_user_list: Vec) -> Result<()>;
+
+ #[rpc(name = "mempool_getMachineMinimumFees")]
+ fn get_machine_minimum_fees(&self) -> Result;
}
diff --git a/rpc/src/v1/types/mem_pool.rs b/rpc/src/v1/types/mem_pool.rs
new file mode 100644
index 0000000000..717b82e11a
--- /dev/null
+++ b/rpc/src/v1/types/mem_pool.rs
@@ -0,0 +1,51 @@
+// Copyright 2020 Kodebox, Inc.
+// This file is part of CodeChain.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#[derive(Debug, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct MemPoolMinFees {
+ min_pay_transaction_cost: u64,
+ min_set_regular_key_transaction_cost: u64,
+ min_create_shard_transaction_cost: u64,
+ min_set_shard_owners_transaction_cost: u64,
+ min_set_shard_users_transaction_cost: u64,
+ min_wrap_ccc_transaction_cost: u64,
+ min_custom_transaction_cost: u64,
+ min_asset_mint_cost: u64,
+ min_asset_transfer_cost: u64,
+ min_asset_scheme_change_cost: u64,
+ min_asset_supply_increase_cost: u64,
+ min_asset_unwrap_ccc_cost: u64,
+}
+
+impl From for MemPoolMinFees {
+ fn from(fees: ccore::MemPoolMinFees) -> Self {
+ Self {
+ min_pay_transaction_cost: fees.min_pay_transaction_cost,
+ min_set_regular_key_transaction_cost: fees.min_set_regular_key_transaction_cost,
+ min_create_shard_transaction_cost: fees.min_create_shard_transaction_cost,
+ min_set_shard_owners_transaction_cost: fees.min_set_shard_owners_transaction_cost,
+ min_set_shard_users_transaction_cost: fees.min_set_shard_users_transaction_cost,
+ min_wrap_ccc_transaction_cost: fees.min_wrap_ccc_transaction_cost,
+ min_custom_transaction_cost: fees.min_custom_transaction_cost,
+ min_asset_mint_cost: fees.min_asset_mint_cost,
+ min_asset_transfer_cost: fees.min_asset_transfer_cost,
+ min_asset_scheme_change_cost: fees.min_asset_scheme_change_cost,
+ min_asset_supply_increase_cost: fees.min_asset_supply_increase_cost,
+ min_asset_unwrap_ccc_cost: fees.min_asset_unwrap_ccc_cost,
+ }
+ }
+}
diff --git a/rpc/src/v1/types/mod.rs b/rpc/src/v1/types/mod.rs
index f3402dec6c..ff2b4e0e5d 100644
--- a/rpc/src/v1/types/mod.rs
+++ b/rpc/src/v1/types/mod.rs
@@ -1,4 +1,4 @@
-// Copyright 2018-2019 Kodebox, Inc.
+// Copyright 2018-2020 Kodebox, Inc.
// This file is part of CodeChain.
//
// This program is free software: you can redistribute it and/or modify
@@ -16,6 +16,7 @@
mod action;
mod block;
+mod mem_pool;
mod transaction;
mod unsigned_transaction;
mod work;
@@ -23,6 +24,7 @@ mod work;
pub use self::action::{Action, ActionWithTracker};
pub use self::block::Block;
pub use self::block::BlockNumberAndHash;
+pub use self::mem_pool::MemPoolMinFees;
pub use self::transaction::{PendingTransactions, Transaction};
pub use self::unsigned_transaction::UnsignedTransaction;
pub use self::work::Work;
diff --git a/spec/JSON-RPC.md b/spec/JSON-RPC.md
index c5ee2f2ca5..823660cb92 100644
--- a/spec/JSON-RPC.md
+++ b/spec/JSON-RPC.md
@@ -305,6 +305,7 @@ When `Transaction` is included in any response, there will be an additional fiel
* [mempool_banAccounts](#mempool_banaccounts)
* [mempool_registerImmuneAccounts](#mempool_registerimmuneaccounts)
* [mempool_getRegisteredImmuneAccounts](#mempool_getregisteredimmuneaccounts)
+ * [mempool_getMachineMinimumFees](#mempool_getmachineminimumfees)
***
* [engine_getCoinbase](#engine_getcoinbase)
* [engine_getBlockReward](#engine_getblockreward)
@@ -1931,6 +1932,61 @@ curl \
[Back to **List of methods**](#list-of-methods)
+## mempool_getMachineMinimumFees
+Get minimum fees configured by the machine.
+
+### Params
+No parameters
+
+### Returns
+{
+ "minAssetMintCost": `number`,
+ "minAssetSchemeChangeCost":`number`,
+ "minAssetSupplyIncreaseCost": `number`,
+ "minAssetTransferCost":`number`,
+ "minAssetUnwrapCccCost":`number`,
+ "minCreateShardTransactionCost":`number`,
+ "minCustomTransactionCost":`number`,
+ "minPayTransactionCost":`number`,
+ "minSetRegularKeyTransactionCost":`number`,
+ "minSetShardOwnersTransactionCost":`number`,
+ "minSetShardUsersTransactionCost":`number`,
+ "minWrapCccTransactionCost":`number`
+}
+
+### Request Example
+```
+curl \
+ -H 'Content-Type: application/json' \
+ -d '{"jsonrpc": "2.0", "method": "mempool_getMachineMinimumFees", "params": [], "id": null}' \
+ localhost:8080
+```
+
+### Response Example
+```
+{
+ "jsonrpc":"2.0",
+ "result":{
+ "minAssetMintCost":0,
+ "minAssetSchemeChangeCost":0,
+ "minAssetSupplyIncreaseCost":0,
+ "minAssetTransferCost":0,
+ "minAssetUnwrapCccCost":0,
+ "minCreateShardTransactionCost":0,
+ "minCustomTransactionCost":0,
+ "minPayTransactionCost":0,
+ "minSetRegularKeyTransactionCost":0,
+ "minSetShardOwnersTransactionCost":0,
+ "minSetShardUsersTransactionCost":0,
+ "minWrapCccTransactionCost":0
+ },
+ "id":null
+}
+
+```
+
+[Back to **List of methods**](#list-of-methods)
+
## engine_getCoinbase
Gets coinbase's account id.