From 4e3fca62c9098e503f9f2d46e868bacb52686d95 Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Fri, 24 Jan 2025 00:18:41 +0900 Subject: [PATCH] feat: support shelley genesis utxos --- src/bin/dolos/doctor/rebuild_ledger.rs | 2 +- src/ledger/mod.rs | 49 ++++++++++++++++++-------- src/sync/apply.rs | 2 +- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/bin/dolos/doctor/rebuild_ledger.rs b/src/bin/dolos/doctor/rebuild_ledger.rs index 1f8fdab..ebabf7b 100644 --- a/src/bin/dolos/doctor/rebuild_ledger.rs +++ b/src/bin/dolos/doctor/rebuild_ledger.rs @@ -35,7 +35,7 @@ pub fn run(config: &crate::Config, _args: &Args, feedback: &Feedback) -> miette: { debug!("importing genesis"); - let delta = dolos::ledger::compute_origin_delta(&genesis.byron); + let delta = dolos::ledger::compute_origin_delta(&genesis.byron, &genesis.shelley); light .apply(&[delta]) diff --git a/src/ledger/mod.rs b/src/ledger/mod.rs index 81014df..79e971b 100644 --- a/src/ledger/mod.rs +++ b/src/ledger/mod.rs @@ -200,23 +200,42 @@ pub fn compute_undo_delta( Ok(delta) } -pub fn compute_origin_delta(byron: &pallas::ledger::configs::byron::GenesisFile) -> LedgerDelta { +pub fn compute_origin_delta(byron: &pallas::ledger::configs::byron::GenesisFile, shelley: &pallas::ledger::configs::shelley::GenesisFile) -> LedgerDelta { let mut delta = LedgerDelta::default(); - let utxos = pallas::ledger::configs::byron::genesis_utxos(byron); - - for (tx, addr, amount) in utxos { - let utxo_ref = TxoRef(tx, 0); - let utxo_body = pallas::ledger::primitives::byron::TxOut { - address: pallas::ledger::primitives::byron::Address { - payload: addr.payload, - crc: addr.crc, - }, - amount, - }; - - let utxo_body = MultiEraOutput::from_byron(&utxo_body).to_owned(); - delta.produced_utxo.insert(utxo_ref, utxo_body.into()); + // byron + { + let utxos = pallas::ledger::configs::byron::genesis_utxos(byron); + + for (tx, addr, amount) in utxos { + let utxo_ref = TxoRef(tx, 0); + let utxo_body = pallas::ledger::primitives::byron::TxOut { + address: pallas::ledger::primitives::byron::Address { + payload: addr.payload, + crc: addr.crc, + }, + amount, + }; + + let utxo_body = MultiEraOutput::from_byron(&utxo_body).to_owned(); + delta.produced_utxo.insert(utxo_ref, utxo_body.into()); + } + } + // shelley + { + let utxos = pallas::ledger::configs::shelley::shelley_utxos(shelley); + + for (tx, addr, amount) in utxos { + let utxo_ref = TxoRef(tx, 0); + let utxo_body = pallas::ledger::primitives::alonzo::TransactionOutput { + address: addr.to_vec().into(), + amount: pallas::ledger::primitives::alonzo::Value::Coin(amount), + datum_hash: None, + }; + + let utxo_body = MultiEraOutput::from_alonzo_compatible(&utxo_body, Era::Shelley).to_owned(); + delta.produced_utxo.insert(utxo_ref, utxo_body.into()); + } } delta diff --git a/src/sync/apply.rs b/src/sync/apply.rs index 99aa21e..31eb203 100644 --- a/src/sync/apply.rs +++ b/src/sync/apply.rs @@ -48,7 +48,7 @@ impl Stage { fn process_origin(&self) -> Result<(), WorkerError> { info!("applying origin"); - let delta = crate::ledger::compute_origin_delta(&self.genesis.byron); + let delta = crate::ledger::compute_origin_delta(&self.genesis.byron, &self.genesis.shelley); self.ledger.apply(&[delta]).or_panic()?; Ok(())