Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 18 additions & 46 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 3 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ members = [
"miner-api",
"node",
"pallets/balances",
"pallets/merkle-airdrop",
"pallets/mining-rewards",
"pallets/qpow",
"pallets/reversible-transfers",
"pallets/scheduler",
"pallets/treasury-multisig",
"pallets/wormhole",
"primitives/consensus/pow",
"primitives/consensus/qpow",
Expand Down Expand Up @@ -131,11 +131,11 @@ zeroize = { version = "1.7.0", default-features = false }

# Own dependencies
pallet-balances = { path = "./pallets/balances", default-features = false }
pallet-merkle-airdrop = { path = "./pallets/merkle-airdrop", default-features = false }
pallet-mining-rewards = { path = "./pallets/mining-rewards", default-features = false }
pallet-qpow = { path = "./pallets/qpow", default-features = false }
pallet-reversible-transfers = { path = "./pallets/reversible-transfers", default-features = false }
pallet-scheduler = { path = "./pallets/scheduler", default-features = false }
pallet-treasury-multisig = { path = "./pallets/treasury-multisig", default-features = false }
pallet-wormhole = { path = "./pallets/wormhole", default-features = false }
qp-dilithium-crypto = { path = "./primitives/dilithium-crypto", version = "0.2.0", default-features = false }
qp-header = { path = "./primitives/header", default-features = false }
Expand Down Expand Up @@ -175,6 +175,7 @@ frame-try-runtime = { version = "0.47.0", default-features = false }
pallet-assets = { version = "43.0.0", default-features = false }
pallet-assets-holder = { version = "0.3.0", default-features = false }
pallet-conviction-voting = { version = "41.0.0", default-features = false }
pallet-multisig = { version = "41.0.0", default-features = false }
pallet-preimage = { version = "41.0.0", default-features = false }
pallet-ranked-collective = { version = "41.0.0", default-features = false }
pallet-recovery = { version = "41.0.0", default-features = false }
Expand All @@ -184,9 +185,7 @@ pallet-timestamp = { version = "40.0.0", default-features = false }
pallet-transaction-payment = { version = "41.0.0", default-features = false }
pallet-transaction-payment-rpc = { version = "44.0.0", default-features = false }
pallet-transaction-payment-rpc-runtime-api = { version = "41.0.0", default-features = false }
pallet-treasury = { version = "40.0.0", default-features = false }
pallet-utility = { version = "41.0.0", default-features = false }
pallet-vesting = { version = "41.0.0", default-features = false }
prometheus-endpoint = { version = "0.17.2", default-features = false, package = "substrate-prometheus-endpoint" }
sc-basic-authorship = { version = "0.50.0", default-features = false }
sc-block-builder = { version = "0.45.0", default-features = true }
Expand Down
6 changes: 3 additions & 3 deletions node/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use sp_core::{Encode, Pair};
use sp_inherents::{InherentData, InherentDataProvider};
use sp_runtime::{traits::IdentifyAccount, OpaqueExtrinsic, SaturatedConversion};

use qp_dilithium_crypto::{self, dilithium_bob};
use qp_dilithium_crypto::{self, crystal_bob};

use std::{sync::Arc, time::Duration};

Expand Down Expand Up @@ -40,7 +40,7 @@ impl frame_benchmarking_cli::ExtrinsicBuilder for RemarkBuilder {
}

fn build(&self, nonce: u32) -> std::result::Result<OpaqueExtrinsic, &'static str> {
let acc = dilithium_bob();
let acc = crystal_bob();
let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic(
self.client.as_ref(),
acc,
Expand Down Expand Up @@ -79,7 +79,7 @@ impl frame_benchmarking_cli::ExtrinsicBuilder for TransferKeepAliveBuilder {
}

fn build(&self, nonce: u32) -> std::result::Result<OpaqueExtrinsic, &'static str> {
let acc = dilithium_bob();
let acc = crystal_bob();
let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic(
self.client.as_ref(),
acc,
Expand Down
43 changes: 34 additions & 9 deletions node/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ use qp_dilithium_crypto::{traits::WormholeAddress, DilithiumPair};
use qp_rusty_crystals_hdwallet::{
generate_mnemonic, wormhole::WormholePair, HDLattice, QUANTUS_DILITHIUM_CHAIN_ID,
};
use quantus_runtime::{Block, EXISTENTIAL_DEPOSIT};
use quantus_runtime::{
genesis_config_presets::get_treasury_config_for_chain, Block, TreasuryMultisig,
EXISTENTIAL_DEPOSIT,
};
use rand::Rng;
use sc_cli::SubstrateCli;
use sc_network::config::{NetworkBackendType, NodeKeyConfig, Secret};
Expand All @@ -19,7 +22,7 @@ use sp_core::{
H256,
};
use sp_keyring::Sr25519Keyring;
use sp_runtime::traits::{AccountIdConversion, IdentifyAccount};
use sp_runtime::traits::IdentifyAccount;

#[derive(Debug, PartialEq)]
pub struct QuantusKeyDetails {
Expand Down Expand Up @@ -198,6 +201,19 @@ impl SubstrateCli for Cli {
}
}

/// Get treasury account from genesis config for a given chain ID.
/// This ensures the rewards address matches what will be in runtime storage after genesis.
fn get_treasury_account_for_chain(chain_id: &str) -> Result<AccountId32, Box<sc_cli::Error>> {
let (signatories, threshold) = get_treasury_config_for_chain(chain_id).ok_or_else(|| {
Box::new(sc_cli::Error::Input(format!(
"Unknown chain ID for treasury config: {}",
chain_id
)))
})?;

Ok(TreasuryMultisig::calculate_treasury_account(&signatories, threshold))
}

/// Parse and run command line arguments
#[allow(clippy::result_large_err)]
pub fn run() -> sc_cli::Result<()> {
Expand Down Expand Up @@ -453,24 +469,33 @@ pub fn run() -> sc_cli::Result<()> {
let account = address.parse::<AccountId32>().map_err(|_| {
sc_cli::Error::Input("Invalid rewards address format".into())
})?;
log::info!("⛏️ Using address for rewards: {:?}", account);
log::info!("⛏️ Using explicit rewards address: {:?}", account);
account
},
None => {
// Automatically set rewards_address to Treasury when --dev is used
// Automatically set rewards_address to Treasury for dev environments
if cli.run.shared_params.is_dev() {
let chain_id = config.chain_spec.id();
let treasury_account =
quantus_runtime::configs::TreasuryPalletId::get()
.into_account_truncating();
get_treasury_account_for_chain(chain_id).map_err(|e| *e)?;
log::info!(
"⛏️ Using treasury address for rewards: {:?}",
"⛏️ DEV MODE: Auto-configured mining rewards to genesis treasury address"
);
log::info!(
"⛏️ Chain: '{}', Treasury: {:?}",
chain_id,
treasury_account
);
log::info!(
"⛏️ Note: Treasury block rewards (if any) are read dynamically from runtime storage"
);

treasury_account
} else {
// Should never happen
return Err(sc_cli::Error::Input("No rewards address provided".into()));
// Production mode requires explicit rewards address
return Err(sc_cli::Error::Input(
"Mining rewards address is required. Use --rewards-address <ADDRESS>".into()
));
}
},
};
Expand Down
14 changes: 0 additions & 14 deletions pallets/merkle-airdrop/README.md

This file was deleted.

Loading
Loading