Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • nodes/rust/duniter-v2s
  • llaq/lc-core-substrate
  • pini-gh/duniter-v2s
  • vincentux/duniter-v2s
  • mildred/duniter-v2s
  • d0p1/duniter-v2s
  • bgallois/duniter-v2s
  • Nicolas80/duniter-v2s
8 results
Show changes
Showing
with 394 additions and 174 deletions
...@@ -96,12 +96,6 @@ pub fn development_chain_spec() -> Result<ChainSpec, String> { ...@@ -96,12 +96,6 @@ pub fn development_chain_spec() -> Result<ChainSpec, String> {
) )
}, },
Some(get_authority_keys_from_seed("Alice").encode()), Some(get_authority_keys_from_seed("Alice").encode()),
Some(super::gen_genesis_data::ParamsAppliedAtGenesis {
genesis_certs_expire_on: 100_000,
genesis_smith_certs_expire_on: 100_000,
genesis_memberships_expire_on: 100_000,
genesis_smith_memberships_expire_on: 100_000,
}),
) )
} else { } else {
Ok(ChainSpec::from_genesis( Ok(ChainSpec::from_genesis(
...@@ -163,9 +157,15 @@ pub fn gen_live_conf() -> Result<ChainSpec, String> { ...@@ -163,9 +157,15 @@ pub fn gen_live_conf() -> Result<ChainSpec, String> {
// Bootnodes // Bootnodes
vec![], vec![],
// Telemetry // Telemetry
None, Some(
sc_service::config::TelemetryEndpoints::new(vec![(
"wss://telemetry.polkadot.io/submit/".to_owned(),
0,
)])
.expect("invalid telemetry endpoints"),
),
// Protocol ID // Protocol ID
None, Some("gdev2"),
//Fork ID //Fork ID
None, None,
// Properties // Properties
...@@ -183,12 +183,6 @@ pub fn gen_live_conf() -> Result<ChainSpec, String> { ...@@ -183,12 +183,6 @@ pub fn gen_live_conf() -> Result<ChainSpec, String> {
) )
}, },
None, None,
Some(super::gen_genesis_data::ParamsAppliedAtGenesis {
genesis_certs_expire_on: 100_000,
genesis_smith_certs_expire_on: 100_000,
genesis_memberships_expire_on: 100_000,
genesis_smith_memberships_expire_on: 100_000,
}),
) )
} }
...@@ -312,7 +306,7 @@ fn gen_genesis_for_local_chain( ...@@ -312,7 +306,7 @@ fn gen_genesis_for_local_chain(
smith_cert_period: 15, smith_cert_period: 15,
smith_cert_max_by_issuer: 8, smith_cert_max_by_issuer: 8,
smith_cert_min_received_cert_to_issue_cert: 2, smith_cert_min_received_cert_to_issue_cert: 2,
smith_cert_validity_period: 1_000, smith_cert_validity_period,
smith_membership_period, smith_membership_period,
smith_pending_membership_period: 500, smith_pending_membership_period: 500,
smiths_wot_first_cert_issuable_on: 20, smiths_wot_first_cert_issuable_on: 20,
...@@ -387,7 +381,7 @@ fn gen_genesis_for_local_chain( ...@@ -387,7 +381,7 @@ fn gen_genesis_for_local_chain(
}, },
cert: CertConfig { cert: CertConfig {
apply_cert_period_at_genesis: false, apply_cert_period_at_genesis: false,
certs_by_receiver: clique_wot(initial_identities.len(), cert_validity_period), certs_by_receiver: clique_wot(initial_identities.len()),
}, },
smiths_membership: SmithsMembershipConfig { smiths_membership: SmithsMembershipConfig {
memberships: (1..=initial_smiths_len) memberships: (1..=initial_smiths_len)
...@@ -396,7 +390,7 @@ fn gen_genesis_for_local_chain( ...@@ -396,7 +390,7 @@ fn gen_genesis_for_local_chain(
}, },
smiths_cert: SmithsCertConfig { smiths_cert: SmithsCertConfig {
apply_cert_period_at_genesis: false, apply_cert_period_at_genesis: false,
certs_by_receiver: clique_wot(initial_smiths_len, smith_cert_validity_period), certs_by_receiver: clique_wot(initial_smiths_len),
}, },
universal_dividend: UniversalDividendConfig { universal_dividend: UniversalDividendConfig {
first_reeval: 100, first_reeval: 100,
......
...@@ -26,7 +26,7 @@ const EXISTENTIAL_DEPOSIT: u64 = 100; ...@@ -26,7 +26,7 @@ const EXISTENTIAL_DEPOSIT: u64 = 100;
#[derive(Clone)] #[derive(Clone)]
pub struct GenesisData<Parameters: DeserializeOwned, SessionKeys: Decode> { pub struct GenesisData<Parameters: DeserializeOwned, SessionKeys: Decode> {
pub accounts: BTreeMap<AccountId, GenesisAccountData<u64>>, pub accounts: BTreeMap<AccountId, GenesisAccountData<u64>>,
pub certs_by_receiver: BTreeMap<u32, BTreeMap<u32, u32>>, pub certs_by_receiver: BTreeMap<u32, BTreeMap<u32, Option<u32>>>,
pub first_ud: u64, pub first_ud: u64,
pub first_ud_reeval: u32, pub first_ud_reeval: u32,
pub identities: Vec<(String, AccountId)>, pub identities: Vec<(String, AccountId)>,
...@@ -35,17 +35,17 @@ pub struct GenesisData<Parameters: DeserializeOwned, SessionKeys: Decode> { ...@@ -35,17 +35,17 @@ pub struct GenesisData<Parameters: DeserializeOwned, SessionKeys: Decode> {
pub memberships: BTreeMap<u32, MembershipData>, pub memberships: BTreeMap<u32, MembershipData>,
pub parameters: Parameters, pub parameters: Parameters,
pub session_keys_map: BTreeMap<AccountId, SessionKeys>, pub session_keys_map: BTreeMap<AccountId, SessionKeys>,
pub smiths_certs_by_receiver: BTreeMap<u32, BTreeMap<u32, u32>>, pub smiths_certs_by_receiver: BTreeMap<u32, BTreeMap<u32, Option<u32>>>,
pub smiths_memberships: BTreeMap<u32, MembershipData>, pub smiths_memberships: BTreeMap<u32, MembershipData>,
pub sudo_key: Option<AccountId>, pub sudo_key: Option<AccountId>,
pub technical_committee_members: Vec<AccountId>, pub technical_committee_members: Vec<AccountId>,
} }
#[derive(Default)] #[derive(Default, Deserialize, Serialize)]
pub struct ParamsAppliedAtGenesis { pub struct ParamsAppliedAtGenesis {
pub genesis_certs_expire_on: u32, pub genesis_certs_min_received: u32,
pub genesis_smith_certs_expire_on: u32,
pub genesis_memberships_expire_on: u32, pub genesis_memberships_expire_on: u32,
pub genesis_smith_certs_min_received: u32,
pub genesis_smith_memberships_expire_on: u32, pub genesis_smith_memberships_expire_on: u32,
} }
...@@ -53,6 +53,7 @@ pub struct ParamsAppliedAtGenesis { ...@@ -53,6 +53,7 @@ pub struct ParamsAppliedAtGenesis {
struct GenesisConfig<Parameters> { struct GenesisConfig<Parameters> {
first_ud: u64, first_ud: u64,
first_ud_reeval: u32, first_ud_reeval: u32,
genesis_parameters: ParamsAppliedAtGenesis,
identities: BTreeMap<String, Idty>, identities: BTreeMap<String, Idty>,
#[serde(default)] #[serde(default)]
parameters: Parameters, parameters: Parameters,
...@@ -85,20 +86,12 @@ struct SmithData { ...@@ -85,20 +86,12 @@ struct SmithData {
pub fn generate_genesis_data<CS, P, SK, F>( pub fn generate_genesis_data<CS, P, SK, F>(
f: F, f: F,
maybe_force_authority: Option<Vec<u8>>, maybe_force_authority: Option<Vec<u8>>,
params_applied_at_genesis: Option<ParamsAppliedAtGenesis>,
) -> Result<CS, String> ) -> Result<CS, String>
where where
P: Default + DeserializeOwned, P: Default + DeserializeOwned,
SK: Decode, SK: Decode,
F: Fn(GenesisData<P, SK>) -> CS, F: Fn(GenesisData<P, SK>) -> CS,
{ {
let ParamsAppliedAtGenesis {
genesis_certs_expire_on,
genesis_smith_certs_expire_on,
genesis_memberships_expire_on,
genesis_smith_memberships_expire_on,
} = params_applied_at_genesis.unwrap_or_default();
let genesis_timestamp: u64 = let genesis_timestamp: u64 =
if let Ok(genesis_timestamp) = std::env::var("DUNITER_GENESIS_TIMESTAMP") { if let Ok(genesis_timestamp) = std::env::var("DUNITER_GENESIS_TIMESTAMP") {
genesis_timestamp genesis_timestamp
...@@ -133,6 +126,13 @@ where ...@@ -133,6 +126,13 @@ where
sudo_key, sudo_key,
first_ud, first_ud,
first_ud_reeval, first_ud_reeval,
genesis_parameters:
ParamsAppliedAtGenesis {
genesis_certs_min_received,
genesis_memberships_expire_on,
genesis_smith_certs_min_received,
genesis_smith_memberships_expire_on,
},
parameters, parameters,
identities, identities,
smith_identities, smith_identities,
...@@ -233,11 +233,23 @@ where ...@@ -233,11 +233,23 @@ where
let issuer_index = idty_index_of let issuer_index = idty_index_of
.get(issuer) .get(issuer)
.ok_or(format!("Identity '{}' not exist", issuer))?; .ok_or(format!("Identity '{}' not exist", issuer))?;
receiver_certs.insert(*issuer_index, genesis_certs_expire_on); receiver_certs.insert(*issuer_index, None);
} }
certs_by_receiver.insert(*issuer_index, receiver_certs); certs_by_receiver.insert(*issuer_index, receiver_certs);
} }
// Verify certifications coherence
for (idty_index, receiver_certs) in &certs_by_receiver {
if receiver_certs.len() < genesis_certs_min_received as usize {
return Err(format!(
"Identity n°{} has received only {}/{} certifications)",
idty_index,
receiver_certs.len(),
genesis_certs_min_received
));
}
}
// SMITHS SUB-WOT // // SMITHS SUB-WOT //
let mut initial_authorities = BTreeMap::new(); let mut initial_authorities = BTreeMap::new();
...@@ -303,7 +315,7 @@ where ...@@ -303,7 +315,7 @@ where
let issuer_index = idty_index_of let issuer_index = idty_index_of
.get(receiver) .get(receiver)
.ok_or(format!("Identity '{}' not exist", receiver))?; .ok_or(format!("Identity '{}' not exist", receiver))?;
receiver_certs.insert(*issuer_index, genesis_smith_certs_expire_on); receiver_certs.insert(*issuer_index, None);
} }
smiths_certs_by_receiver.insert(*idty_index, receiver_certs); smiths_certs_by_receiver.insert(*idty_index, receiver_certs);
...@@ -316,6 +328,24 @@ where ...@@ -316,6 +328,24 @@ where
); );
} }
// Verify smiths certifications coherence
if smiths_certs_by_receiver.len() < smiths_memberships.len() {
return Err(format!(
"{} smith identities has not received any smiths certifications",
smiths_memberships.len() - smiths_certs_by_receiver.len()
));
}
for (idty_index, receiver_certs) in &smiths_certs_by_receiver {
if receiver_certs.len() < genesis_smith_certs_min_received as usize {
return Err(format!(
"Identity n°{} has received only {}/{} smiths certifications)",
idty_index,
receiver_certs.len(),
genesis_smith_certs_min_received
));
}
}
if maybe_force_authority.is_none() && online_authorities_counter == 0 { if maybe_force_authority.is_none() && online_authorities_counter == 0 {
return Err("The session_keys field must be filled in for at least one smith.".to_owned()); return Err("The session_keys field must be filled in for at least one smith.".to_owned());
} }
......
...@@ -46,23 +46,23 @@ version = "3.1.5" ...@@ -46,23 +46,23 @@ version = "3.1.5"
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
optional = true optional = true
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-support] [dependencies.frame-support]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-system] [dependencies.frame-system]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.pallet-session] [dependencies.pallet-session]
default-features = false default-features = false
features = ["historical"] features = ["historical"]
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.serde] [dependencies.serde]
version = "1.0.101" version = "1.0.101"
...@@ -72,22 +72,22 @@ features = ["derive"] ...@@ -72,22 +72,22 @@ features = ["derive"]
[dependencies.sp-core] [dependencies.sp-core]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-runtime] [dependencies.sp-runtime]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-staking] [dependencies.sp-staking]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-std] [dependencies.sp-std]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
### DOC ### ### DOC ###
...@@ -104,4 +104,4 @@ version = '1.0.119' ...@@ -104,4 +104,4 @@ version = '1.0.119'
[dev-dependencies.sp-io] [dev-dependencies.sp-io]
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
...@@ -39,17 +39,17 @@ version = "3.1.5" ...@@ -39,17 +39,17 @@ version = "3.1.5"
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
optional = true optional = true
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-support] [dependencies.frame-support]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-system] [dependencies.frame-system]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.serde] [dependencies.serde]
version = "1.0.101" version = "1.0.101"
...@@ -59,17 +59,17 @@ features = ["derive"] ...@@ -59,17 +59,17 @@ features = ["derive"]
[dependencies.sp-core] [dependencies.sp-core]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-runtime] [dependencies.sp-runtime]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-std] [dependencies.sp-std]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
### DOC ### ### DOC ###
...@@ -86,4 +86,4 @@ version = '1.0.2' ...@@ -86,4 +86,4 @@ version = '1.0.2'
[dev-dependencies.sp-io] [dev-dependencies.sp-io]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
...@@ -90,9 +90,11 @@ pub mod pallet { ...@@ -90,9 +90,11 @@ pub mod pallet {
// GENESIS STUFF // // GENESIS STUFF //
#[pallet::genesis_config] #[pallet::genesis_config]
#[allow(clippy::type_complexity)]
pub struct GenesisConfig<T: Config<I>, I: 'static = ()> { pub struct GenesisConfig<T: Config<I>, I: 'static = ()> {
pub apply_cert_period_at_genesis: bool, pub apply_cert_period_at_genesis: bool,
pub certs_by_receiver: BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, T::BlockNumber>>, pub certs_by_receiver:
BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, Option<T::BlockNumber>>>,
} }
#[cfg(feature = "std")] #[cfg(feature = "std")]
...@@ -128,7 +130,8 @@ pub mod pallet { ...@@ -128,7 +130,8 @@ pub mod pallet {
received_count: issuers.len() as u32, received_count: issuers.len() as u32,
}); });
for (issuer, removable_on) in issuers { let mut issuers_: Vec<_> = Vec::with_capacity(issuers.len());
for (issuer, maybe_removable_on) in issuers {
// Count issued certs // Count issued certs
cert_meta_by_issuer cert_meta_by_issuer
.entry(*issuer) .entry(*issuer)
...@@ -139,9 +142,13 @@ pub mod pallet { ...@@ -139,9 +142,13 @@ pub mod pallet {
}) })
.issued_count += 1; .issued_count += 1;
// Compute and store removable_on
let removable_on = maybe_removable_on.unwrap_or_else(T::ValidityPeriod::get);
issuers_.push((*issuer, removable_on));
// Prepare CertsRemovableOn // Prepare CertsRemovableOn
certs_removable_on certs_removable_on
.entry(*removable_on) .entry(removable_on)
.or_default() .or_default()
.push((*issuer, *receiver)); .push((*issuer, *receiver));
...@@ -158,9 +165,8 @@ pub mod pallet { ...@@ -158,9 +165,8 @@ pub mod pallet {
} }
// Write CertsByReceiver // Write CertsByReceiver
let mut issuers: Vec<_> = issuers.iter().collect(); issuers_.sort();
issuers.sort(); CertsByReceiver::<T, I>::insert(receiver, issuers_);
CertsByReceiver::<T, I>::insert(receiver, issuers);
} }
// Write StorageIdtyCertMeta // Write StorageIdtyCertMeta
......
...@@ -42,8 +42,8 @@ fn test_cannot_certify_self() { ...@@ -42,8 +42,8 @@ fn test_cannot_certify_self() {
apply_cert_period_at_genesis: true, apply_cert_period_at_genesis: true,
certs_by_receiver: btreemap![ certs_by_receiver: btreemap![
0 => btreemap![ 0 => btreemap![
1 => 5, 1 => Some(5),
2 => 5, 2 => Some(5),
], ],
], ],
}) })
...@@ -63,16 +63,16 @@ fn test_genesis_build() { ...@@ -63,16 +63,16 @@ fn test_genesis_build() {
apply_cert_period_at_genesis: true, apply_cert_period_at_genesis: true,
certs_by_receiver: btreemap![ certs_by_receiver: btreemap![
0 => btreemap![ 0 => btreemap![
1 => 7, 1 => Some(7),
2 => 9, 2 => Some(9),
], ],
1 => btreemap![ 1 => btreemap![
0 => 10, 0 => Some(10),
2 => 3, 2 => Some(3),
], ],
2 => btreemap![ 2 => btreemap![
0 => 5, 0 => Some(5),
1 => 4, 1 => Some(4),
], ],
], ],
}) })
...@@ -132,16 +132,16 @@ fn test_cert_period() { ...@@ -132,16 +132,16 @@ fn test_cert_period() {
apply_cert_period_at_genesis: true, apply_cert_period_at_genesis: true,
certs_by_receiver: btreemap![ certs_by_receiver: btreemap![
0 => btreemap![ 0 => btreemap![
1 => 10, 1 => Some(10),
2 => 10, 2 => Some(10),
], ],
1 => btreemap![ 1 => btreemap![
0 => 10, 0 => Some(10),
2 => 10, 2 => Some(10),
], ],
2 => btreemap![ 2 => btreemap![
0 => 10, 0 => Some(10),
1 => 10, 1 => Some(10),
], ],
], ],
}) })
......
...@@ -42,27 +42,27 @@ scale-info = { version = "2.1.1", default-features = false, features = ["derive" ...@@ -42,27 +42,27 @@ scale-info = { version = "2.1.1", default-features = false, features = ["derive"
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
optional = true optional = true
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-support] [dependencies.frame-support]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-system] [dependencies.frame-system]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.pallet-balances] [dependencies.pallet-balances]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.pallet-treasury] [dependencies.pallet-treasury]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.serde] [dependencies.serde]
version = "1.0.101" version = "1.0.101"
...@@ -72,22 +72,22 @@ features = ["derive"] ...@@ -72,22 +72,22 @@ features = ["derive"]
[dependencies.sp-core] [dependencies.sp-core]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-io] [dependencies.sp-io]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-runtime] [dependencies.sp-runtime]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-std] [dependencies.sp-std]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
### DOC ### ### DOC ###
...@@ -98,7 +98,7 @@ targets = ['x86_64-unknown-linux-gnu'] ...@@ -98,7 +98,7 @@ targets = ['x86_64-unknown-linux-gnu']
[dev-dependencies.pallet-balances] [dev-dependencies.pallet-balances]
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dev-dependencies.maplit] [dev-dependencies.maplit]
version = '1.0.2' version = '1.0.2'
...@@ -108,4 +108,4 @@ version = '1.0.119' ...@@ -108,4 +108,4 @@ version = '1.0.119'
[dev-dependencies.sp-io] [dev-dependencies.sp-io]
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
...@@ -54,7 +54,9 @@ pub mod pallet { ...@@ -54,7 +54,9 @@ pub mod pallet {
type AccountIdToSalt: Convert<Self::AccountId, [u8; 32]>; type AccountIdToSalt: Convert<Self::AccountId, [u8; 32]>;
/// The overarching event type. /// The overarching event type.
type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>; type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
#[pallet::constant]
type MaxNewAccountsPerBlock: Get<u32>; type MaxNewAccountsPerBlock: Get<u32>;
#[pallet::constant]
type NewAccountPrice: Get<Self::Balance>; type NewAccountPrice: Get<Self::Balance>;
} }
......
...@@ -39,32 +39,32 @@ version = "3.1.5" ...@@ -39,32 +39,32 @@ version = "3.1.5"
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
optional = true optional = true
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-support] [dependencies.frame-support]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-system] [dependencies.frame-system]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-io] [dependencies.sp-io]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-std] [dependencies.sp-std]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-runtime] [dependencies.sp-runtime]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
### DOC ### ### DOC ###
......
...@@ -48,17 +48,17 @@ version = "3.1.5" ...@@ -48,17 +48,17 @@ version = "3.1.5"
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
optional = true optional = true
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-support] [dependencies.frame-support]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-system] [dependencies.frame-system]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.serde] [dependencies.serde]
version = "1.0.101" version = "1.0.101"
...@@ -68,22 +68,22 @@ features = ["derive"] ...@@ -68,22 +68,22 @@ features = ["derive"]
[dependencies.sp-core] [dependencies.sp-core]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-io] [dependencies.sp-io]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-runtime] [dependencies.sp-runtime]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-std] [dependencies.sp-std]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
### DOC ### ### DOC ###
...@@ -96,4 +96,4 @@ version = '1.0.119' ...@@ -96,4 +96,4 @@ version = '1.0.119'
[dev-dependencies.sp-io] [dev-dependencies.sp-io]
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
...@@ -17,9 +17,6 @@ ...@@ -17,9 +17,6 @@
#![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), no_std)]
#![allow(clippy::type_complexity)] #![allow(clippy::type_complexity)]
//pub mod traits;
mod types;
#[cfg(test)] #[cfg(test)]
mod mock; mod mock;
...@@ -30,14 +27,12 @@ mod tests; ...@@ -30,14 +27,12 @@ mod tests;
mod benchmarking;*/ mod benchmarking;*/
pub use pallet::*; pub use pallet::*;
pub use types::*;
use frame_support::dispatch::UnfilteredDispatchable; use frame_support::dispatch::UnfilteredDispatchable;
use frame_support::pallet_prelude::*; use frame_support::pallet_prelude::*;
use frame_system::RawOrigin; use frame_system::RawOrigin;
use pallet_certification::traits::SetNextIssuableOn; use pallet_certification::traits::SetNextIssuableOn;
use pallet_identity::{IdtyEvent, IdtyStatus}; use pallet_identity::{IdtyEvent, IdtyStatus};
use sp_membership::traits::IsInPendingMemberships;
use sp_runtime::traits::IsMember; use sp_runtime::traits::IsMember;
type IdtyIndex = u32; type IdtyIndex = u32;
...@@ -65,9 +60,13 @@ pub mod pallet { ...@@ -65,9 +60,13 @@ pub mod pallet {
+ pallet_identity::Config<IdtyIndex = IdtyIndex> + pallet_identity::Config<IdtyIndex = IdtyIndex>
+ pallet_membership::Config<I, IdtyId = IdtyIndex> + pallet_membership::Config<I, IdtyId = IdtyIndex>
{ {
#[pallet::constant]
type FirstIssuableOn: Get<Self::BlockNumber>; type FirstIssuableOn: Get<Self::BlockNumber>;
#[pallet::constant]
type IsSubWot: Get<bool>; type IsSubWot: Get<bool>;
#[pallet::constant]
type MinCertForMembership: Get<u32>; type MinCertForMembership: Get<u32>;
#[pallet::constant]
type MinCertForCreateIdtyRight: Get<u32>; type MinCertForCreateIdtyRight: Get<u32>;
} }
...@@ -98,32 +97,57 @@ pub mod pallet { ...@@ -98,32 +97,57 @@ pub mod pallet {
impl<AccountId, T: Config<I>, I: 'static> pallet_identity::traits::EnsureIdtyCallAllowed<T> impl<AccountId, T: Config<I>, I: 'static> pallet_identity::traits::EnsureIdtyCallAllowed<T>
for Pallet<T, I> for Pallet<T, I>
where where
T: frame_system::Config<AccountId = AccountId> T: frame_system::Config<AccountId = AccountId> + pallet_membership::Config<I>,
+ pallet_membership::Config<I, MetaData = MembershipMetaData<AccountId>>,
{ {
fn can_create_identity(creator: IdtyIndex) -> bool { fn can_create_identity(creator: IdtyIndex) -> bool {
let cert_meta = pallet_certification::Pallet::<T, I>::idty_cert_meta(creator); if !T::IsSubWot::get() {
cert_meta.received_count >= T::MinCertForCreateIdtyRight::get() let cert_meta = pallet_certification::Pallet::<T, I>::idty_cert_meta(creator);
&& cert_meta.next_issuable_on <= frame_system::pallet::Pallet::<T>::block_number() cert_meta.received_count >= T::MinCertForCreateIdtyRight::get()
&& cert_meta.issued_count < T::MaxByIssuer::get() && cert_meta.next_issuable_on <= frame_system::pallet::Pallet::<T>::block_number()
&& cert_meta.issued_count < T::MaxByIssuer::get()
} else {
true
}
} }
fn can_confirm_identity(idty_index: IdtyIndex, owner_key: AccountId) -> bool { fn can_confirm_identity(idty_index: IdtyIndex) -> bool {
pallet_membership::Pallet::<T, I>::force_request_membership( if !T::IsSubWot::get() {
RawOrigin::Root.into(), pallet_membership::Pallet::<T, I>::force_request_membership(
idty_index, RawOrigin::Root.into(),
MembershipMetaData(owner_key), idty_index,
) Default::default(),
.is_ok() )
.is_ok()
} else {
true
}
} }
fn can_validate_identity(idty_index: IdtyIndex) -> bool { fn can_validate_identity(idty_index: IdtyIndex) -> bool {
// TODO replace this code by te commented one for distance feature if !T::IsSubWot::get() {
/*let idty_cert_meta = pallet_certification::Pallet::<T, I>::idty_cert_meta(idty_index); // TODO replace this code by the commented one for distance feature
idty_cert_meta.received_count >= T::MinCertForMembership::get() as u32*/ /*let idty_cert_meta = pallet_certification::Pallet::<T, I>::idty_cert_meta(idty_index);
pallet_membership::Pallet::<T, I>::claim_membership( idty_cert_meta.received_count >= T::MinCertForMembership::get() as u32*/
RawOrigin::Root.into(), pallet_membership::Pallet::<T, I>::claim_membership(
Some(idty_index), RawOrigin::Root.into(),
) Some(idty_index),
.is_ok() )
.is_ok()
} else {
true
}
}
fn can_change_identity_address(idty_index: IdtyIndex) -> bool {
if T::IsSubWot::get() {
!pallet_membership::Pallet::<T, I>::is_member(&idty_index)
} else {
true
}
}
fn can_remove_identity(idty_index: IdtyIndex) -> bool {
if T::IsSubWot::get() {
!pallet_membership::Pallet::<T, I>::is_member(&idty_index)
} else {
true
}
} }
} }
...@@ -137,14 +161,8 @@ impl<T: Config<I>, I: 'static> pallet_certification::traits::IsCertAllowed<IdtyI ...@@ -137,14 +161,8 @@ impl<T: Config<I>, I: 'static> pallet_certification::traits::IsCertAllowed<IdtyI
} }
if let Some(receiver_data) = pallet_identity::Pallet::<T>::identity(receiver) { if let Some(receiver_data) = pallet_identity::Pallet::<T>::identity(receiver) {
match receiver_data.status { match receiver_data.status {
IdtyStatus::ConfirmedByOwner => true, IdtyStatus::ConfirmedByOwner | IdtyStatus::Validated => true,
IdtyStatus::Created => false, IdtyStatus::Created => false,
IdtyStatus::Validated => {
pallet_membership::Pallet::<T, I>::is_member(&receiver)
|| pallet_membership::Pallet::<T, I>::is_in_pending_memberships(
receiver,
)
}
} }
} else { } else {
// Receiver not found // Receiver not found
......
...@@ -122,7 +122,7 @@ impl pallet_identity::Config for Test { ...@@ -122,7 +122,7 @@ impl pallet_identity::Config for Test {
type ChangeOwnerKeyPeriod = ChangeOwnerKeyPeriod; type ChangeOwnerKeyPeriod = ChangeOwnerKeyPeriod;
type ConfirmPeriod = ConfirmPeriod; type ConfirmPeriod = ConfirmPeriod;
type Event = Event; type Event = Event;
type EnsureIdtyCallAllowed = DuniterWot; type EnsureIdtyCallAllowed = (DuniterWot, SmithsSubWot);
type IdtyCreationPeriod = IdtyCreationPeriod; type IdtyCreationPeriod = IdtyCreationPeriod;
type IdtyData = (); type IdtyData = ();
type IdtyNameValidator = IdtyNameValidatorTestImpl; type IdtyNameValidator = IdtyNameValidatorTestImpl;
...@@ -150,7 +150,7 @@ impl pallet_membership::Config<Instance1> for Test { ...@@ -150,7 +150,7 @@ impl pallet_membership::Config<Instance1> for Test {
type IdtyId = IdtyIndex; type IdtyId = IdtyIndex;
type IdtyIdOf = IdentityIndexOf<Self>; type IdtyIdOf = IdentityIndexOf<Self>;
type MembershipPeriod = MembershipPeriod; type MembershipPeriod = MembershipPeriod;
type MetaData = crate::MembershipMetaData<u64>; type MetaData = ();
type OnEvent = DuniterWot; type OnEvent = DuniterWot;
type PendingMembershipPeriod = PendingMembershipPeriod; type PendingMembershipPeriod = PendingMembershipPeriod;
type RevocationPeriod = RevocationPeriod; type RevocationPeriod = RevocationPeriod;
...@@ -206,7 +206,7 @@ impl pallet_membership::Config<Instance2> for Test { ...@@ -206,7 +206,7 @@ impl pallet_membership::Config<Instance2> for Test {
type IdtyId = IdtyIndex; type IdtyId = IdtyIndex;
type IdtyIdOf = IdentityIndexOf<Self>; type IdtyIdOf = IdentityIndexOf<Self>;
type MembershipPeriod = SmithsMembershipPeriod; type MembershipPeriod = SmithsMembershipPeriod;
type MetaData = crate::MembershipMetaData<u64>; type MetaData = ();
type OnEvent = SmithsSubWot; type OnEvent = SmithsSubWot;
type PendingMembershipPeriod = SmithsPendingMembershipPeriod; type PendingMembershipPeriod = SmithsPendingMembershipPeriod;
type RevocationPeriod = SmithsRevocationPeriod; type RevocationPeriod = SmithsRevocationPeriod;
...@@ -347,7 +347,7 @@ pub fn run_to_block(n: u64) { ...@@ -347,7 +347,7 @@ pub fn run_to_block(n: u64) {
fn clique_wot( fn clique_wot(
initial_identities_len: usize, initial_identities_len: usize,
cert_validity_period: u64, cert_validity_period: u64,
) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, u64>> { ) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, Option<u64>>> {
let mut certs_by_issuer = BTreeMap::new(); let mut certs_by_issuer = BTreeMap::new();
for i in 1..=initial_identities_len { for i in 1..=initial_identities_len {
certs_by_issuer.insert( certs_by_issuer.insert(
...@@ -355,7 +355,7 @@ fn clique_wot( ...@@ -355,7 +355,7 @@ fn clique_wot(
(1..=initial_identities_len) (1..=initial_identities_len)
.filter_map(|j| { .filter_map(|j| {
if i != j { if i != j {
Some((j as IdtyIndex, cert_validity_period)) Some((j as IdtyIndex, Some(cert_validity_period)))
} else { } else {
None None
} }
......
This diff is collapsed.
...@@ -41,33 +41,33 @@ serde = { version = "1.0.101", features = ["derive"], optional = true } ...@@ -41,33 +41,33 @@ serde = { version = "1.0.101", features = ["derive"], optional = true }
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
optional = true optional = true
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-support] [dependencies.frame-support]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.frame-system] [dependencies.frame-system]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-core] [dependencies.sp-core]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-runtime] [dependencies.sp-runtime]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dependencies.sp-std] [dependencies.sp-std]
default-features = false default-features = false
git = 'https://github.com/duniter/substrate' git = 'https://github.com/duniter/substrate'
branch = 'duniter-substrate-v0.9.23' branch = 'duniter-substrate-v0.9.26'
[dev-dependencies] [dev-dependencies]
serde = '1.0.119' serde = '1.0.119'
sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.23' } sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.26' }
This diff is collapsed.
...@@ -117,6 +117,7 @@ pub fn new_test_ext(gen_conf: pallet_identity::GenesisConfig<Test>) -> sp_io::Te ...@@ -117,6 +117,7 @@ pub fn new_test_ext(gen_conf: pallet_identity::GenesisConfig<Test>) -> sp_io::Te
frame_support::BasicExternalities::execute_with_storage(&mut t, || { frame_support::BasicExternalities::execute_with_storage(&mut t, || {
// Some dedicated test account // Some dedicated test account
frame_system::Pallet::<Test>::inc_sufficients(&1);
frame_system::Pallet::<Test>::inc_providers(&2); frame_system::Pallet::<Test>::inc_providers(&2);
frame_system::Pallet::<Test>::inc_providers(&3); frame_system::Pallet::<Test>::inc_providers(&3);
}); });
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -72,7 +72,7 @@ pub mod pallet { ...@@ -72,7 +72,7 @@ pub mod pallet {
/// Something that give the IdtyId on an account id /// Something that give the IdtyId on an account id
type IdtyIdOf: Convert<Self::AccountId, Option<Self::IdtyId>>; type IdtyIdOf: Convert<Self::AccountId, Option<Self::IdtyId>>;
/// Optional metadata /// Optional metadata
type MetaData: Parameter + Validate<Self::AccountId>; type MetaData: Default + Parameter + Validate<Self::AccountId>;
#[pallet::constant] #[pallet::constant]
/// Maximum life span of a non-renewable membership (in number of blocks) /// Maximum life span of a non-renewable membership (in number of blocks)
type MembershipPeriod: Get<Self::BlockNumber>; type MembershipPeriod: Get<Self::BlockNumber>;
......