diff --git a/Cargo.lock b/Cargo.lock index 7b01e222..3767ed73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -303,7 +303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" dependencies = [ "bitcoin_hashes", - "rand_core 0.6.4", + "rand_core 0.5.1", "serde", "unicode-normalization", ] @@ -1913,7 +1913,7 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "pallas" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "pallas-addresses", "pallas-applying", @@ -1933,7 +1933,7 @@ dependencies = [ [[package]] name = "pallas-addresses" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "base58", "bech32 0.9.1", @@ -1948,8 +1948,9 @@ dependencies = [ [[package]] name = "pallas-applying" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ + "hex", "pallas-addresses", "pallas-codec 0.21.0", "pallas-crypto 0.21.0", @@ -1973,7 +1974,7 @@ dependencies = [ [[package]] name = "pallas-codec" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "hex", "minicbor 0.20.0", @@ -1984,7 +1985,7 @@ dependencies = [ [[package]] name = "pallas-configs" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "base64 0.21.5", "hex", @@ -2012,7 +2013,7 @@ dependencies = [ [[package]] name = "pallas-crypto" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "cryptoxide", "hex", @@ -2025,7 +2026,7 @@ dependencies = [ [[package]] name = "pallas-hardano" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "binary-layout", "pallas-network 0.21.0", @@ -2054,7 +2055,7 @@ dependencies = [ [[package]] name = "pallas-network" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "byteorder", "hex", @@ -2071,7 +2072,7 @@ dependencies = [ [[package]] name = "pallas-primitives" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "base58", "bech32 0.9.1", @@ -2086,7 +2087,7 @@ dependencies = [ [[package]] name = "pallas-rolldb" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "async-stream", "bincode", @@ -2103,7 +2104,7 @@ dependencies = [ [[package]] name = "pallas-traverse" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "hex", "pallas-addresses", @@ -2118,7 +2119,7 @@ dependencies = [ [[package]] name = "pallas-txbuilder" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "hex", "pallas-addresses", @@ -2135,7 +2136,7 @@ dependencies = [ [[package]] name = "pallas-utxorpc" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "pallas-codec 0.21.0", "pallas-primitives", @@ -2146,7 +2147,7 @@ dependencies = [ [[package]] name = "pallas-wallet" version = "0.21.0" -source = "git+https://github.com/txpipe/pallas.git#ca27aa91acf2bc579f3f1e4e8885cf2284fa90df" +source = "git+https://github.com/txpipe/pallas.git#7b2894e4a26943c974fe90d3ac341fb0b597768d" dependencies = [ "bech32 0.9.1", "bip39", diff --git a/examples/sync-mainnet/dolos.toml b/examples/sync-mainnet/dolos.toml index 569fa2bf..429a4d29 100644 --- a/examples/sync-mainnet/dolos.toml +++ b/examples/sync-mainnet/dolos.toml @@ -2,6 +2,7 @@ peer_address = "relays-new.cardano-mainnet.iohk.io:3001" network_magic = 764824073 network_id = 1 +phase1_validation_enabled = false [rolldb] path = "./tmp/rolldb" diff --git a/src/sync/pparams.rs b/src/sync/pparams.rs index 4d2c8b14..e984eca1 100644 --- a/src/sync/pparams.rs +++ b/src/sync/pparams.rs @@ -1,6 +1,9 @@ use gasket::framework::{AsWorkError, WorkerError}; use pallas::{ - applying::{Environment, MultiEraProtParams}, + applying::utils::{ + AlonzoProtParams, ByronProtParams, Environment, FeePolicy, MultiEraProtParams, + ShelleyProtParams, + }, ledger::{ configs::{byron, shelley}, traverse::{Era, MultiEraUpdate}, @@ -18,24 +21,23 @@ pub struct Genesis<'a> { fn pparams_from_byron_genesis( byron: &byron::GenesisFile, ) -> Result { - let out = - pallas::applying::MultiEraProtParams::Byron(pallas::applying::types::ByronProtParams { - fee_policy: pallas::applying::types::FeePolicy { - summand: byron - .block_version_data - .tx_fee_policy - .summand - .parse() - .or_panic()?, - multiplier: byron - .block_version_data - .tx_fee_policy - .multiplier - .parse() - .or_panic()?, - }, - max_tx_size: byron.block_version_data.max_tx_size.parse().or_panic()?, - }); + let out = pallas::applying::MultiEraProtParams::Byron(ByronProtParams { + fee_policy: FeePolicy { + summand: byron + .block_version_data + .tx_fee_policy + .summand + .parse() + .or_panic()?, + multiplier: byron + .block_version_data + .tx_fee_policy + .multiplier + .parse() + .or_panic()?, + }, + max_tx_size: byron.block_version_data.max_tx_size.parse().or_panic()?, + }); Ok(out) } @@ -43,15 +45,14 @@ fn pparams_from_byron_genesis( fn pparams_from_shelley_genesis( shelley: &shelley::GenesisFile, ) -> Result { - let out = - pallas::applying::MultiEraProtParams::Shelley(pallas::applying::types::ShelleyProtParams { - fee_policy: pallas::applying::types::FeePolicy { - summand: shelley.protocol_params.min_fee_a, - multiplier: shelley.protocol_params.min_fee_b, - }, - max_tx_size: shelley.protocol_params.max_tx_size, - min_lovelace: shelley.protocol_params.min_u_tx_o_value, - }); + let out = pallas::applying::MultiEraProtParams::Shelley(ShelleyProtParams { + fee_policy: FeePolicy { + summand: shelley.protocol_params.min_fee_a, + multiplier: shelley.protocol_params.min_fee_b, + }, + max_tx_size: shelley.protocol_params.max_tx_size, + min_lovelace: shelley.protocol_params.min_u_tx_o_value, + }); Ok(out) } @@ -90,7 +91,7 @@ fn apply_param_update( warn!("found new byron fee policy update proposal"); let new = new.unwrap(); - pparams.fee_policy = pallas::applying::types::FeePolicy { + pparams.fee_policy = FeePolicy { summand: new.0 as u64, multiplier: new.1 as u64, }; @@ -135,30 +136,75 @@ fn apply_param_update( } } +// TODO: perform proper protocol parameters update for the Alonzo era. pub fn compute_pparams( genesis: Genesis, ledger: &ApplyDB, epoch: u64, ) -> Result { - let mut out = Environment { - block_slot: 0, - prot_magic: genesis.byron.protocol_consts.protocol_magic, - network_id: match genesis.shelley.network_id.as_deref() { - Some("Mainnet") => 0, - _ => 1, - }, - prot_params: apply_era_hardfork(&genesis, 1)?, - }; + if (290..=364).contains(&epoch) { + // Alonzo era + let max_tx_ex_mem: u32 = if (..306).contains(&epoch) { + 10000000 + } else if (306..319).contains(&epoch) { + 11250000 + } else { + 14000000 + }; + let max_block_ex_mem: u64 = if (290..321).contains(&epoch) { + 50000000 + } else if (321..328).contains(&epoch) { + 56000000 + } else { + 62000000 + }; + let prot_pps: AlonzoProtParams = AlonzoProtParams { + fee_policy: FeePolicy { + summand: 155381, + multiplier: 44, + }, + max_tx_size: 16384, + max_block_ex_mem, + max_block_ex_steps: 40000000000, + max_tx_ex_mem, + max_tx_ex_steps: 10000000000, + max_val_size: 5000, + collateral_percent: 150, + max_collateral_inputs: 3, + coins_per_utxo_word: 34482, + }; + let res: Environment = Environment { + block_slot: 0, + prot_magic: genesis.byron.protocol_consts.protocol_magic, + network_id: match genesis.shelley.network_id.as_deref() { + Some("Mainnet") => 0, + _ => 1, + }, + prot_params: MultiEraProtParams::Alonzo(prot_pps), + }; + Ok(res) + } else { + // Eras other than Alonzo + let mut out = Environment { + block_slot: 0, + prot_magic: genesis.byron.protocol_consts.protocol_magic, + network_id: match genesis.shelley.network_id.as_deref() { + Some("Mainnet") => 0, + _ => 1, + }, + prot_params: apply_era_hardfork(&genesis, 1)?, + }; - let updates = ledger.get_pparams_updates(epoch).or_panic()?; + let updates = ledger.get_pparams_updates(epoch).or_panic()?; - info!(epoch, updates = updates.len(), "computing pparams"); + info!(epoch, updates = updates.len(), "computing pparams"); - for (era, _, cbor) in updates { - let era = Era::try_from(era).or_panic()?; - let update = MultiEraUpdate::decode_for_era(era, &cbor).or_panic()?; - out.prot_params = apply_param_update(&genesis, era, out.prot_params, update)?; - } + for (era, _, cbor) in updates { + let era = Era::try_from(era).or_panic()?; + let update = MultiEraUpdate::decode_for_era(era, &cbor).or_panic()?; + out.prot_params = apply_param_update(&genesis, era, out.prot_params, update)?; + } - Ok(out) + Ok(out) + } }