feat(plutus_mint): set language_view per Plutus version + add V2 cost model
Without language_view, pallas does not compute script_data_hash on the tx body. Plutus txs without script_data_hash get rejected with ConwayUtxowFailure (PPViewHashesDontMatch SNothing (SJust ...)). Caught 2026-05-07 attempting governor bootstrap on preprod against Agora's V2 GST policy. Previous code only set language_view when the policy was V3 — every V2 mint hit the chain rejection. Three changes: 1. crates/aldabra-core/src/plutus_cost_models.rs — append PLUTUS_V2_COST_MODEL_PREPROD constant (175 i64 entries), pulled live from preprod Koios epoch_params 2026-05-07. Same protocol- version convention as the existing V3 constant: V2 cost model is identical mainnet vs preprod (cost models are protocol-version parameters, not network), so the _PREPROD suffix is naming convention, not a separation point. 2. crates/aldabra-core/src/plutus_mint.rs — replace the V3-only language_view block with a per-PlutusVersion match. V2 wires the new constant; V3 keeps the existing params.plutus_v3_cost_model path; V1 left as TODO with a note (no V1 mint use case yet). 3. crates/aldabra-dao/examples/dump_governor.rs — small cargo example that encodes a sample GovernorDatum to CBOR hex via the existing aldabra_dao::agora::GovernorDatum::to_plutus_data path. Used during preprod DAO bringup to construct the inline datum for the governor bootstrap tx. Edit values + re-run for any DAO bringup. Builds against the existing pallas-codec dev-dependency.
This commit is contained in:
parent
616a6eefff
commit
42a0e249b6
3 changed files with 92 additions and 5 deletions
46
crates/aldabra-dao/examples/dump_governor.rs
Normal file
46
crates/aldabra-dao/examples/dump_governor.rs
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
//! Dump a sample GovernorDatum as PlutusData CBOR hex.
|
||||
//!
|
||||
//! Used during preprod DAO bringup (2026-05-07) to construct the
|
||||
//! inline datum for the governor bootstrap tx. Edit the values in
|
||||
//! `main()` to your DAO's parameters and run:
|
||||
//!
|
||||
//! ```sh
|
||||
//! cargo run --example dump_governor -p aldabra-dao --release
|
||||
//! ```
|
||||
//!
|
||||
//! Pipe the output hex into `wallet_plutus_mint_unsigned`'s
|
||||
//! `dest_inline_datum_cbor_hex` arg.
|
||||
|
||||
use aldabra_dao::agora::proposal::{ProposalThresholds, ProposalTimingConfig};
|
||||
use aldabra_dao::agora::GovernorDatum;
|
||||
use pallas_codec::minicbor;
|
||||
|
||||
fn main() {
|
||||
let g = GovernorDatum {
|
||||
proposal_thresholds: ProposalThresholds {
|
||||
execute: 50,
|
||||
create: 100,
|
||||
to_voting: 100,
|
||||
vote: 1,
|
||||
cosign: 1,
|
||||
},
|
||||
next_proposal_id: 0,
|
||||
proposal_timings: ProposalTimingConfig {
|
||||
// Short timings for preprod testing — flip these up for
|
||||
// any real DAO on mainnet (e.g. 7d/7d/48h/24h/1h/30min).
|
||||
draft_time: 60_000,
|
||||
voting_time: 60_000,
|
||||
locking_time: 30_000,
|
||||
executing_time: 30_000,
|
||||
min_stake_voting_time: 60_000,
|
||||
voting_time_range_max_width: 30_000,
|
||||
},
|
||||
create_proposal_time_range_max_width: 30_000,
|
||||
maximum_created_proposals_per_stake: 20,
|
||||
};
|
||||
let pd = g.to_plutus_data().expect("encode GovernorDatum");
|
||||
let mut buf = Vec::new();
|
||||
minicbor::encode(&pd, &mut buf).expect("encode CBOR");
|
||||
let hex: String = buf.iter().map(|b| format!("{:02x}", b)).collect();
|
||||
println!("{}", hex);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue