diff --git a/Cargo.lock b/Cargo.lock index 1e0b560bd538da12807e82e750c0169da214dfd1..728e250212d551b350cf815c5ba3077a52436c50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2026,6 +2026,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-transaction-payment-rpc", "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury", "rusty-hook", "sc-basic-authorship", "sc-chain-spec", diff --git a/Cargo.toml b/Cargo.toml index 0bdc0417cc258e4e0d93ce461bb2aa1c74cc61ea..ada50dc6b8bb2fd49f928c26f2bfe0e8fa56aa4b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,6 +95,7 @@ pallet-im-online = { git = "https://github.com/duniter/substrate", branch = "dun pallet-transaction-payment = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false } pallet-transaction-payment-rpc = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false } pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false } +pallet-treasury = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false } sc-basic-authorship = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false } sc-chain-spec = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false } sc-cli = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false } diff --git a/node/src/chain_spec/gdev.rs b/node/src/chain_spec/gdev.rs index b45ba2b21800ed89e5a413d2dae8ed1143f1a8e8..3b64a884c3050868c3bd6d4d40499ad180b48313 100644 --- a/node/src/chain_spec/gdev.rs +++ b/node/src/chain_spec/gdev.rs @@ -22,17 +22,18 @@ use common_runtime::constants::*; use common_runtime::entities::IdtyData; use common_runtime::*; use gdev_runtime::{ - opaque::SessionKeys, parameters, AccountConfig, AuthorityMembersConfig, BabeConfig, - BalancesConfig, CertConfig, GenesisConfig, IdentityConfig, MembershipConfig, ParametersConfig, - QuotaConfig, SessionConfig, SmithCertConfig, SmithMembershipConfig, SudoConfig, SystemConfig, - TechnicalCommitteeConfig, UniversalDividendConfig, WASM_BINARY, + opaque::SessionKeys, pallet_universal_dividend, parameters, AccountConfig, + AuthorityMembersConfig, BabeConfig, BalancesConfig, CertConfig, GenesisConfig, IdentityConfig, + MembershipConfig, ParametersConfig, QuotaConfig, Runtime, SessionConfig, SmithCertConfig, + SmithMembershipConfig, SudoConfig, SystemConfig, TechnicalCommitteeConfig, + UniversalDividendConfig, WASM_BINARY, }; use jsonrpsee::core::JsonValue; use sc_network::config::MultiaddrWithPeerId; use sc_service::ChainType; use sc_telemetry::TelemetryEndpoints; use serde::Deserialize; -use sp_core::sr25519; +use sp_core::{sr25519, Get}; use sp_runtime::Perbill; use std::{env, fs}; @@ -65,20 +66,47 @@ fn get_parameters(parameters_from_file: &Option<GenesisParameters>) -> CommonPar CommonParameters { currency_name: TOKEN_SYMBOL.to_string(), decimals: TOKEN_DECIMALS, - existential_deposit: EXISTENTIAL_DEPOSIT, - membership_period: parameters_from_file.membership_period, - cert_period: parameters_from_file.cert_period, - smith_membership_period: parameters_from_file.smith_membership_period, - smith_certs_validity_period: parameters_from_file.smith_cert_validity_period, - min_cert: parameters_from_file.wot_min_cert_for_membership, - smith_min_cert: parameters_from_file.smith_wot_min_cert_for_membership, + babe_epoch_duration: parameters_from_file.babe_epoch_duration, + babe_expected_block_time: parameters::ExpectedBlockTime::get(), + babe_max_authorities: parameters::MaxAuthorities::get(), + timestamp_minimum_period: parameters::MinimumPeriod::get(), + balances_existential_deposit: EXISTENTIAL_DEPOSIT, + authority_members_max_authorities: parameters::MaxAuthorities::get(), + grandpa_max_authorities: parameters::MaxAuthorities::get(), + universal_dividend_max_past_reevals: + <Runtime as pallet_universal_dividend::Config>::MaxPastReeval::get(), + universal_dividend_square_money_growth_rate: parameters::SquareMoneyGrowthRate::get(), + universal_dividend_ud_creation_period: parameters_from_file.ud_creation_period, + universal_dividend_ud_reeval_period: parameters_from_file.ud_reeval_period, + universal_dividend_units_per_ud: + <Runtime as pallet_universal_dividend::Config>::UnitsPerUd::get(), + wot_first_issuable_on: parameters_from_file.wot_first_cert_issuable_on, + wot_min_cert_for_membership: parameters_from_file.wot_min_cert_for_membership, + wot_min_cert_for_create_idty_right: parameters_from_file.wot_min_cert_for_create_idty_right, + identity_confirm_period: parameters_from_file.idty_confirm_period, + identity_change_owner_key_period: parameters::ChangeOwnerKeyPeriod::get(), + identity_idty_creation_period: parameters_from_file.idty_creation_period, + membership_membership_period: parameters_from_file.membership_period, + membership_pending_membership_period: parameters_from_file.pending_membership_period, cert_max_by_issuer: parameters_from_file.cert_max_by_issuer, + cert_min_received_cert_to_be_able_to_issue_cert: parameters_from_file + .cert_min_received_cert_to_issue_cert, cert_validity_period: parameters_from_file.cert_validity_period, - c2: parameters::SquareMoneyGrowthRate::get(), - ud_creation_period: parameters_from_file.ud_creation_period, - distance_min_accessible_referees: Perbill::from_percent(80), - max_depth: 5, // TODO: generalize - ud_reeval_period: parameters_from_file.ud_reeval_period, + distance_min_accessible_referees: Perbill::from_percent(80), // TODO: generalize + distance_max_depth: 5, // TODO: generalize + smith_sub_wot_first_issuable_on: parameters_from_file.smith_wot_first_cert_issuable_on, + smith_sub_wot_min_cert_for_membership: parameters_from_file + .smith_wot_min_cert_for_membership, + smith_membership_membership_period: parameters_from_file.smith_membership_period, + smith_membership_pending_membership_period: parameters_from_file + .smith_pending_membership_period, + smith_cert_cert_period: parameters_from_file.smith_cert_period, + smith_cert_max_by_issuer: parameters_from_file.smith_cert_max_by_issuer, + smith_cert_min_received_cert_to_be_able_to_issue_cert: parameters_from_file + .smith_cert_min_received_cert_to_issue_cert, + smith_cert_validity_period: parameters_from_file.smith_cert_validity_period, + cert_cert_period: parameters_from_file.cert_period, + treasury_spend_period: <Runtime as pallet_treasury::Config>::SpendPeriod::get(), } } diff --git a/node/src/chain_spec/gen_genesis_data.rs b/node/src/chain_spec/gen_genesis_data.rs index 85499d9f2e739571ef6c93e2a90daaf0357f472c..1813434b7a43e0366d89fc345c163a498102f250 100644 --- a/node/src/chain_spec/gen_genesis_data.rs +++ b/node/src/chain_spec/gen_genesis_data.rs @@ -413,7 +413,7 @@ where // Verify certifications coherence (can be ignored for old users) for (idty_index, receiver_certs) in &certs_by_receiver { - if receiver_certs.len() < common_parameters.min_cert as usize { + if receiver_certs.len() < common_parameters.wot_min_cert_for_membership as usize { let name = identity_index.get(idty_index).unwrap(); let identity = identities_v2.get(&(*name).clone()).unwrap(); if identity.membership_expire_on != 0 { @@ -421,7 +421,7 @@ where "[{}] has received only {}/{} certifications", name, receiver_certs.len(), - common_parameters.min_cert + common_parameters.wot_min_cert_for_membership ); fatal = true; } @@ -430,12 +430,12 @@ where // Verify smith certifications coherence for (idty_index, certs) in &smith_certs_by_receiver { - if certs.len() < common_parameters.smith_min_cert as usize { + if certs.len() < common_parameters.smith_sub_wot_min_cert_for_membership as usize { log::error!( "[{}] has received only {}/{} smith certifications", identity_index.get(idty_index).unwrap(), certs.len(), - common_parameters.smith_min_cert + common_parameters.smith_sub_wot_min_cert_for_membership ); fatal = true; } @@ -472,15 +472,15 @@ where if let Some(existing_account) = accounts.get_mut(&treasury_funder) { existing_account.balance = existing_account .balance - .checked_sub(common_parameters.existential_deposit) + .checked_sub(common_parameters.balances_existential_deposit) .expect("should have enough money to fund Treasury"); - treasury_balance = common_parameters.existential_deposit; + treasury_balance = common_parameters.balances_existential_deposit; } - if treasury_balance < common_parameters.existential_deposit { + if treasury_balance < common_parameters.balances_existential_deposit { log::error!( "Treasury balance {} is inferior to existential deposit {}", treasury_balance, - common_parameters.existential_deposit + common_parameters.balances_existential_deposit ); fatal = true; } @@ -528,7 +528,12 @@ where if parameters.is_some() { let g1_duniter_v1_c = 0.0488; let g1_duniter_v1_xpercent: Perbill = Perbill::from_float(0.8); - let c = f32::sqrt(common_parameters.c2.deconstruct() as f32 / 1_000_000_000f32); + let c = f32::sqrt( + common_parameters + .universal_dividend_square_money_growth_rate + .deconstruct() as f32 + / 1_000_000_000f32, + ); // static parameters (GTest or G1) if common_parameters.decimals != G1_DUNITER_V1_DECIMALS { @@ -537,24 +542,25 @@ where common_parameters.decimals, G1_DUNITER_V1_DECIMALS ) } - if common_parameters.existential_deposit != G1_DUNITER_V1_EXISTENTIAL_DEPOSIT { + if common_parameters.balances_existential_deposit != G1_DUNITER_V1_EXISTENTIAL_DEPOSIT { warn!( "parameter `existential_deposit` value ({}) is different from Ğ1 value ({})", - common_parameters.existential_deposit, G1_DUNITER_V1_EXISTENTIAL_DEPOSIT + common_parameters.balances_existential_deposit, G1_DUNITER_V1_EXISTENTIAL_DEPOSIT ) } - if common_parameters.membership_period / DAYS != G1_DUNITER_V1_MSVALIDITY / DUNITER_V1_DAYS + if common_parameters.membership_membership_period / DAYS + != G1_DUNITER_V1_MSVALIDITY / DUNITER_V1_DAYS { warn!( "parameter `membership_period` ({} days) is different from Ğ1's ({} days)", - common_parameters.membership_period as f32 / DAYS as f32, + common_parameters.membership_membership_period as f32 / DAYS as f32, G1_DUNITER_V1_MSVALIDITY as f32 / DUNITER_V1_DAYS as f32 ) } - if common_parameters.cert_period / DAYS != G1_DUNITER_V1_SIGPERIOD / DUNITER_V1_DAYS { + if common_parameters.cert_cert_period / DAYS != G1_DUNITER_V1_SIGPERIOD / DUNITER_V1_DAYS { warn!( "parameter `cert_period` ({} days) is different from Ğ1's ({} days)", - common_parameters.cert_period as f32 / DAYS as f32, + common_parameters.cert_cert_period as f32 / DAYS as f32, G1_DUNITER_V1_SIGPERIOD as f32 / DUNITER_V1_DAYS as f32 ) } @@ -567,10 +573,10 @@ where G1_DUNITER_V1_SIGVALIDITY as f32 / DUNITER_V1_DAYS as f32 ) } - if common_parameters.min_cert != G1_DUNITER_V1_SIGQTY { + if common_parameters.wot_min_cert_for_membership != G1_DUNITER_V1_SIGQTY { warn!( "parameter `min_cert` value ({}) is different from Ğ1 value ({})", - common_parameters.min_cert, G1_DUNITER_V1_SIGQTY + common_parameters.wot_min_cert_for_membership, G1_DUNITER_V1_SIGQTY ) } if common_parameters.cert_max_by_issuer != G1_DUNITER_V1_SIGSTOCK { @@ -585,20 +591,20 @@ where c, g1_duniter_v1_c ) } - if common_parameters.ud_creation_period as f32 / DAYS as f32 + if common_parameters.universal_dividend_ud_creation_period as f32 / DAYS as f32 != G1_DUNITER_V1_DT as f32 / DUNITER_V1_DAYS as f32 { warn!( "parameter `ud_creation_period` value ({} days) is different from Ğ1 value ({} days)", - common_parameters.ud_creation_period as f32 / DAYS as f32, G1_DUNITER_V1_DT as f32 / DUNITER_V1_DAYS as f32 + common_parameters.universal_dividend_ud_creation_period as f32 / DAYS as f32, G1_DUNITER_V1_DT as f32 / DUNITER_V1_DAYS as f32 ) } - if common_parameters.ud_reeval_period as f32 / DAYS as f32 + if common_parameters.universal_dividend_ud_reeval_period as f32 / DAYS as f32 != G1_DUNITER_V1_DTREEVAL as f32 / DUNITER_V1_DAYS as f32 { warn!( "parameter `ud_reeval_period` value ({} days) is different from Ğ1 value ({} days)", - common_parameters.ud_reeval_period as f32 / DAYS as f32, + common_parameters.universal_dividend_ud_reeval_period as f32 / DAYS as f32, G1_DUNITER_V1_DTREEVAL as f32 / DUNITER_V1_DAYS as f32 ) } @@ -608,18 +614,19 @@ where format!("{:?}", common_parameters.distance_min_accessible_referees), format!("{:?}", g1_duniter_v1_xpercent) ) } - if common_parameters.max_depth != G1_DUNITER_V1_STEPMAX { + if common_parameters.distance_max_depth != G1_DUNITER_V1_STEPMAX { warn!( "parameter `max_depth` value ({}) is different from Ğ1 value ({})", - common_parameters.max_depth, G1_DUNITER_V1_STEPMAX + common_parameters.distance_max_depth, G1_DUNITER_V1_STEPMAX ) } - let count_uds = common_parameters.ud_reeval_period / common_parameters.ud_creation_period; + let count_uds = common_parameters.universal_dividend_ud_reeval_period + / common_parameters.universal_dividend_ud_creation_period; if count_uds == 0 { error!( "the `ud_reeval_period / ud_creation_period` is zero ({} days/{} days)", - common_parameters.ud_reeval_period / DAYS as u64, - common_parameters.ud_creation_period / DAYS as u64 + common_parameters.universal_dividend_ud_reeval_period / DAYS as u64, + common_parameters.universal_dividend_ud_creation_period / DAYS as u64 ); fatal = true; } @@ -759,65 +766,204 @@ fn dump_genesis_info(info: GenesisInfo) { info.technical_committee_members.len(), ); - let (membership_period, membership_period_unit) = - get_best_unit_and_diviser_for_blocks(info.common_parameters.membership_period); - let (cert_period, cert_period_unit) = - get_best_unit_and_diviser_for_blocks(info.common_parameters.cert_period); + let p = info.common_parameters.clone(); + let (babe_epoch_duration, babe_epoch_duration_unit) = + get_best_unit_and_diviser_for_blocks(p.babe_epoch_duration as u32); + let (babe_expected_block_time, babe_expected_block_time_unit) = + get_best_unit_and_diviser_for_ms(p.babe_expected_block_time as f32); + let (babe_max_authorities, babe_max_authorities_unit) = + get_best_unit_and_diviser_for_participants(p.babe_max_authorities); + let (timestamp_minimum_period, timestamp_minimum_period_unit) = + get_best_unit_and_diviser_for_ms(p.timestamp_minimum_period as f32); + let (balances_existential_deposit, balances_existential_deposit_unit) = + get_best_unit_and_diviser_for_currency_units( + p.balances_existential_deposit, + p.currency_name.clone(), + ); + let (authority_members_max_authorities, authority_members_max_authorities_unit) = + get_best_unit_and_diviser_for_participants(p.authority_members_max_authorities); + let (grandpa_max_authorities, grandpa_max_authorities_unit) = + get_best_unit_and_diviser_for_participants(p.grandpa_max_authorities); + let (universal_dividend_max_past_reevals, universal_dividend_max_past_reevals_unit) = + get_best_unit_and_diviser_for_equinoxes(p.universal_dividend_max_past_reevals); + let ( + universal_dividend_square_money_growth_rate, + universal_dividend_square_money_growth_rate_unit, + ) = get_best_unit_and_diviser_for_perbill_square(p.universal_dividend_square_money_growth_rate); + let (universal_dividend_ud_creation_period, universal_dividend_ud_creation_period_unit) = + get_best_unit_and_diviser_for_ms(p.universal_dividend_ud_creation_period as f32); + let (universal_dividend_ud_reeval_period, universal_dividend_ud_reeval_period_unit) = + get_best_unit_and_diviser_for_ms(p.universal_dividend_ud_reeval_period as f32); + let (universal_dividend_units_per_ud, universal_dividend_units_per_ud_unit) = + get_best_unit_and_diviser_for_currency_units( + p.universal_dividend_units_per_ud, + p.currency_name.clone(), + ); + let (wot_first_issuable_on, wot_first_issuable_on_unit) = + get_best_unit_and_diviser_for_blocks(p.wot_first_issuable_on); + let (wot_min_cert_for_membership, wot_min_cert_for_membership_unit) = + get_best_unit_and_diviser_for_certs(p.wot_min_cert_for_membership); + let (wot_min_cert_for_create_idty_right, wot_min_cert_for_create_idty_right_unit) = + get_best_unit_and_diviser_for_certs(p.wot_min_cert_for_create_idty_right); + let (identity_confirm_period, identity_confirm_period_unit) = + get_best_unit_and_diviser_for_blocks(p.identity_confirm_period); + let (identity_change_owner_key_period, identity_change_owner_key_period_unit) = + get_best_unit_and_diviser_for_blocks(p.identity_change_owner_key_period); + let (identity_idty_creation_period, identity_idty_creation_period_unit) = + get_best_unit_and_diviser_for_blocks(p.identity_idty_creation_period); + let (membership_membership_period, membership_membership_period_unit) = + get_best_unit_and_diviser_for_blocks(p.membership_membership_period); + let (membership_pending_membership_period, membership_pending_membership_period_unit) = + get_best_unit_and_diviser_for_blocks(p.membership_pending_membership_period); + let (cert_cert_period, cert_cert_period_unit) = + get_best_unit_and_diviser_for_blocks(p.cert_cert_period); + let (cert_max_by_issuer, cert_max_by_issuer_unit) = + get_best_unit_and_diviser_for_certs(p.cert_max_by_issuer); + let ( + cert_min_received_cert_to_be_able_to_issue_cert, + cert_min_received_cert_to_be_able_to_issue_cert_unit, + ) = get_best_unit_and_diviser_for_certs(p.cert_min_received_cert_to_be_able_to_issue_cert); let (cert_validity_period, cert_validity_period_unit) = - get_best_unit_and_diviser_for_blocks(info.common_parameters.cert_validity_period); - let (smith_membership_period, smith_membership_period_unit) = - get_best_unit_and_diviser_for_blocks(info.common_parameters.smith_membership_period); - let (smith_certs_validity_period, smith_certs_validity_period_unit) = - get_best_unit_and_diviser_for_blocks(info.common_parameters.smith_certs_validity_period); - let (ud_reeval_period, ud_reeval_period_unit) = - get_best_unit_and_diviser_for_ms(info.common_parameters.ud_reeval_period as f32); - let (ud_creation_period, ud_creation_period_unit) = - get_best_unit_and_diviser_for_ms(info.common_parameters.ud_creation_period as f32); + get_best_unit_and_diviser_for_blocks(p.cert_validity_period); + let (distance_min_accessible_referees, distance_min_accessible_referees_unit) = + get_best_unit_and_diviser_for_perbill(p.distance_min_accessible_referees); + let (distance_max_depth, distance_max_depth_unit) = + get_best_unit_and_diviser_for_depth(p.distance_max_depth); + let (smith_sub_wot_first_issuable_on, smith_sub_wot_first_issuable_on_unit) = + get_best_unit_and_diviser_for_blocks(p.smith_sub_wot_first_issuable_on); + let (smith_sub_wot_min_cert_for_membership, smith_sub_wot_min_cert_for_membership_unit) = + get_best_unit_and_diviser_for_certs(p.smith_sub_wot_min_cert_for_membership); + let (smith_membership_membership_period, smith_membership_membership_period_unit) = + get_best_unit_and_diviser_for_blocks(p.smith_membership_membership_period); + let ( + smith_membership_pending_membership_period, + smith_membership_pending_membership_period_unit, + ) = get_best_unit_and_diviser_for_blocks(p.smith_membership_pending_membership_period); + let (smith_cert_cert_period, smith_cert_cert_period_unit) = + get_best_unit_and_diviser_for_blocks(p.smith_cert_cert_period); + let (smith_cert_max_by_issuer, smith_cert_max_by_issuer_unit) = + get_best_unit_and_diviser_for_certs(p.smith_cert_max_by_issuer); + let ( + smith_cert_min_received_cert_to_be_able_to_issue_cert, + smith_cert_min_received_cert_to_be_able_to_issue_cert_unit, + ) = get_best_unit_and_diviser_for_certs( + p.smith_cert_min_received_cert_to_be_able_to_issue_cert, + ); + let (smith_cert_validity_period, smith_cert_validity_period_unit) = + get_best_unit_and_diviser_for_blocks(p.smith_cert_validity_period); + let (treasury_spend_period, treasury_spend_period_unit) = + get_best_unit_and_diviser_for_blocks(p.treasury_spend_period); // give genesis info log::info!( "currency parameters: - - existential deposit: {} {} - - currency decimals: {} - - membership validity: {} {} - - certification period: {} {} - - certification validity duration: {} {} - - smith membership validity: {} {} - - smith certification validity: {} {} - - required certifications: {} - - smith required certifications: {} - - max certifications by issuer: {} - - money growth rate: {}% every {} {} - - UD creation period: {} {} - - distance percent of required referees: {}% - - distance max depth: {}", - info.common_parameters.existential_deposit as f64 / 100.0, - info.common_parameters.currency_name, - info.common_parameters.decimals, - membership_period, - membership_period_unit, - cert_period, - cert_period_unit, + - babe.epoch_duration: {} {} + - babe.expected_block_time: {} {} + - babe.max_authorities: {} {} + - timestamp.minimum_period: {} {} + - balances.existential_deposit: {} {} + - authority_members.max_authorities: {} {} + - grandpa.max_authorities: {} {} + - universal_dividend.max_past_reevals: {} {} + - universal_dividend.square_money_growth_rate: {} {}/equinox + - universal_dividend.ud_creation_period: {} {} + - universal_dividend.ud_reeval_period: {} {} + - universal_dividend.units_per_ud: {} {} + - wot.first_issuable_on: {} {} + - wot.min_cert_for_membership: {} {} + - wot.min_cert_for_create_idty_right: {} {} + - identity.confirm_period: {} {} + - identity.change_owner_key_period: {} {} + - identity.idty_creation_period: {} {} + - membership.membership_period: {} {} + - membership.pending_membership_period: {} {} + - cert.cert_period: {} {} + - cert.max_by_issuer: {} {} + - cert.min_received_cert_to_be_able_to_issue_cert: {} {} + - cert.validity_period: {} {} + - distance.min_accessible_referees: {} {} + - distance.max_depth: {} {}, + - smith_sub_wot.first_issuable_on: {} {} + - smith_sub_wot.min_cert_for_membership: {} {} + - smith_membership.membership_period: {} {} + - smith_membership.pending_membership_period: {} {} + - smith_cert.cert_period: {} {} + - smith_cert.max_by_issuer: {} {} + - smith_cert.min_received_cert_to_be_able_to_issue_cert: {} {} + - smith_cert.validity_period: {} {} + - treasury.spend_period: {} {} + - currency decimals: {}", + babe_epoch_duration, + babe_epoch_duration_unit, + babe_expected_block_time, + babe_expected_block_time_unit, + babe_max_authorities, + babe_max_authorities_unit, + timestamp_minimum_period, + timestamp_minimum_period_unit, + balances_existential_deposit, + balances_existential_deposit_unit, + authority_members_max_authorities, + authority_members_max_authorities_unit, + grandpa_max_authorities, + grandpa_max_authorities_unit, + universal_dividend_max_past_reevals, + universal_dividend_max_past_reevals_unit, + universal_dividend_square_money_growth_rate, + universal_dividend_square_money_growth_rate_unit, + universal_dividend_ud_creation_period, + universal_dividend_ud_creation_period_unit, + universal_dividend_ud_reeval_period, + universal_dividend_ud_reeval_period_unit, + universal_dividend_units_per_ud, + universal_dividend_units_per_ud_unit, + wot_first_issuable_on, + wot_first_issuable_on_unit, + wot_min_cert_for_membership, + wot_min_cert_for_membership_unit, + wot_min_cert_for_create_idty_right, + wot_min_cert_for_create_idty_right_unit, + identity_confirm_period, + identity_confirm_period_unit, + identity_change_owner_key_period, + identity_change_owner_key_period_unit, + identity_idty_creation_period, + identity_idty_creation_period_unit, + membership_membership_period, + membership_membership_period_unit, + membership_pending_membership_period, + membership_pending_membership_period_unit, + cert_cert_period, + cert_cert_period_unit, + cert_max_by_issuer, + cert_max_by_issuer_unit, + cert_min_received_cert_to_be_able_to_issue_cert, + cert_min_received_cert_to_be_able_to_issue_cert_unit, cert_validity_period, cert_validity_period_unit, - smith_membership_period, - smith_membership_period_unit, - smith_certs_validity_period, - smith_certs_validity_period_unit, - info.common_parameters.min_cert, - info.common_parameters.smith_min_cert, - info.common_parameters.cert_max_by_issuer, - f32::sqrt(info.common_parameters.c2.deconstruct() as f32 / 1_000_000_000f32) * 100f32, - ud_reeval_period, - ud_reeval_period_unit, - ud_creation_period, - ud_creation_period_unit, - info.common_parameters - .distance_min_accessible_referees - .deconstruct() as f32 - / 1_000_000_000f32 - * 100f32, - info.common_parameters.max_depth, + distance_min_accessible_referees, + distance_min_accessible_referees_unit, + distance_max_depth, + distance_max_depth_unit, + smith_sub_wot_first_issuable_on, + smith_sub_wot_first_issuable_on_unit, + smith_sub_wot_min_cert_for_membership, + smith_sub_wot_min_cert_for_membership_unit, + smith_membership_membership_period, + smith_membership_membership_period_unit, + smith_membership_pending_membership_period, + smith_membership_pending_membership_period_unit, + smith_cert_cert_period, + smith_cert_cert_period_unit, + smith_cert_max_by_issuer, + smith_cert_max_by_issuer_unit, + smith_cert_min_received_cert_to_be_able_to_issue_cert, + smith_cert_min_received_cert_to_be_able_to_issue_cert_unit, + smith_cert_validity_period, + smith_cert_validity_period_unit, + treasury_spend_period, + treasury_spend_period_unit, + info.common_parameters.decimals, ); } @@ -833,6 +979,37 @@ fn get_best_unit_and_diviser_for_blocks(duration_in_blocks: u32) -> (f32, String get_best_unit_and_diviser_for_ms(duration_in_ms) } +fn get_best_unit_and_diviser_for_perbill_square(qty: Perbill) -> (f32, String) { + let qty = f32::sqrt(qty.deconstruct() as f32 / 1_000_000_000f32) * 100f32; + (qty, "%".to_string()) +} + +fn get_best_unit_and_diviser_for_perbill(qty: Perbill) -> (f32, String) { + let qty = qty.deconstruct() as f32 / 1_000_000_000f32 * 100f32; + (qty, "%".to_string()) +} + +fn get_best_unit_and_diviser_for_participants(qty: u32) -> (u32, String) { + (qty, "participants".to_string()) +} + +fn get_best_unit_and_diviser_for_equinoxes(qty: u32) -> (u32, String) { + (qty, "equinoxes".to_string()) +} + +fn get_best_unit_and_diviser_for_certs(qty: u32) -> (u32, String) { + (qty, "certs".to_string()) +} + +fn get_best_unit_and_diviser_for_currency_units(qty: u64, currency_name: String) -> (f64, String) { + let qty = qty as f64 / 100.0; + (qty, currency_name.clone()) +} + +fn get_best_unit_and_diviser_for_depth(qty: u32) -> (u32, String) { + (qty, "steps".to_string()) +} + fn diviser_to_unit(value_in_ms: f32, qty: f32) -> String { let unit = if value_in_ms >= 24.0 * 3600.0 * 1000.0 { "day".to_string() @@ -848,15 +1025,18 @@ fn diviser_to_unit(value_in_ms: f32, qty: f32) -> String { } fn get_best_diviser(ms_value: f32) -> f32 { - let one_minute: f32 = 1000.0 * 60.0; + let one_second: f32 = 1000.0; + let one_minute: f32 = one_second * 60.0; let one_hour: f32 = one_minute * 60.0; let one_day: f32 = one_hour * 24.0; - if ms_value > one_day { + if ms_value >= one_day { one_day - } else if ms_value > one_hour { + } else if ms_value >= one_hour { one_hour - } else { + } else if ms_value >= one_minute { one_minute + } else { + one_second } } @@ -930,7 +1110,7 @@ fn create_smith_wot<SK: Decode>( smith_memberships.insert( identity.index, MembershipData { - expire_on: common_parameters.smith_membership_period, + expire_on: common_parameters.smith_membership_membership_period, }, ); } else { @@ -970,10 +1150,10 @@ fn v1_wallets_to_v2_accounts( let mut fatal = false; for (pubkey, balance) in wallets { // check existential deposit - if balance < common_parameters.existential_deposit { + if balance < common_parameters.balances_existential_deposit { log::error!( "wallet {pubkey} has {balance} cǦT which is below {}", - common_parameters.existential_deposit + common_parameters.balances_existential_deposit ); fatal = true; } @@ -1025,7 +1205,7 @@ fn check_identities_v2( .filter(|(_, i)| i.membership_expire_on != 0) .for_each(|(name, i)| { let nb_certs = i.certs_received.len() as u32; - if nb_certs < common_parameters.min_cert { + if nb_certs < common_parameters.wot_min_cert_for_membership { log::warn!("{} has only {} valid certifications", name, nb_certs); } }); @@ -1061,7 +1241,7 @@ fn check_genesis_data_and_filter_expired_certs_since_export( genesis_data.identities.iter_mut().for_each(|(name, i)| { if i.membership_expire_on.0 != 0 - && i.certs_received.len() < common_parameters.min_cert as usize + && i.certs_received.len() < common_parameters.wot_min_cert_for_membership as usize { i.membership_expire_on = TimestampV1(0); log::warn!( @@ -1164,7 +1344,7 @@ fn make_authority_exist<SessionKeys: Encode, SKP: SessionKeysProvider<SessionKey // The identity might already exist, notably: G1 "Alice" already exists if let Some(authority) = identities_v2.get_mut(authority_name) { // Force authority to be active - authority.membership_expire_on = common_parameters.membership_period; + authority.membership_expire_on = common_parameters.membership_membership_period; } else { // Not found: we must create it identities_v2.insert( @@ -1172,9 +1352,9 @@ fn make_authority_exist<SessionKeys: Encode, SKP: SessionKeysProvider<SessionKey IdentityV2 { index: (identities_v2.len() as u32 + 1), owner_key: get_account_id_from_seed::<sr25519::Public>(authority_name), - balance: common_parameters.existential_deposit, + balance: common_parameters.balances_existential_deposit, certs_received: HashMap::new(), - membership_expire_on: common_parameters.membership_period, + membership_expire_on: common_parameters.membership_membership_period, old_owner_key: None, next_cert_issuable_on: 0, }, @@ -1192,10 +1372,10 @@ fn make_authority_exist<SessionKeys: Encode, SKP: SessionKeysProvider<SessionKey .iter() .any(|(authority_issuer, _)| issuer == &authority_issuer) }) - .take(common_parameters.min_cert as usize) + .take(common_parameters.wot_min_cert_for_membership as usize) .map(String::clone) .for_each(|issuer| { - new_certs.insert(issuer, common_parameters.cert_period); + new_certs.insert(issuer, common_parameters.cert_cert_period); }); let authority = identities_v2 .get_mut(authority_name) @@ -1403,7 +1583,7 @@ fn feed_smith_certs_by_receiver( .index; certs.insert( *issuer_index, - Some(common_parameters.smith_certs_validity_period), + Some(common_parameters.smith_cert_validity_period), ); counter_smith_cert += 1; } @@ -1793,23 +1973,44 @@ pub trait SessionKeysProvider<SessionKeys: Encode> { #[derive(Default, Deserialize, Serialize, Clone)] pub struct CommonParameters { - // TODO: replace u32 by BlockNumber when appropriate - pub currency_name: String, - pub decimals: usize, - pub existential_deposit: u64, - pub membership_period: u32, - pub cert_period: u32, - pub smith_membership_period: u32, - pub smith_certs_validity_period: u32, - pub min_cert: u32, - pub smith_min_cert: u32, + pub babe_epoch_duration: u64, + pub babe_expected_block_time: u64, + pub babe_max_authorities: u32, + pub timestamp_minimum_period: u64, + pub balances_existential_deposit: u64, + pub authority_members_max_authorities: u32, + pub grandpa_max_authorities: u32, + pub universal_dividend_max_past_reevals: u32, + pub universal_dividend_square_money_growth_rate: Perbill, + pub universal_dividend_ud_creation_period: u64, + pub universal_dividend_ud_reeval_period: u64, + pub universal_dividend_units_per_ud: u64, + pub wot_first_issuable_on: u32, + pub wot_min_cert_for_membership: u32, + pub wot_min_cert_for_create_idty_right: u32, + pub identity_confirm_period: u32, + pub identity_change_owner_key_period: u32, + pub identity_idty_creation_period: u32, + pub membership_membership_period: u32, + pub membership_pending_membership_period: u32, + pub cert_cert_period: u32, pub cert_max_by_issuer: u32, + pub cert_min_received_cert_to_be_able_to_issue_cert: u32, pub cert_validity_period: u32, - pub c2: Perbill, - pub ud_creation_period: u64, pub distance_min_accessible_referees: Perbill, - pub max_depth: u32, - pub ud_reeval_period: u64, + pub distance_max_depth: u32, + pub smith_sub_wot_first_issuable_on: u32, + pub smith_sub_wot_min_cert_for_membership: u32, + pub smith_membership_membership_period: u32, + pub smith_membership_pending_membership_period: u32, + pub smith_cert_cert_period: u32, + pub smith_cert_max_by_issuer: u32, + pub smith_cert_min_received_cert_to_be_able_to_issue_cert: u32, + pub smith_cert_validity_period: u32, + pub treasury_spend_period: u32, + // TODO: replace u32 by BlockNumber when appropriate + pub currency_name: String, + pub decimals: usize, } /// Generate an authority keys. diff --git a/node/src/chain_spec/gtest.rs b/node/src/chain_spec/gtest.rs index ad6120e3cd2a6222881cbaffce7c8dc9b70852af..3b845e478734f70f9e449164a9d12a659bd06628 100644 --- a/node/src/chain_spec/gtest.rs +++ b/node/src/chain_spec/gtest.rs @@ -19,11 +19,13 @@ use crate::chain_spec::gen_genesis_data::{CommonParameters, GenesisIdentity, Ses use common_runtime::constants::*; use common_runtime::entities::IdtyData; use common_runtime::*; +use frame_benchmarking::frame_support::traits::Get; use gtest_runtime::{ - opaque::SessionKeys, parameters, AccountConfig, AccountId, AuthorityMembersConfig, BabeConfig, - BalancesConfig, CertConfig, GenesisConfig, IdentityConfig, ImOnlineId, MembershipConfig, - Perbill, QuotaConfig, SessionConfig, SmithCertConfig, SmithMembershipConfig, SudoConfig, - SystemConfig, TechnicalCommitteeConfig, UniversalDividendConfig, WASM_BINARY, + opaque::SessionKeys, pallet_universal_dividend, parameters, AccountConfig, AccountId, + AuthorityMembersConfig, BabeConfig, BalancesConfig, CertConfig, GenesisConfig, IdentityConfig, + ImOnlineId, MembershipConfig, Perbill, QuotaConfig, Runtime, SessionConfig, SmithCertConfig, + SmithMembershipConfig, SudoConfig, SystemConfig, TechnicalCommitteeConfig, + UniversalDividendConfig, WASM_BINARY, }; use jsonrpsee::core::JsonValue; use sc_consensus_grandpa::AuthorityId as GrandpaId; @@ -68,20 +70,45 @@ fn get_parameters(_: &Option<GenesisParameters>) -> CommonParameters { CommonParameters { currency_name: TOKEN_SYMBOL.to_string(), decimals: TOKEN_DECIMALS, - existential_deposit: parameters::ExistentialDeposit::get(), - membership_period: parameters::MembershipPeriod::get(), - cert_period: parameters::CertPeriod::get(), - smith_membership_period: parameters::SmithMembershipPeriod::get(), - smith_certs_validity_period: parameters::SmithValidityPeriod::get(), - min_cert: parameters::WotMinCertForMembership::get(), - smith_min_cert: parameters::SmithWotMinCertForMembership::get(), + babe_epoch_duration: parameters::EpochDuration::get(), + babe_expected_block_time: parameters::ExpectedBlockTime::get(), + babe_max_authorities: parameters::MaxAuthorities::get(), + timestamp_minimum_period: parameters::MinimumPeriod::get(), + balances_existential_deposit: parameters::ExistentialDeposit::get(), + authority_members_max_authorities: parameters::MaxAuthorities::get(), + grandpa_max_authorities: parameters::MaxAuthorities::get(), + universal_dividend_max_past_reevals: + <Runtime as pallet_universal_dividend::Config>::MaxPastReeval::get(), + universal_dividend_square_money_growth_rate: parameters::SquareMoneyGrowthRate::get(), + universal_dividend_ud_creation_period: parameters::UdCreationPeriod::get() as u64, + universal_dividend_ud_reeval_period: parameters::UdReevalPeriod::get() as u64, + universal_dividend_units_per_ud: + <Runtime as pallet_universal_dividend::Config>::UnitsPerUd::get(), + wot_first_issuable_on: parameters::WotFirstCertIssuableOn::get(), + wot_min_cert_for_membership: parameters::WotMinCertForMembership::get(), + wot_min_cert_for_create_idty_right: parameters::WotMinCertForCreateIdtyRight::get(), + identity_confirm_period: parameters::ConfirmPeriod::get(), + identity_change_owner_key_period: parameters::ChangeOwnerKeyPeriod::get(), + identity_idty_creation_period: parameters::IdtyCreationPeriod::get(), + membership_membership_period: parameters::MembershipPeriod::get(), + membership_pending_membership_period: parameters::PendingMembershipPeriod::get(), cert_max_by_issuer: parameters::MaxByIssuer::get(), + cert_min_received_cert_to_be_able_to_issue_cert: + parameters::MinReceivedCertToBeAbleToIssueCert::get(), cert_validity_period: parameters::ValidityPeriod::get(), - c2: parameters::SquareMoneyGrowthRate::get(), - ud_creation_period: parameters::UdCreationPeriod::get() as u64, // TODO: cast? - distance_min_accessible_referees: Perbill::from_percent(80), // TODO: generalize - max_depth: 5, // TODO: generalize value - ud_reeval_period: parameters::UdReevalPeriod::get() as u64, // TODO: cast? + distance_min_accessible_referees: Perbill::from_percent(80), // TODO: generalize + distance_max_depth: 5, // TODO: generalize + smith_sub_wot_first_issuable_on: parameters::SmithWotFirstCertIssuableOn::get(), + smith_sub_wot_min_cert_for_membership: parameters::SmithWotMinCertForMembership::get(), + smith_membership_membership_period: parameters::SmithMembershipPeriod::get(), + smith_membership_pending_membership_period: parameters::SmithPendingMembershipPeriod::get(), + smith_cert_cert_period: parameters::SmithCertPeriod::get(), + smith_cert_max_by_issuer: parameters::SmithMaxByIssuer::get(), + smith_cert_min_received_cert_to_be_able_to_issue_cert: + parameters::SmithMinReceivedCertToBeAbleToIssueCert::get(), + smith_cert_validity_period: parameters::SmithValidityPeriod::get(), + cert_cert_period: parameters::CertPeriod::get(), + treasury_spend_period: <Runtime as pallet_treasury::Config>::SpendPeriod::get(), } } diff --git a/resources/metadata.scale b/resources/metadata.scale index 40dabe8e9f18368994afebb474e4c1c07ab62171..8cba70d82084d4a6c13159a9585ad29f6c8e7c00 100644 Binary files a/resources/metadata.scale and b/resources/metadata.scale differ