From 4a117b518aea5faabdedd08dece219bf7d09e871 Mon Sep 17 00:00:00 2001 From: DooseWayo <“doosewayo94@gmail.com”> Date: Sun, 30 Aug 2026 19:30:27 +0100 Subject: [PATCH] feat(governance): add proposal-based weighted-vote governance for admin roles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a new `governance` contract that closes the single-admin-key SPOF on ReceiptAnchor's merchant role: a fixed set of weighted members propose a call, vote on it over a bounded window, and once "yes" weight clears a configured quorum and outweighs "no", anyone can execute it. No change to the governed contract is needed — the host's own self-authorization rule (a contract's require_auth() on its own address auto-succeeds when it is the direct caller) carries the authority through when Governance calls into ReceiptAnchor's existing merchant-gated functions, the same mechanism already used for a MultisigAccount admin. ReceiptAnchor has no upgrade entry point, and docs/ADR-003-upgradeability.md (accepted) forbids adding one without reopening that ADR, so this wrapper gates only the admin surface that actually exists today (set_min_anchor_interval, anchor_batch, prune_batches) rather than introducing upgrade authority. Storage is kept small on purpose: each member's weight is its own persistent entry, per-voter "already voted" markers live in temporary storage so they expire with the voting window on their own, and a resolved proposal's calldata can be reclaimed immediately via prune_proposal instead of waiting on archival. Also fixes two pre-existing, unrelated build breaks discovered while wiring up governance's own tests, both required just to get `cargo build` / `cargo test` working across the workspace again: - receipt-anchor and refund-vault Cargo.toml declared their optional `budget_macros` dependency under [dev-dependencies], which Cargo disallows (optional dev-dependencies are not permitted); moved it to [dependencies], still gated by the `budget-assert` feature and only referenced from a #[cfg(test)] module, so it never links into a real build. - receipt-anchor's test_shared_vectors_cover_required_edge_cases used the bare `Vec` identifier, which resolves to soroban_sdk::Vec (imported at the top of the file) instead of std's Vec, and doesn't implement FromIterator<&str>; qualified it as std::vec::Vec explicitly. Note: contracts/refund-vault/src/lib.rs has a separate, still-unfixed issue — add_oracle (added in #262) is missing its body/closing brace and currently fails to compile at all. Left alone here since it's unrelated to this change and its intended whitelist-insertion logic isn't specified anywhere I could find. --- CHANGELOG.md | 23 + Cargo.lock | 118 +- Cargo.toml | 1 + contracts/governance/Cargo.toml | 24 + contracts/governance/src/lib.rs | 463 +++++++ contracts/governance/src/test.rs | 262 ++++ ...or_and_prune_run_through_governance.1.json | 1069 +++++++++++++++++ ..._requires_full_quorum_then_executes.1.json | 650 ++++++++++ .../test/cannot_execute_twice.1.json | 601 +++++++++ .../test/cannot_vote_twice.1.json | 446 +++++++ ...structor_rejects_mismatched_lengths.1.json | 60 + .../constructor_rejects_zero_threshold.1.json | 60 + ...structor_rejects_zero_voting_period.1.json | 60 + ...o_votes_can_outweigh_a_stale_quorum.1.json | 592 +++++++++ .../test/non_member_cannot_propose.1.json | 225 ++++ ...proposal_then_succeeds_once_expired.1.json | 279 +++++ ...ucceeds_immediately_after_execution.1.json | 506 ++++++++ ...um_below_threshold_blocks_execution.1.json | 446 +++++++ ...ecutes_and_authorizes_governed_call.1.json | 529 ++++++++ .../test/voting_closes_after_deadline.1.json | 373 ++++++ .../governance/tests/receipt_anchor_admin.rs | 201 ++++ contracts/receipt-anchor/Cargo.toml | 16 +- contracts/receipt-anchor/src/test.rs | 3 +- contracts/refund-vault/Cargo.toml | 16 +- 24 files changed, 6961 insertions(+), 62 deletions(-) create mode 100644 contracts/governance/Cargo.toml create mode 100644 contracts/governance/src/lib.rs create mode 100644 contracts/governance/src/test.rs create mode 100644 contracts/governance/test_snapshots/anchor_and_prune_run_through_governance.1.json create mode 100644 contracts/governance/test_snapshots/set_min_anchor_interval_requires_full_quorum_then_executes.1.json create mode 100644 contracts/governance/test_snapshots/test/cannot_execute_twice.1.json create mode 100644 contracts/governance/test_snapshots/test/cannot_vote_twice.1.json create mode 100644 contracts/governance/test_snapshots/test/constructor_rejects_mismatched_lengths.1.json create mode 100644 contracts/governance/test_snapshots/test/constructor_rejects_zero_threshold.1.json create mode 100644 contracts/governance/test_snapshots/test/constructor_rejects_zero_voting_period.1.json create mode 100644 contracts/governance/test_snapshots/test/no_votes_can_outweigh_a_stale_quorum.1.json create mode 100644 contracts/governance/test_snapshots/test/non_member_cannot_propose.1.json create mode 100644 contracts/governance/test_snapshots/test/prune_rejects_active_proposal_then_succeeds_once_expired.1.json create mode 100644 contracts/governance/test_snapshots/test/prune_succeeds_immediately_after_execution.1.json create mode 100644 contracts/governance/test_snapshots/test/quorum_below_threshold_blocks_execution.1.json create mode 100644 contracts/governance/test_snapshots/test/quorum_met_executes_and_authorizes_governed_call.1.json create mode 100644 contracts/governance/test_snapshots/test/voting_closes_after_deadline.1.json create mode 100644 contracts/governance/tests/receipt_anchor_admin.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index f90da93a..85cb85c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,29 @@ breaking changes bump the **minor** version, and they are called out as such. ### Added +- **`Governance` contract**: a proposal-based, weighted-vote governance wrapper + that closes the single-admin-key SPOF on `ReceiptAnchor`'s merchant role. A + fixed set of members (each with a weight, set at construction) can `propose` + a call to any target contract, `vote` on it over a bounded voting window, + and once "yes" weight clears a configured quorum (in basis points) and + strictly exceeds "no" weight, anyone can `execute` it. No change to the + governed contract is required: `initialize` `ReceiptAnchor` with a + `Governance` instance's address as `merchant`, and its existing + merchant-gated calls (`set_min_anchor_interval`, `anchor_batch`, + `prune_batches`) become reachable only through a passed proposal — the + host's own self-authorization rule (a contract's `require_auth()` on its + own address auto-succeeds when it is the direct caller) is what carries the + authority through, the same mechanism already used for a `MultisigAccount` + admin. Storage is kept intentionally small: each member's weight is its own + persistent entry, per-voter "already voted" markers live in **temporary** + storage so they expire on their own with the voting window, and a resolved + proposal's calldata can be reclaimed immediately via `prune_proposal` + rather than waiting on archival. `ReceiptAnchor` has no upgrade entry point + (see `docs/ADR-003-upgradeability.md`, which forbids adding one without + reopening that ADR), so this wrapper does not gate or introduce one — it + covers the admin surface that actually exists today. See + `contracts/governance/src/lib.rs` and + `contracts/governance/tests/receipt_anchor_admin.rs`. - **VDF-gated refunds for `RefundVault`** (issue #138): the refund policy now carries a Verifiable Delay Function requirement — `propose_policy(ledgers, diff --git a/Cargo.lock b/Cargo.lock index c83d80ce..89fb5a6d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -116,7 +116,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -129,7 +129,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -168,7 +168,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -250,6 +250,16 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "budget-macros" +version = "0.1.0" +source = "git+https://github.com/Tollcraft/soroban-budget-assert.git?branch=main#9bbd40e07e82464e03ca93d27388c1a307a193fe" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + [[package]] name = "bumpalo" version = "3.20.3" @@ -271,7 +281,7 @@ dependencies = [ "num-bigint", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -298,7 +308,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -418,7 +428,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -452,7 +462,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.118", ] [[package]] @@ -465,7 +475,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.118", ] [[package]] @@ -476,7 +486,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -487,7 +497,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -523,7 +533,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -612,7 +622,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -656,7 +666,7 @@ checksum = "42e528e2d34ba8a67a1a650b86beae8ef69fc5fdb638016f386b973226590432" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -792,6 +802,14 @@ dependencies = [ "r-efi 6.0.0", ] +[[package]] +name = "governance" +version = "0.1.0" +dependencies = [ + "receipt-anchor", + "soroban-sdk", +] + [[package]] name = "group" version = "0.13.0" @@ -1011,7 +1029,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1051,7 +1069,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1134,7 +1152,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.118", ] [[package]] @@ -1274,6 +1292,7 @@ name = "receipt-anchor" version = "0.3.0" dependencies = [ "accensa-common", + "budget-macros", "multisig-account", "proptest", "receipt-shard", @@ -1307,7 +1326,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1315,6 +1334,7 @@ name = "refund-vault" version = "0.3.0" dependencies = [ "accensa-common", + "budget-macros", "crypto-bigint", "multisig-account", "proptest", @@ -1459,7 +1479,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1505,7 +1525,7 @@ dependencies = [ "darling 0.23.0", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1566,7 +1586,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1647,14 +1667,14 @@ dependencies = [ "serde", "serde_json", "stellar-xdr", - "syn", + "syn 2.0.118", ] [[package]] name = "soroban-ledger-snapshot" -version = "27.0.4" +version = "27.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2e5349579373161730c723b18de6b7f982c5751ed45129f9500b991cb700a3" +checksum = "b59883d8bd0d1aed8d57579a9974ab88eaf787dd0a1af104f6881b5707450558" dependencies = [ "serde", "serde_json", @@ -1666,9 +1686,9 @@ dependencies = [ [[package]] name = "soroban-sdk" -version = "27.0.4" +version = "27.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1492575be91ff70955bff7deac44a97532a06cafc9f31bede0ed521771e6e1f" +checksum = "6c3f21971c84fcfb08957e3e8f5a9a70f134cb07ad9ee053ac7e6d7a887a82af" dependencies = [ "arbitrary", "bytes-lit", @@ -1690,9 +1710,9 @@ dependencies = [ [[package]] name = "soroban-sdk-macros" -version = "27.0.4" +version = "27.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25d9617d9b536a9390800c43323b0a1ec788bba624e98ffbba53379dd1c4b293" +checksum = "3bd4a847273d749807fe2eb52e2b9c1917ee482cd6a39465cad5c389548996ad" dependencies = [ "darling 0.20.11", "heck", @@ -1705,14 +1725,14 @@ dependencies = [ "soroban-spec", "soroban-spec-rust", "stellar-xdr", - "syn", + "syn 2.0.118", ] [[package]] name = "soroban-spec" -version = "27.0.4" +version = "27.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38951bbbdda988fb3c1718c146e641a7b3f652fc1e071ee55b0094d3f6184759" +checksum = "473404322827b285cbcd87517f365986bd63af7842c78b2a86ee061715fda61e" dependencies = [ "base64", "sha2", @@ -1723,9 +1743,9 @@ dependencies = [ [[package]] name = "soroban-spec-rust" -version = "27.0.4" +version = "27.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4df5d7a081968df57cd27d4f65f42fb469ffd11d3b28fb79a02fb532ab6db91" +checksum = "2f25698b6ce2125850a9ef075cf9ba1e8d25b4cfa0c46aca42dadd80cc29d881" dependencies = [ "prettyplease", "proc-macro2", @@ -1733,7 +1753,7 @@ dependencies = [ "sha2", "soroban-spec", "stellar-xdr", - "syn", + "syn 2.0.118", "thiserror", ] @@ -1750,13 +1770,6 @@ dependencies = [ "wasmparser-nostd", ] -[[package]] -name = "spike-upto-nested-approve" -version = "0.1.0" -dependencies = [ - "soroban-sdk", -] - [[package]] name = "spin" version = "0.9.8" @@ -1848,6 +1861,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -1885,7 +1909,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1965,7 +1989,7 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -2024,7 +2048,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.118", "wasm-bindgen-shared", ] @@ -2095,7 +2119,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -2106,7 +2130,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -2165,7 +2189,7 @@ checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -2185,7 +2209,7 @@ checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 2a23899b..e042ece2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ "contracts/common", + "contracts/governance", "contracts/multisig-account", "contracts/receipt-anchor", "contracts/receipt-shard", diff --git a/contracts/governance/Cargo.toml b/contracts/governance/Cargo.toml new file mode 100644 index 00000000..4b2b5d23 --- /dev/null +++ b/contracts/governance/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "governance" +version = "0.1.0" +edition.workspace = true +license.workspace = true +repository.workspace = true +description = "Weighted-vote proposal governance for Accensa contract admin roles" + +[lints] +workspace = true + +[lib] +crate-type = ["cdylib", "rlib"] + +[features] +default = [] +testutils = ["soroban-sdk/testutils"] + +[dependencies] +soroban-sdk = { workspace = true } + +[dev-dependencies] +soroban-sdk = { workspace = true, features = ["testutils"] } +receipt-anchor = { path = "../receipt-anchor" } diff --git a/contracts/governance/src/lib.rs b/contracts/governance/src/lib.rs new file mode 100644 index 00000000..862873b5 --- /dev/null +++ b/contracts/governance/src/lib.rs @@ -0,0 +1,463 @@ +//! A proposal-based, weighted-voting governance contract for Soroban admin +//! roles (issue: single-admin-key SPOF on `ReceiptAnchor`). +//! +//! Unlike [`multisig_account`](https://github.com/accensa/accensa-contracts) — +//! which aggregates signatures within one transaction via +//! `CustomAccountInterface` — this contract is a plain contract that carries +//! a proposal's approval across *multiple* transactions: a member proposes a +//! call, members cast weighted votes over a bounded voting window, and once +//! the "yes" weight clears the configured quorum (and outweighs "no"), +//! anyone may execute it. +//! +//! Execution requires **no change to the governed contract**. When +//! [`Governance::execute`] calls into a target contract that in turn does +//! `governance_address.require_auth()`, the host authorizes it automatically +//! — a contract's `require_auth()` on its own address always succeeds when +//! the direct caller of the current invocation *is* that same contract. This +//! is the same mechanism that already lets `ReceiptAnchor`'s merchant admin +//! be a contract address (see `multisig-account`); it requires nothing +//! special from `ReceiptAnchor` beyond `initialize`-ing it with this +//! contract's address as `merchant`. +//! +//! # Storage shape (kept deliberately small) +//! +//! - Each member's weight is its own persistent entry (`Member(Address)`), +//! so casting a vote or checking membership never touches a shared blob. +//! - A proposal (`Proposal(id)`) carries its calldata and running tally. +//! Its TTL is bounded to its voting window plus a small grace period — +//! proposals are inherently short-lived, unlike `ReceiptAnchor`'s +//! permanently-retained batches — and [`Governance::prune_proposal`] lets +//! anyone reclaim a resolved proposal's rent immediately rather than +//! waiting on archival. +//! - A "did this address vote" marker (`Voted(id, Address)`) lives in +//! **temporary** storage, so per-voter state never accumulates: it expires +//! with the voting window on its own, with no cleanup logic needed. + +#![no_std] + +#[cfg(test)] +mod test; + +use soroban_sdk::{ + contract, contracterror, contractevent, contractimpl, contractmeta, contracttype, Address, Env, + Symbol, Val, Vec, +}; + +contractmeta!(key = "name", val = "Governance"); +contractmeta!(key = "version", val = env!("CARGO_PKG_VERSION")); +contractmeta!( + key = "repo", + val = "https://github.com/accensa/accensa-contracts" +); + +#[contracterror] +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +pub enum Error { + /// `__constructor` received `members`/`weights` of different lengths. + ArityMismatch = 1, + /// `__constructor` received zero members, more than `MAX_MEMBERS`, a + /// duplicate member, a member with zero weight, or a weight sum that + /// overflows `u64`. + InvalidMembers = 2, + /// `threshold_bps` was `0` or greater than `10_000`. + InvalidThreshold = 3, + /// `voting_period_ledgers` was `0`. + InvalidVotingPeriod = 4, + /// The caller is not a registered member. + NotAMember = 5, + /// No proposal exists with the given id (or it has been pruned). + ProposalNotFound = 6, + /// The proposal's voting window has closed. + VotingClosed = 7, + /// The caller already voted on this proposal. + AlreadyVoted = 8, + /// The proposal was already executed. + AlreadyExecuted = 9, + /// "Yes" weight has not cleared quorum, or does not strictly exceed + /// "no" weight. + QuorumNotMet = 10, + /// `prune_proposal` was called on a proposal still inside its voting + /// window and not yet executed. + ProposalActive = 11, +} + +#[contracttype] +pub enum DataKey { + /// Instance: sum of every member's weight. + TotalWeight, + /// Instance: quorum, in basis points (`1..=10_000`) of `TotalWeight`. + ThresholdBps, + /// Instance: length of a proposal's voting window, in ledgers. + VotingPeriod, + /// Instance: number of proposals ever created; also the next id. + ProposalCount, + /// Persistent, one entry per member: that member's voting weight. + Member(Address), + /// Persistent: a proposal's calldata and running tally. + Proposal(u64), + /// Temporary: marks that `.1` already voted on proposal `.0`. + Voted(u64, Address), +} + +/// A proposed call plus its running weighted tally. +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Proposal { + pub proposer: Address, + pub target: Address, + pub function: Symbol, + pub args: Vec, + pub yes_weight: u64, + pub no_weight: u64, + pub deadline_ledger: u32, + pub executed: bool, +} + +/// Emitted when a member creates a proposal. +#[contractevent] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ProposalCreated { + #[topic] + pub proposal_id: u64, + pub proposer: Address, + pub target: Address, + pub function: Symbol, + pub deadline_ledger: u32, +} + +/// Emitted on every vote. +#[contractevent] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct VoteCast { + #[topic] + pub proposal_id: u64, + pub voter: Address, + pub support: bool, + pub weight: u64, +} + +/// Emitted once a proposal is executed. +#[contractevent] +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ProposalExecutedEvent { + #[topic] + pub proposal_id: u64, + pub target: Address, + pub function: Symbol, +} + +/// Upper bound on registered members, so `__constructor` and per-member +/// operations stay bounded-cost. A governance body for an admin role is +/// expected to be small; raise this deliberately if that changes. +const MAX_MEMBERS: u32 = 32; + +const MIN_THRESHOLD_BPS: u32 = 1; +const MAX_THRESHOLD_BPS: u32 = 10_000; + +/// Grace period (in ledgers) past a proposal's deadline before its storage +/// TTL lapses, so a same-ledger `execute` at the deadline still finds it. +const PROPOSAL_TTL_GRACE: u32 = 100; + +#[contract] +pub struct Governance; + +#[contractimpl] +impl Governance { + /// Register the initial member set. `threshold_bps` is the quorum + /// (basis points of total weight) that "yes" votes must clear for a + /// proposal to execute. `voting_period_ledgers` bounds how long every + /// proposal's voting window stays open. + /// + /// Membership is fixed at construction: there is no `add_member`. A + /// governance body for an admin role is expected to be set up once by + /// its signers, not churned; changing membership means deploying a new + /// instance and re-pointing the governed contract's admin. + pub fn __constructor( + env: Env, + members: Vec
, + weights: Vec, + threshold_bps: u32, + voting_period_ledgers: u32, + ) -> Result<(), Error> { + if members.len() != weights.len() { + return Err(Error::ArityMismatch); + } + if members.is_empty() || members.len() > MAX_MEMBERS { + return Err(Error::InvalidMembers); + } + if !(MIN_THRESHOLD_BPS..=MAX_THRESHOLD_BPS).contains(&threshold_bps) { + return Err(Error::InvalidThreshold); + } + if voting_period_ledgers == 0 { + return Err(Error::InvalidVotingPeriod); + } + + let mut total_weight: u64 = 0; + for i in 0..members.len() { + let member = members.get(i).unwrap(); + let weight = weights.get(i).unwrap(); + if weight == 0 { + return Err(Error::InvalidMembers); + } + let key = DataKey::Member(member); + if env.storage().persistent().has(&key) { + return Err(Error::InvalidMembers); + } + env.storage().persistent().set(&key, &weight); + total_weight = total_weight + .checked_add(weight) + .ok_or(Error::InvalidMembers)?; + } + + env.storage() + .instance() + .set(&DataKey::TotalWeight, &total_weight); + env.storage() + .instance() + .set(&DataKey::ThresholdBps, &threshold_bps); + env.storage() + .instance() + .set(&DataKey::VotingPeriod, &voting_period_ledgers); + env.storage().instance().set(&DataKey::ProposalCount, &0u64); + + Ok(()) + } + + /// Propose a call to `target::function(args)`. Any member may propose; + /// the voting window opens immediately and runs for + /// `voting_period_ledgers` ledgers. + pub fn propose( + env: Env, + proposer: Address, + target: Address, + function: Symbol, + args: Vec, + ) -> Result { + proposer.require_auth(); + Self::member_weight(&env, &proposer)?; + + let id: u64 = env + .storage() + .instance() + .get(&DataKey::ProposalCount) + .unwrap_or(0); + let next_id = id + 1; + env.storage() + .instance() + .set(&DataKey::ProposalCount, &next_id); + + let voting_period: u32 = env + .storage() + .instance() + .get(&DataKey::VotingPeriod) + .unwrap(); + let deadline_ledger = env.ledger().sequence() + voting_period; + + let proposal = Proposal { + proposer: proposer.clone(), + target: target.clone(), + function: function.clone(), + args, + yes_weight: 0, + no_weight: 0, + deadline_ledger, + executed: false, + }; + let key = DataKey::Proposal(next_id); + env.storage().persistent().set(&key, &proposal); + env.storage().persistent().extend_ttl( + &key, + voting_period, + voting_period + PROPOSAL_TTL_GRACE, + ); + + ProposalCreated { + proposal_id: next_id, + proposer, + target, + function, + deadline_ledger, + } + .publish(&env); + + Ok(next_id) + } + + /// Cast a weighted vote on an open proposal. Each member may vote once + /// per proposal. + pub fn vote(env: Env, voter: Address, proposal_id: u64, support: bool) -> Result<(), Error> { + voter.require_auth(); + let weight = Self::member_weight(&env, &voter)?; + + let key = DataKey::Proposal(proposal_id); + let mut proposal: Proposal = env + .storage() + .persistent() + .get(&key) + .ok_or(Error::ProposalNotFound)?; + if proposal.executed { + return Err(Error::AlreadyExecuted); + } + let now = env.ledger().sequence(); + if now > proposal.deadline_ledger { + return Err(Error::VotingClosed); + } + + let voted_key = DataKey::Voted(proposal_id, voter.clone()); + if env.storage().temporary().has(&voted_key) { + return Err(Error::AlreadyVoted); + } + let remaining_ttl = proposal.deadline_ledger.saturating_sub(now); + env.storage().temporary().set(&voted_key, &()); + env.storage() + .temporary() + .extend_ttl(&voted_key, remaining_ttl, remaining_ttl); + + if support { + proposal.yes_weight += weight; + } else { + proposal.no_weight += weight; + } + env.storage().persistent().set(&key, &proposal); + + VoteCast { + proposal_id, + voter, + support, + weight, + } + .publish(&env); + + Ok(()) + } + + /// Execute a proposal that has cleared quorum. Callable by anyone — + /// execution carries no authority beyond what the vote already granted, + /// and the governed contract's own `require_auth()` on this contract's + /// address is what actually authorizes the effect (see module docs). + pub fn execute(env: Env, proposal_id: u64) -> Result<(), Error> { + let key = DataKey::Proposal(proposal_id); + let mut proposal: Proposal = env + .storage() + .persistent() + .get(&key) + .ok_or(Error::ProposalNotFound)?; + if proposal.executed { + return Err(Error::AlreadyExecuted); + } + + let total_weight: u64 = env.storage().instance().get(&DataKey::TotalWeight).unwrap(); + let threshold_bps: u32 = env + .storage() + .instance() + .get(&DataKey::ThresholdBps) + .unwrap(); + let quorum_met = (proposal.yes_weight as u128) * (MAX_THRESHOLD_BPS as u128) + >= (total_weight as u128) * (threshold_bps as u128); + if !quorum_met || proposal.yes_weight <= proposal.no_weight { + return Err(Error::QuorumNotMet); + } + + // Effects before interaction: persist `executed = true` before the + // external call, so a reentrant `execute(proposal_id)` triggered + // from within that call is rejected rather than re-run. + proposal.executed = true; + env.storage().persistent().set(&key, &proposal); + + let _: Val = + env.invoke_contract(&proposal.target, &proposal.function, proposal.args.clone()); + + ProposalExecutedEvent { + proposal_id, + target: proposal.target, + function: proposal.function, + } + .publish(&env); + + Ok(()) + } + + /// Reclaim a resolved proposal's storage. Callable by anyone once the + /// proposal is executed, or its voting window has closed without + /// quorum — never while still active. + pub fn prune_proposal(env: Env, proposal_id: u64) -> Result<(), Error> { + let key = DataKey::Proposal(proposal_id); + let proposal: Proposal = env + .storage() + .persistent() + .get(&key) + .ok_or(Error::ProposalNotFound)?; + if !proposal.executed && env.ledger().sequence() <= proposal.deadline_ledger { + return Err(Error::ProposalActive); + } + env.storage().persistent().remove(&key); + Ok(()) + } + + /// Read-only: fetch a proposal's calldata and current tally. + pub fn get_proposal(env: Env, proposal_id: u64) -> Result { + env.storage() + .persistent() + .get(&DataKey::Proposal(proposal_id)) + .ok_or(Error::ProposalNotFound) + } + + /// Read-only: a member's weight, or `0` if not a member. + pub fn get_member_weight(env: Env, member: Address) -> u64 { + env.storage() + .persistent() + .get(&DataKey::Member(member)) + .unwrap_or(0) + } + + /// Read-only: whether `member` is registered. + pub fn is_member(env: Env, member: Address) -> bool { + env.storage().persistent().has(&DataKey::Member(member)) + } + + /// Read-only: whether `voter` has already voted on `proposal_id`. + pub fn has_voted(env: Env, proposal_id: u64, voter: Address) -> bool { + env.storage() + .temporary() + .has(&DataKey::Voted(proposal_id, voter)) + } + + /// Read-only: sum of every member's weight. + pub fn get_total_weight(env: Env) -> u64 { + env.storage() + .instance() + .get(&DataKey::TotalWeight) + .unwrap_or(0) + } + + /// Read-only: configured quorum, in basis points of total weight. + pub fn get_threshold_bps(env: Env) -> u32 { + env.storage() + .instance() + .get(&DataKey::ThresholdBps) + .unwrap_or(0) + } + + /// Read-only: configured voting window length, in ledgers. + pub fn get_voting_period(env: Env) -> u32 { + env.storage() + .instance() + .get(&DataKey::VotingPeriod) + .unwrap_or(0) + } + + /// Read-only: number of proposals ever created. + pub fn get_proposal_count(env: Env) -> u64 { + env.storage() + .instance() + .get(&DataKey::ProposalCount) + .unwrap_or(0) + } + + fn member_weight(env: &Env, member: &Address) -> Result { + env.storage() + .persistent() + .get(&DataKey::Member(member.clone())) + .ok_or(Error::NotAMember) + } +} diff --git a/contracts/governance/src/test.rs b/contracts/governance/src/test.rs new file mode 100644 index 00000000..d525f719 --- /dev/null +++ b/contracts/governance/src/test.rs @@ -0,0 +1,262 @@ +//! Unit tests for [`Governance`], including a minimal target contract that +//! proves `execute` authorizes a governed call the same way `ReceiptAnchor` +//! expects its admin to (see `tests/receipt_anchor_admin.rs` for the same +//! proof against the real contract). + +extern crate std; + +use crate::{Error, Governance, GovernanceClient}; +use soroban_sdk::{ + contract, contractimpl, symbol_short, + testutils::{Address as _, Ledger}, + Address, Env, IntoVal, Symbol, Val, Vec, +}; + +/// A trivial admin-gated contract: `set_value` requires the stored admin's +/// auth, exactly like `ReceiptAnchor::set_min_anchor_interval` requires its +/// merchant's. Used to prove `Governance::execute` can act as that admin. +#[contract] +struct Target; + +#[contractimpl] +impl Target { + pub fn init(env: Env, admin: Address) { + env.storage() + .instance() + .set(&symbol_short!("admin"), &admin); + } + + pub fn set_value(env: Env, value: u32) { + let admin: Address = env + .storage() + .instance() + .get(&symbol_short!("admin")) + .unwrap(); + admin.require_auth(); + env.storage() + .instance() + .set(&symbol_short!("value"), &value); + } + + pub fn get_value(env: Env) -> u32 { + env.storage() + .instance() + .get(&symbol_short!("value")) + .unwrap_or(0) + } +} + +struct Harness { + env: Env, + gov: GovernanceClient<'static>, + target: Address, + m1: Address, + m2: Address, + m3: Address, +} + +/// Three members weighted 1/1/2 (total 4), 6000 bps (60%) quorum, 100-ledger +/// voting window. `m3` alone (weight 2) cannot pass; `m3` + either other +/// member (weight 3) can. +fn setup() -> Harness { + let env = Env::default(); + env.mock_all_auths(); + + let m1 = Address::generate(&env); + let m2 = Address::generate(&env); + let m3 = Address::generate(&env); + + let members = Vec::from_array(&env, [m1.clone(), m2.clone(), m3.clone()]); + let weights = Vec::from_array(&env, [1u64, 1u64, 2u64]); + + let gov_id = env.register(Governance, (members, weights, 6000u32, 100u32)); + let gov = GovernanceClient::new(&env, &gov_id); + + let target_id = env.register(Target, ()); + let target_client = TargetClient::new(&env, &target_id); + target_client.init(&gov_id); + + Harness { + env, + gov, + target: target_id, + m1, + m2, + m3, + } +} + +fn set_value_call(env: &Env, target: &Address, value: u32) -> (Address, Symbol, Vec) { + ( + target.clone(), + Symbol::new(env, "set_value"), + Vec::from_array(env, [value.into_val(env)]), + ) +} + +#[test] +fn constructor_rejects_mismatched_lengths() { + let env = Env::default(); + let m1 = Address::generate(&env); + let members = Vec::from_array(&env, [m1]); + let weights = Vec::from_array(&env, [1u64, 2u64]); + let res = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + env.register(Governance, (members, weights, 5000u32, 10u32)) + })); + assert!( + res.is_err(), + "mismatched members/weights must reject construction" + ); +} + +#[test] +fn constructor_rejects_zero_threshold() { + let env = Env::default(); + let m1 = Address::generate(&env); + let members = Vec::from_array(&env, [m1]); + let weights = Vec::from_array(&env, [1u64]); + let res = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + env.register(Governance, (members, weights, 0u32, 10u32)) + })); + assert!(res.is_err(), "a zero threshold must reject construction"); +} + +#[test] +fn constructor_rejects_zero_voting_period() { + let env = Env::default(); + let m1 = Address::generate(&env); + let members = Vec::from_array(&env, [m1]); + let weights = Vec::from_array(&env, [1u64]); + let res = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + env.register(Governance, (members, weights, 5000u32, 0u32)) + })); + assert!( + res.is_err(), + "a zero voting period must reject construction" + ); +} + +#[test] +fn non_member_cannot_propose() { + let h = setup(); + let outsider = Address::generate(&h.env); + let (target, function, args) = set_value_call(&h.env, &h.target, 7); + let res = h.gov.try_propose(&outsider, &target, &function, &args); + assert_eq!(res, Err(Ok(Error::NotAMember))); +} + +#[test] +fn quorum_below_threshold_blocks_execution() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 7); + let id = h.gov.propose(&h.m3, &target, &function, &args); + + // Only m3 (weight 2 of 4 = 50%) votes yes; quorum is 60%. + h.gov.vote(&h.m3, &id, &true); + + let res = h.gov.try_execute(&id); + assert_eq!(res, Err(Ok(Error::QuorumNotMet))); +} + +#[test] +fn quorum_met_executes_and_authorizes_governed_call() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 42); + let id = h.gov.propose(&h.m3, &target, &function, &args); + + // m3 (weight 2) + m1 (weight 1) = 3 of 4 = 75% >= 60% quorum. + h.gov.vote(&h.m3, &id, &true); + h.gov.vote(&h.m1, &id, &true); + + h.gov.execute(&id); + + let target_client = TargetClient::new(&h.env, &h.target); + assert_eq!(target_client.get_value(), 42, "the governed call must run"); + + let proposal = h.gov.get_proposal(&id); + assert!(proposal.executed); +} + +#[test] +fn cannot_execute_twice() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 1); + let id = h.gov.propose(&h.m1, &target, &function, &args); + h.gov.vote(&h.m1, &id, &true); + h.gov.vote(&h.m2, &id, &true); + h.gov.vote(&h.m3, &id, &true); + + h.gov.execute(&id); + let res = h.gov.try_execute(&id); + assert_eq!(res, Err(Ok(Error::AlreadyExecuted))); +} + +#[test] +fn cannot_vote_twice() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 1); + let id = h.gov.propose(&h.m1, &target, &function, &args); + h.gov.vote(&h.m1, &id, &true); + + let res = h.gov.try_vote(&h.m1, &id, &true); + assert_eq!(res, Err(Ok(Error::AlreadyVoted))); +} + +#[test] +fn no_votes_can_outweigh_a_stale_quorum() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 1); + let id = h.gov.propose(&h.m1, &target, &function, &args); + + // m3 (weight 2) votes yes, then m1 + m2 (weight 2) vote no: yes == no, + // so even though yes alone would clear 50% quorum it must not execute. + h.gov.vote(&h.m3, &id, &true); + h.gov.vote(&h.m1, &id, &false); + h.gov.vote(&h.m2, &id, &false); + + let res = h.gov.try_execute(&id); + assert_eq!(res, Err(Ok(Error::QuorumNotMet))); +} + +#[test] +fn voting_closes_after_deadline() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 1); + let id = h.gov.propose(&h.m1, &target, &function, &args); + + h.env.ledger().with_mut(|l| l.sequence_number += 101); + + let res = h.gov.try_vote(&h.m1, &id, &true); + assert_eq!(res, Err(Ok(Error::VotingClosed))); +} + +#[test] +fn prune_rejects_active_proposal_then_succeeds_once_expired() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 1); + let id = h.gov.propose(&h.m1, &target, &function, &args); + + let res = h.gov.try_prune_proposal(&id); + assert_eq!(res, Err(Ok(Error::ProposalActive))); + + h.env.ledger().with_mut(|l| l.sequence_number += 101); + h.gov.prune_proposal(&id); + + let res = h.gov.try_get_proposal(&id); + assert_eq!(res, Err(Ok(Error::ProposalNotFound))); +} + +#[test] +fn prune_succeeds_immediately_after_execution() { + let h = setup(); + let (target, function, args) = set_value_call(&h.env, &h.target, 1); + let id = h.gov.propose(&h.m1, &target, &function, &args); + h.gov.vote(&h.m1, &id, &true); + h.gov.vote(&h.m2, &id, &true); + h.gov.vote(&h.m3, &id, &true); + h.gov.execute(&id); + + h.gov.prune_proposal(&id); + let res = h.gov.try_get_proposal(&id); + assert_eq!(res, Err(Ok(Error::ProposalNotFound))); +} diff --git a/contracts/governance/test_snapshots/anchor_and_prune_run_through_governance.1.json b/contracts/governance/test_snapshots/anchor_and_prune_run_through_governance.1.json new file mode 100644 index 00000000..d9a142b8 --- /dev/null +++ b/contracts/governance/test_snapshots/anchor_and_prune_run_through_governance.1.json @@ -0,0 +1,1069 @@ +{ + "generators": { + "address": 4, + "nonce": 6, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "symbol": "anchor_batch" + }, + { + "vec": [ + { + "bytes": "0909090909090909090909090909090909090909090909090909090909090909" + }, + { + "u32": 10 + }, + { + "u64": "100" + }, + { + "u64": "200" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "symbol": "prune_batches" + }, + { + "vec": [ + { + "u32": 1000000 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "2" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": "2" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "1" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "2" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "5" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "3" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "4" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "6" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "bytes": "0909090909090909090909090909090909090909090909090909090909090909" + }, + { + "u32": 10 + }, + { + "u64": "100" + }, + { + "u64": "200" + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 1000 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "anchor_batch" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "2" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "2" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 1000000 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 1000 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "prune_batches" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "2" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 1000 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 1000 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "2" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 1000 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "2" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 1000 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 1000 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "BatchCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "LastAnchorTime" + } + ] + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MinAnchorInterval" + } + ] + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "vec": [ + { + "symbol": "PrunedUpTo" + } + ] + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "vec": [ + { + "symbol": "RootBuffer" + } + ] + }, + "val": { + "vec": [ + { + "bytes": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Shard" + }, + { + "u64": "0" + } + ] + }, + "val": { + "address": "CA36FQITV33RO5SJFPTNLRQBD6ZNAEJG7F7J5KWCV4OP7SQHDMIZCT33" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ShardCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ShardWasmHash" + } + ] + }, + "val": { + "bytes": "5295f31bb28b192210b0ec8477d8e74d4982acacd844670bf5bbe0fc4aebf902" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CA36FQITV33RO5SJFPTNLRQBD6ZNAEJG7F7J5KWCV4OP7SQHDMIZCT33", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "5295f31bb28b192210b0ec8477d8e74d4982acacd844670bf5bbe0fc4aebf902" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "EndBatchId" + } + ] + }, + "val": { + "u64": "201" + } + }, + { + "key": { + "vec": [ + { + "symbol": "PrunedUpTo" + } + ] + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Router" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "StartBatchId" + } + ] + }, + "val": { + "u64": "1" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": { + "v1": { + "ext": "v0", + "cost_inputs": { + "ext": "v0", + "n_instructions": 8781, + "n_functions": 150, + "n_globals": 2, + "n_table_entries": 5, + "n_types": 37, + "n_data_segments": 1, + "n_elem_segments": 1, + "n_imports": 18, + "n_exports": 10, + "n_data_segment_bytes": 2009 + } + } + }, + "hash": "5295f31bb28b192210b0ec8477d8e74d4982acacd844670bf5bbe0fc4aebf902", + "code": "0061736d0100000001fb012560027f7f017f60037f7f7f017f60027e7e017e60047e7e7e7e017e60037e7e7e017e60017e017e6000017e60047f7f7f7f0060057f7f7e7f7f0060037f7f7f0060027f7f017e60047f7f7f7e0060017f0060027f7f0060027f7e0060037e7e7f017e60027e7f017e60057e7e7e7e7e017e60057e7e7f7e7e0060037e7e7e0060037e7e7e017f60017e017f60057f7f7f7f7f0060017f017f60017f017e60037f7e7e017e60037f7e7e017f60000060037f7f7f017e60057f7e7e7f7f0060057f7f7f7f7f017e60067f7e7f7f7f7f017e60027f7e017e60047f7e7e7e017e60057f7e7e7e7e017e60067f7f7f7f7f7f017f60057f7f7f7f7f017f026d12017601670002016201310003016d01390004016d016100030162016a00020169013000050169015f0005016101300005016c01320002016c01310002016c01300002016c015f0004017801330006016c01370003016c0138000201760131000201760133000501620138000503980196010708090a0900090b090909090b090b0a0a0c0c0d050e0a060c0f06061011120413040b04140a05150a0e0d0c16170a0a0a091809090900041105050606040409170716160c0c1717090c1809191a0e0909090909090909091b0909091c1d1e1f2019212219200a1c1d1e1f1c20202019191921182219192020090d18150515060e090900072300240101000c16000c0c0c09010101010405017001050505030100110611027f01418080c0000b7f0041908dc0000b0786010a066d656d6f727902000d5f5f636f6e7374727563746f7200490c616e63686f725f6261746368004a10657874656e645f62617463685f74746c004b096765745f6261746368004c096765745f72616e6765004d0a6765745f726f75746572004e0d7072756e655f62617463686573004f0e7665726966795f726563656970740050015f0301090d010041010b04489c019f0195010ac0a20196011200200020014201200220031093808080000b270020002000200110958080800020022003108d818080002004108d8180800010f5808080001a0ba70102017f017e23808080800041306b22032480808080000240024002402001200120021095808080002204420110df808080000d00200042003703000c010b200320012004420110de80808000370300200341086a2001200310968080800020032903084201510d0120002003290328370320200020032903203703182000200329031837031020002003290310370308200042013703000b200341306a2480808080000f0b000be60302017f017e23808080800041306b22022480808080000240024002400240024002400240024020012802000e050001020304000b200241206a200041b08ac0800010e68080800020022802200d05200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000c040b200241206a200041c48ac0800010e68080800020022802200d04200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000c030b200241206a200041d88ac0800010e68080800020022802200d03200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000c020b200241206a200041e88ac0800010e68080800020022802200d0220022002290328370318200241186a10dc808080002103200241206a2000200141086a10c68080800020022802200d022002200229032837031020022003370308200241206a200241086a200010e8808080000c010b200241206a200041fc8ac0800010e68080800020022802200d01200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000b200229032821032002290320500d010b000b200241306a24808080800020030bb30202027f057e23808080800041c0006b2203248080808000410021040240034020044128460d01200341086a20046a4202370300200441086a21040c000b0b4201210502402002290300220642ff018342cc00520d002001200641e48bc080004105200341086a410510f1808080001a2003290308220642ff01834204520d002003290310220742ff01834204520d00200341306a2001200341186a109c8080800020032802300d0020032903382108200341306a2001200341206a109c8080800020032802300d0020032903382109200341306a200341286a200110e58080800020032802300d002003290338210520002006422088a736022420002007422088a7360220200020083703182000200937031020002005370308420021050b20002005370300200341c0006a2480808080000b1600200020002001109580808000420110df808080000b100020002001200242011099808080000b21002000200020011095808080002000200210a180808000200310f4808080001a0b900102017f017e23808080800041206b22032480808080000240024002402001200120021095808080002204420210df808080000d00200042003703000c010b200320012004420210de80808000370308200341106a2001200341086a10ed8080800020032903104201510d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b900102017f017e23808080800041206b22032480808080000240024002402001200120021095808080002204420210df808080000d00200042003703000c010b200320012004420210de80808000370308200341106a2001200341086a109c8080800020032903104201510d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b6401027e02400240024020022903002203a741ff0171220241c000460d0020024106470d01420021042003108f8180800021030c020b420021042001200310f28080800021030c010b4201210410918180800021030b20002004370300200020033703080b10002000200120024202109e808080000b21002000200020011095808080002002200010f880808000200310f4808080001a0b1000200020012002420210a0808080000b21002000200020011095808080002000200210a280808000200310f4808080001a0b4502017f017e23808080800041106b220224808080800020022000200110c380808000024020022903004201520d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c680808000024020022903004201520d00000b20022903082103200241106a24808080800020030b5401027f23808080800041d0006b22012480808080004100210203402001410c6a20026a41003a0000200241016a220241c000470d000b20002001410c6a41c00010a6818080001a200141d0006a2480808080000b5701027f23808080800041306b21014100210203402001410c6a20026a41003a0000200241016a22024120470d000b200020012902243700182000200129021c370010200020012902143700082000200129020c3700000b140020002802002802002001410110d1808080000b7001017f23808080800041c0006b220124808080800020012000370308200141106a2001413f6a200141086a109c80808000024020012903104201520d00000b200141106a200129031810a7808080002001413f6a200141106a10a8808080002100200141c0006a24808080800020000b9e0101027f23808080800041c0006b22022480808080002002413f6a10d780808000200242033703282002200137033020022002413f6a200241286a1094808080000240024020022903004201520d0020002002290320370320200020022903183703182000200229031037031020002002290308370308410021030c010b200041e4003b0102410121030b200020033b0100200241c0006a2480808080000b6802017f017e23808080800041106b22022480808080000240024020012f01000d0020022000200141086a10c380808000024020022802000d00200229030821030c020b1091818080001a000b200141026a10c48080800021030b200241106a24808080800020030b4602017f017e23808080800041206b2200248080808000200041086a10aa80808000200029030820002903102000411f6a10ab808080002101200041206a24808080800020010bad0102017f017e23808080800041206b22012480808080002001411f6a10d780808000200141086a2001411f6a41d888c08000109b80808000024002402001280208450d00200129031021022001411f6a10d780808000200141086a2001411f6a41f888c08000109b808080002001280208450d012000200129031037030820002002370300200141206a2480808080000f0b41888ac08000109d81808000000b41988ac08000109d81808000000b3c01017f23808080800041106b220324808080800020032001370308200320003703002002200310c2808080002101200341106a24808080800020010b3702017f017e23808080800041106b220024808080800010ad808080002000410f6a10ae808080002101200041106a24808080800020010b6302017f017e23808080800041206b22002480808080002000411f6a10d780808000200041086a2000411f6a41a888c08000109a80808000024020002802080d0041b888c08000109d81808000000b20002903102101200041206a24808080800020010b3801017f23808080800041106b220224808080800020022000370308200241086a200110f8808080002100200241106a24808080800020000bf80101017f23808080800041c0006b220524808080800020052001370310200520003703082005200337031820052004370320200541286a2005413f6a200541086a109c80808000024020052903284201510d0020052903302101200541286a2005413f6a200541106a10e28080800020052903284201510d00200242ff01834204520d0020052903302100200541286a2005413f6a200541186a109c8080800020052903284201510d0020052903302103200541286a2005413f6a200541206a109c8080800020052903284201510d00200120002002422088a72003200529033010b080808000200541c0006a24808080800042020f0b000bcc0303017f017e017f23808080800041d0006b2205248080808000200541cf006a10d780808000200541086a200541cf006a41a888c08000109a8080800002400240024002402005280208450d0020052005290310370300200510db80808000200541cf006a10d780808000200541086a200541cf006a41d888c08000109b808080002005280208450d0120052903102106200541cf006a10d780808000200541086a200541cf006a41f888c08000109b808080002005280208450d0220002006540d03200020052903105a0d03200541cf006a10d88080800021072005200236022020052001370308200520073602242005200437031820052003370310200541cf006a10d7808080002005420337032820052000370330200541cf006a200541286a200541086a109880808000200541cf006a10d780808000200541cf006a41e4004180d21f10da80808000200541cf006a10d7808080002005200037034020054203370338200541cf006a200541386a41e4004180d21f109280808000200541d0006a2480808080000f0b41c888c08000109d81808000000b41e888c08000109d81808000000b418889c08000109d81808000000b419889c08000413741b489c08000109481808000000bb30101017f23808080800041306b2203248080808000200320013703082003200037030020032002370310200341186a2003412f6a200310ed80808000024020032903184201510d0020032903202101200341186a2003412f6a200341086a109c8080800020032903184201510d0020032903202100200341186a2003412f6a200341106a109c8080800020032903184201510d0020012000200329032010b280808000200341306a24808080800042020f0b000bd30101017f23808080800041206b22032480808080002003200137030820032000370300200320023703102003411f6a10d7808080002003411f6a41a888c080002003109d808080002003411f6a10d7808080002003411f6a41d888c08000200341086a109f808080002003411f6a10d7808080002003411f6a41f888c08000200341106a109f808080002003411f6a10d7808080002003411f6a41c889c08000200341086a109f808080002003411f6a10d7808080002003411f6a41e4004180d21f10da80808000200341206a2480808080000b930101017f23808080800041206b2203248080808000200320023703000240200042ff01834204520d00200142ff01834204520d00200341086a2003411f6a2003109c8080800020032903084201510d00200341086a2000422088a72001422088a7200329031010b480808000200329030820032903102003411f6a10ab808080002100200341206a24808080800020000f0b000b950402017f047e23808080800041e0006b2204248080808000200441df006a10d780808000200441106a200441df006a41a888c08000109a8080800002400240024002402004280210450d0020042004290318370300200410db80808000200441df006a10d780808000200441106a200441df006a41f888c08000109b808080002004280210450d0120042903182105200441df006a10d780808000200441106a200441df006a41c889c08000109b808080002004280210450d022005200320052003541b21062004200429031822073703082002ad2108420021030340200720037c220520065a0d04200320085a0d04200441df006a10d7808080002004420337033820042005370340200441106a200441df006a200441386a109480808000024020042903104201520d00200428023420014f0d05200441df006a10d7808080002004420337034820042005370350200441df006a200441df006a200441c8006a109580808000420110f3808080001a0b2004200542017c370308200342017c21030c000b0b41d889c08000109d81808000000b41e889c08000109d81808000000b41f889c08000109d81808000000b02402003500d00200441df006a10d780808000200441df006a41c889c08000200441086a109f80808000200441df006a10d780808000200441df006a41e4004180d21f10da808080000b2000200337030820002005370300200441e0006a2480808080000ba20101017f23808080800041306b22032480808080002003200137031020032000370308200341186a2003412f6a200341086a109c80808000024020032903184201510d0020032903202101200341186a2003412f6a200341106a10e28080800020032903184201510d00200242ff018342cb00520d0020012003290320200210b6808080002003412f6a10b7808080002102200341306a24808080800020020f0b000bc30f010b7f23808080800041e0046b2203248080808000200320023703202003200137031802400240024002400240200341206a41086a200210f780808000108e81808000410a4d0d00418180a4062104410021050c010b200341d0026a200010a780808000024020032f01d0024101470d0020032f01d20222044108742105200441107441017221040c010b200320032903f00222013702fc01200320032903d802370328200320032903e002370330200320032903e80237033820032001370340200342003703e802200342003703e002200342003703d802200342003703d002200341186a10d980808000200341186a10dc808080004204200341d0026a412010ef80808000200320032903e802370360200320032903e002370358200320032903d802370350200320032903d002370348200341e8006a200210bb80808000200341e4036a41206a210620034198046a41386a2107200341b0036a2108200341d0026a41286a2109200341e0016a41286a210a200341a0016a41206a210b02400340200341d0026a200341e8006a10bc808080000240024020032903d00222024202560d002002a70e03010003010b41bc87c08000412b200341df046a41ac87c0800041f08cc08000109e81808000000b200320032903d802370378200342003703e802200342003703e002200342003703d802200342003703d002200341f8006a10d980808000200341f8006a10dc808080004204200341d0026a412010ef80808000200320032903e80237039801200320032903e00237039001200320032903d80237038801200320032903d00237038001200341a0016a410041c00010a7818080001a02400240200341c8006a20034180016a412010a4818080004101480d00200341a0016a412020034180016a412041e887c0800010d580808000200b4120200341c8006a412041f887c0800010d5808080000c010b200341a0016a4120200341c8006a4120418888c0800010d580808000200b412020034180016a4120419888c0800010d5808080000b200a10bd80808000420021022003420037038002200341002903d88cc080003703f801200341002903d08cc080003703f001200341002903c88cc080003703e801200341002903c08cc080003703e00141c0002104200341d0026a200341a0016a41c00010a6818080001a0240024020032d00c80222050d00200341d0026a220c21050c010b200341106a2005200a41c00041cc86c0800010be8080800020032802102003280214200341d0026a41c00020056b220441dc86c0800010d5808080002003290380022202427f510d04200341d0026a20046a210c20052104200a21050b2003200242017c37038002200341e0016a2005410110d180808000200a2004413f712205200c200441c000716a200541ec86c0800010d580808000200320053a00c802200341d0026a200341e0016a41f00010a6818080001a200341c4036a10a480808000200341e4036a10a48080800020032903f00221022003200341d0026a36028404200242ffffffffffffffff03560d04200242ffffffffffffff3f560d05200320032d00b803220cad2201423b862002420986220020014203868422014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200242018642808080f80f832002420f88428080fc0783842002421f884280fe03832000423888848484370388042009200c6a4180013a0000200320034184046a36029404200341086a200c41016a200941c00041fc86c0800010be80808000200328020c210420032802082105024003402004450d01200541003a00002004417f6a2104200541016a21050c000b0b02400240200c4138714138460d002008410820034188046a4108418c87c0800010d58080800020034194046a200910a5808080000c010b20034194046a200910a58080800020034198046a10a3808080002007410820034188046a4108419c87c0800010d58080800020034194046a20034198046a10a5808080000b41002104200341003a00b803200342a0808080c0003702a4042003410036029c0420032006360298042003200341e4036a3602a004200328028404210d20034198046a10bf808080002205410820054108491b410274210c02400340200c2004460d012003200d20046a280200220541ff81fc0771410878200541187841ff81fc07717236029804200341e4036a20046a410420034198046a410441ac8cc0800010d580808000200441046a21040c000b0b200341c4036a4120200341e4036a412041e08cc0800010d580808000200320032900c403370348200320032900cc03370350200320032900d403370358200320032900dc033703600c000b0b2003200329034837039804200320032903503703a004200320032903583703a804200320032903603703b004200342003703e802200342003703e002200342003703d802200342003703d002200341286a10d980808000200341286a10dc808080004204200341d0026a412010ef80808000200320032903e8023703f801200320032903e0023703f001200320032903d8023703e801200320032903d0023703e00120034198046a200341e0016a412010a481808000452105410021040b200341e0046a2480808080002004200541087441800271720f0b41848bc0800010a181808000000b418c8cc0800010a281808000000b419c8cc0800010a281808000000b3a02017f017e23808080800041106b22022480808080002002200036020c20012002410c6a10c0808080002103200241106a24808080800020030b6601017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109c80808000024020012903084201520d00000b200129031010b98080800041ffff03712001411f6a10ba808080002100200141206a24808080800020000b8a0101027f23808080800041306b22012480808080002001412f6a10d780808000200142033703082001200037031041e400210202402001412f6a200141086a109780808000450d002001412f6a10d78080800020012000370320200142033703182001412f6a200141186a41e4004180d21f109280808000410021020b200141306a24808080800020020b3a02017f017e23808080800041106b2202248080808000200220003b010e20022002410e6a10c1808080002103200241106a24808080800020030b4d01017f23808080800041106b2202248080808000200220013703082000200241106a200110f780808000108e8180800036020c2000410036020820002001370300200241106a2480808080000b8d0103017f017e027f23808080800041206b220224808080800042022103024020012802082204200128020c4f0d002002200141086a220520012903002004108d8180800010f680808000370318200241086a2005200241186a10e28080800020022903082103200020022903103703082001200441016a3602080b20002003370300200241206a2480808080000b1100200010a380808000200041003a00400b3000024020032001490d002000200320016b3602042000200220016a3602000f0b2001200320032004109681808000000b2501017f0240200028021022010d0041948bc0800010a081808000000b200028020c20016e0b6802017f017e23808080800041106b22022480808080000240024020012d00000d0020022000200141016a10eb80808000024020022802000d00200229030821030c020b1091818080001a000b200141026a10c48080800021030b200241106a24808080800020030b1700024020012f01000d0042020f0b200110c4808080000b4502017f017e23808080800041106b220224808080800020022000200110c780808000024020022903004201520d00000b20022903082103200241106a24808080800020030b8c0202017f057e23808080800041306b2203248080808000200341086a20012002411c6a10ec8080800042012104024020032802080d0020032903102105200341086a2001200241186a10ec8080800020032802080d0020032903102106200341086a2001200241106a10c68080800020032802080d0020032903102107200341086a2001200241086a10c68080800020032802080d0020032903102108200341086a2002200110e38080800020032802080d0020032003290310370328200320083703202003200737031820032006370310200320053703082000200141e48bc080004105200341086a410510f080808000370308420021040b20002004370300200341306a2480808080000bd40301017e428380808010210102400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002f01002200417f6a0e1723020304050607080901010a0b0c0d0e0f101112131415000b0240200041d47d6a0e051e1f202122000b02402000419c7f6a0e0416171819000b200041b87e6a0e04191a1b1c190b000b4283808080200f0b4283808080300f0b4283808080c0000f0b4283808080d0000f0b4283808080e0000f0b4283808080f0000f0b428380808080010f0b428380808090010f0b4283808080c0010f0b4283808080d0010f0b4283808080e0010f0b4283808080f0010f0b428380808080020f0b428380808090020f0b4283808080a0020f0b4283808080b0020f0b4283808080c0020f0b4283808080d0020f0b4283808080e0020f0b4283808080f0020f0b4283808080c00c0f0b4283808080d00c0f0b4283808080e00c0f0b4283808080f00c0f0b428380808080190f0b428380808090190f0b4283808080a0190f0b4283808080b0190f0b4283808080c0250f0b4283808080d0250f0b4283808080e0250f0b4283808080f0250f0b4283808080802621010b20010b7302017f027e23808080800041106b220324808080800020032002200110e4808080000240024020032802000d00200320032903083703004200210420012003410110ee8080800021050c010b4201210410918180800021050b2000200437030020002005370308200341106a2480808080000b4602017f017e23808080800041106b220324808080800020032001200210e180808000200329030821042000200329030037030020002004370308200341106a2480808080000b980102017f037e23808080800041106b220324808080800020032001200210c6808080002003290308210442012105024020032802000d0020032001200241086a10c6808080002003290308210602402003280200450d00200621040c010b20032006370308200320043703004200210520012003410210ee8080800021040b2000200537030020002004370308200341106a2480808080000b1200200141a48bc08000410f109b818080000b140010ea8080800020002001200210b1808080000b180010ea808080002000200120022003200410af808080000b100010ea80808000200010b8808080000b100010ea80808000200010a6808080000b0e0010ea8080800010a9808080000b0e0010ea8080800010ac808080000b140010ea8080800020002001200210b3808080000b140010ea8080800020002001200210b5808080000b922402197f027e23808080800041e0016b22032480808080002003410c6a410041c00010a7818080001a200120024106746a2104200028021c2105200028021821062000280214210720002802102108200028020c21092000280208210a2000280204210b2000280200210c0240034020012004460d0120034280808080c0003702582003200136024c200341c0003602502003200141c0006a220d360254200341cc006a10d2808080002202411020024110491b410274210e4100210202400340200e2002460d012003410c6a20026a200120026a280000220f41ff81fc0771410878200f41187841ff81fc077172360200200241046a21020c000b0b2003200328020c22103602cc012003200328021022113602c8012003200328021422123602c4012003200328021822133602c0012003200b3602642003200736026c2003200c360260200320083602682003200a36027020032009360274200320063602782003200536027c200328022821022003280224210f200328022021012003200328021c221436028c0120032001360288012003200f3602840120032002360280012003280238210e20032802342115200328023021162003200328022c221736029c01200320163602980120032015360294012003200e3602900120032802482118200328024421192003280240211a2003200328023c221b3602ac012003201a3602a801200320193602a401200320183602a001200320104198dfa894046a221036025820032011419189dd89076a22113602542003201241cff783ae7b6a22123602502003201341a5b7d7cd7e6a221336024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d801370378200320123602dc01200320133602d801200320103602d401200320113602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c3703602003201441db84dbca036a22103602582003200141f1a3c4cf056a22013602542003200f41a485fe91796a220f3602502003200241d5bdf1d87a6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d801200320103602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200320174198d59ec07d6a2202360258200320164181b68d94016a220f3602542003201541be8bc6a1026a22013602502003200e41c3fbb1a8056a220e36024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d801370378200320013602dc012003200e3602d801200320023602d4012003200f3602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c3703602003201b41f4baf995076a22023602582003201a41fee3fa86786a220f3602542003201941a78df0de796a22013602502003201841f4e2ef8c7c6a220e36024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d801370378200320013602dc012003200e3602d801200320023602d4012003200f3602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341b0016a200341c0016a20034180016a20034190016a200341a0016a10d48080800020032802b001210220032802b401210f20032802b8012101200320032802bc0141c1d3eda47e6a220e3602582003200141868ff9fd7e6a22013602542003200f41c6bb86fe006a220f3602502003200241ccc3b2a0026a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341c0016a20034180016a20034190016a200341a0016a200341b0016a10d48080800020032802c001210220032802c401210f20032802c8012101200320032802cc0141efd8a4ef026a220e3602582003200141aa89d2d3046a22013602542003200f41dcd3c2e5056a220f3602502003200241da91e6b7076a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034180016a20034190016a200341a0016a200341b0016a200341c0016a10d4808080002003280280012102200328028401210f20032802880121012003200328028c0141d2a2f9c1796a220e3602582003200141ed8cc7c17a6a22013602542003200f41c8cf8c807b6a220f3602502003200241c7ffe5fa7b6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034190016a200341a0016a200341b0016a200341c0016a20034180016a10d4808080002003280290012102200328029401210f20032802980121012003200328029c0141f39780b77c6a220e3602582003200141c7a29ead7d6a22013602542003200f41d1c6a9366a220f3602502003200241e7d2a4a1016a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341a0016a200341b0016a200341c0016a20034180016a20034190016a10d48080800020032802a001210220032802a401210f20032802a8012101200320032802ac01418595dcbd026a220e3602582003200141b8c2ecf0026a22013602542003200f41fcdbb1e9046a220f3602502003200241939ae099056a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341b0016a200341c0016a20034180016a20034190016a200341a0016a10d48080800020032802b001210220032802b401210f20032802b8012101200320032802bc0141d4e6a9a8066a220e3602582003200141bb95a8b3076a22013602542003200f41ae928b8e786a220f360250200320024185d9c893796a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341c0016a20034180016a20034190016a200341a0016a200341b0016a10d48080800020032802c001210220032802c401210f20032802c8012101200320032802cc0141a1d1ff957a6a220e3602582003200141cbcce9c07a6a22013602542003200f41f096ae927c6a220f3602502003200241a3a3b1bb7c6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034180016a20034190016a200341a0016a200341b0016a200341c0016a10d4808080002003280280012102200328028401210f20032802880121012003200328028c014199d0cb8c7d6a220e3602582003200141a48ce4b47d6a22013602542003200f4185ebb8a07f6a220f3602502003200241f0c0aa83016a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034190016a200341a0016a200341b0016a200341c0016a20034180016a10d4808080002003280290012102200328029401210f20032802980121012003200328029c0141968293cd016a220e360258200320014188d8ddf1016a22013602542003200f41cceea1ba026a220f3602502003200241b5f9c2a5036a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341a0016a200341b0016a200341c0016a20034180016a20034190016a10d48080800020032802a001210220032802a401210f20032802a8012101200320032802ac0141b399f0c8036a220e3602582003200141cad4e2f6046a22013602542003200f41cf94f3dc056a220f3602502003200241f3dfb9c1066a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341b0016a200341c0016a20034180016a20034190016a200341a0016a10d48080800020032802b001210220032802b401210f20032802b8012101200320032802bc0141ee85bea4076a220e3602582003200141efc695c5076a22013602542003200f4194f0a1a6786a220f360250200320024188849ce6786a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341c0016a20034180016a20034190016a200341a0016a200341b0016a10d48080800020032802c001210220032802c401210f20032802c8012101200320032802cc0141fafffb85796a220e3602582003200141ebd9c1a27a6a22013602542003200f41f7c7e6f77b6a220f3602502003200241f2f1c5b37c6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d38080800020032003290254221c3703682003200329024c221d370360200328027c20056a2105200328027820066a2106200328027420096a21092003280270200a6a210a201ca720086a2108201da7200c6a210c200328026c20076a21072003280264200b6a210b200d21010c000b0b2000200536021c2000200636021820002007360214200020083602102000200936020c2000200a3602082000200b3602042000200c360200200341e0016a2480808080000b2501017f0240200028021022010d0041808dc0800010a081808000000b200028020420016e0bdc0101077f200020022802082204411a77200441157773200441077773200328020c6a200128020c6a20012802082205200228020c2206732004712005736a220720012802046a220836020c2000200128020022092002280204220a7320022802002202712009200a71732002411e772002411377732002410a77736a20076a220136020420002009200520032802086a20062008200620047371736a2008411a772008411577732008410777736a22046a36020820002001411e772001411377732001410a77732001200a20027371200a200271736a20046a3602000bed0101037f2000200128020822054119772005410e7773200541037673200128020c6a20032802086a20042802042206410f772006410d77732006410a76736a220636020c20002005200128020422074119772007410e77732007410376736a20032802046a20042802002205410f772005410d77732005410a76736a220536020820002007200128020022014119772001410e77732001410376736a20032802006a2006410f772006410d77732006410a76736a36020420002001200428020c6a200228020c22014119772001410e77732001410376736a2005410f772005410d77732005410a76736a3602000b2600024020012003460d0020012003200410a381808000000b20002002200110a6818080001a0b0300000b02000b10002000108581808000108e818080000b0700200041086a0b1b0020002001108d818080002002108d818080001087818080001a0b1300200041086a20002903001080818080001a0b070020002903000b3901017f23808080800041106b22032480808080002003200229020037020820002001200341086a10e980808000200341106a2480808080000b0e002000200120021082818080000b14002000200120021083818080001090818080000b5a02017f017e23808080800041106b220224808080800020022001370308420121030240200241106a2001108a81808000108e818080004120470d0020002001370308420021030b20002003370300200241106a2480808080000b6102017f017e23808080800041106b22032480808080002003200229030022041092818080000240024020032802000d00200329030821040c010b2001200410ff8080800021040b2000420037030020002004370308200341106a2480808080000b2a01017e02402002290300220342ff018342c800510d00200042013703000f0b2000200310e0808080000b130020004200370300200020012903003703080b130020004200370300200020012903003703080b0e0020002001200110e2808080000b5102017f017e23808080800041106b220324808080800020032001200210dd8080800042012104024020032802000d0020002003290308370308420021040b20002004370300200341106a2480808080000b5202017f017e23808080800041106b2203248080808000200320022903083703082003200229030037030020012003410210f98080800021042000420037030020002004370308200341106a2480808080000b0e0020002002200110e7808080000b6d02027f017e23808080800041106b220324808080800020032002280200220420022802042202108b818080000240024020032802004101470d0020012004200210fd8080800021050c010b200329030821050b2000420037030020002005370308200341106a2480808080000b02000b130020004200370300200020023100003703080b190020004200370300200020023502004220864204843703080b2e01027e4201210302402002290300220442ff018342cd00520d0020002004370308420021030b200020033703000b0e0020002001200210f9808080000b12002000200120022003200410fa808080000b12002000200120022003200410fb808080000b140020002001200220032004200510fc808080000b0c002000200110fe808080000b0e002000200120021081818080000b100020002001200220031084818080000b1200200020012002200320041086818080000b0e002000200120021088818080000b0c00200020011089818080000b070020002903000b1a002001ad4220864204842002ad4220864204841080808080000b1f00200120022003ad4220864204842004ad4220864204841081808080001a0b2e00024020022004460d00000b2001ad4220864204842003ad4220864204842002ad4220864204841082808080000b3000024020032005460d00000b20012002ad4220864204842004ad4220864204842003ad4220864204841083808080000b1a002001ad4220864204842002ad4220864204841084808080000b0a0020011085808080000b0a0020011086808080000b0a0020011087808080000b0c00200120021088808080000b0c00200120021089808080000b0c0020012002108a808080000b0e00200120022003108b808080000b0800108c808080000b10002001200220032004108d808080000b0c0020012002108e808080000b0c0020012002108f808080000b0a0020011090808080000b0a0020011091808080000bb60102017f017e23808080800041106b220324808080800002400240200241094b0d00420021040340024020020d002000410036020020002004420886420e843703080c030b200341086a20012d0000108c81808000024020032d000841ff01460d0020002003290308370204200041013602000c030b2002417f6a2102200141016a2101200442068620033100098421040c000b0b20002002360208200041003a0004200041013602000b200341106a2480808080000b830101017f410121020240200141ff017141df00460d0002400240200141506a41ff0171410a490d00200141bf7f6a41ff0171411a490d0102402001419f7f6a41ff0171411a490d00200020013a0001200041013a00000f0b200141456a21020c020b200141526a21020c010b2001414b6a21020b200041ff013a0000200020023a00010b0b002000ad4220864204840b08002000422088a70b070020004208880b070020004201510b0900428390808080010b3201017e420121020240200142ffffffffffffffff00560d0020002001420886420684370308420021020b200020023703000b1500200020014101744101722002109481808000000b4701017f23808080800041206b2203248080808000200320013602102003200036020c200341013b011c2003200236021820032003410c6a360214200341146a10d680808000000b1400200120002802002000280204109a818080000bcd0202017f017e23808080800041206b2204248080808000024002400240200020024b0d00200120024b0d01418280808000ad4220862105200020014d0d02200420003602082004200136020c200420052004410c6aad8437031820042005200441086aad84370310418080c08000200441106a2003109481808000000b200420003602082004200236020c2004418280808000ad42208622052004410c6aad8437031820042005200441086aad8437031041a880c08000200441106a2003109481808000000b200420013602082004200236020c2004418280808000ad42208622052004410c6aad8437031820042005200441086aad8437031041e180c08000200441106a2003109481808000000b200420013602082004200236020c200420052004410c6aad8437031820042005200441086aad8437031041e180c08000200441106a2003109481808000000b810602087f017e412b417f2000280208220641808080017122071b21082007411576410120011b20056a21090240024020064180808004710d00410021020c010b0240024020034110490d002002200310988180800021070c010b024020030d00410021070c010b2003410371210a4100210b41002107024020034104490d002003410c71210c4100210b41002107034020072002200b6a220d2c000041bf7f4a6a200d41016a2c000041bf7f4a6a200d41026a2c000041bf7f4a6a200d41036a2c000041bf7f4a6a2107200c200b41046a220b470d000b200a450d010b2002200b6a210d03402007200d2c000041bf7f4a6a2107200d41016a210d200a417f6a220a0d000b0b200720096a21090b2008412d20011b210c02400240200920002f010c22014f0d0002400240024020064180808008710d00200120096b210841002107410021010240024002402006411d764103710e0402000100020b200821010c010b200841feff037141017621010b200641ffffff007121092000280204210b2000280200210a0340200741ffff0371200141ffff03714f0d024101210d200741016a2107200a2009200b28021011808080800000450d000c050b0b20002000290208220ea741808080ff797141b080808002723602084101210d2000280200220a2000280204220b200c200220031099818080000d0341002107200120096b41ffff037121020340200741ffff037120024f0d024101210d200741016a2107200a4130200b28021011808080800000450d000c040b0b4101210d200a200b200c200220031099818080000d02200a20042005200b28020c118180808000000d0241002107200820016b41ffff037121000340200741ffff03712202200049210d200220004f0d03200741016a2107200a2009200b28021011808080800000450d000c030b0b4101210d200a20042005200b28020c118180808000000d012000200e37020841000f0b4101210d200028020022072000280204220a200c200220031099818080000d00200720042005200a28020c11818080800000210d0b200d0beb0601087f024002402001200041036a417c71220220006b2203490d00200120036b22044102762205450d00200441037121064100210741002101024020022000460d0041002108410021010240200020026b2209417c4b0d00410021084100210103402001200020086a22022c000041bf7f4a6a200241016a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c000041bf7f4a6a2101200841046a22080d000b0b200020086a21020340200120022c000041bf7f4a6a2101200241016a2102200941016a22090d000b0b200020036a210902402006450d002009200441fcffffff07716a22022c000041bf7f4a210720064101460d00200720022c000141bf7f4a6a210720064102460d00200720022c000241bf7f4a6a21070b200720016a21080340200921032005450d02200541c001200541c001491b22074103712106024002402007410274220441f0077122010d00410021020c010b200320016a2100410021022003210103402001410c6a2802002209417f73410776200941067672418182840871200141086a2802002209417f73410776200941067672418182840871200141046a2802002209417f7341077620094106767241818284087120012802002209417f7341077620094106767241818284087120026a6a6a6a2102200141106a22012000470d000b0b200520076b2105200320046a2109200241087641ff81fc0771200241ff81fc07716a418180046c41107620086a21082006450d000b2003200741fc01714102746a22022802002201417f734107762001410676724181828408712101024020064101460d0020022802042209417f7341077620094106767241818284087120016a210120064102460d0020022802082202417f7341077620024106767241818284087120016a21010b200141087641ff811c71200141ff81fc07716a418180046c41107620086a21080c010b024020010d0041000f0b200141037121024100210941002108024020014104490d002001417c712105410021084100210903402008200020096a22012c000041bf7f4a6a200141016a2c000041bf7f4a6a200141026a2c000041bf7f4a6a200141036a2c000041bf7f4a6a21082005200941046a2209470d000b2002450d010b200020096a21010340200820012c000041bf7f4a6a2108200141016a21012002417f6a22020d000b0b20080b3e0002402002417f460d0020002002200128021011808080800000450d0041010f0b024020030d0041000f0b200020032004200128020c118180808000000b8e0501077f024002402000280208220341808080c00171450d0002400240024002400240200341808080800171450d0020002f010e22040d01410021020c020b024020024110490d002001200210988180800021050c040b024020020d00410021050c040b200241037121064100210741002105024020024104490d002002410c712104410021054100210703402005200120076a22082c000041bf7f4a6a200841016a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041bf7f4a6a21052004200741046a2207470d000b2006450d040b200120076a21080340200520082c000041bf7f4a6a2105200841016a21082006417f6a22060d000c040b0b200120026a21074100210220012108200421060340200822052007460d020240024020052c00002208417f4c0d00200541016a21080c010b0240200841604f0d00200541026a21080c010b2005410441032008416f4b1b6a21080b200820056b20026a21022006417f6a22060d000b0b410021060b200420066b21050b200520002f010c22084f0d00200820056b210941002105410021040240024002402003411d764103710e0402000102020b200921040c010b200941feff037141017621040b200341ffffff00712107200028020421062000280200210002400340200541ffff0371200441ffff03714f0d0141012108200541016a2105200020072006280210118080808000000d030c000b0b41012108200020012002200628020c118180808000000d0141002105200920046b41ffff037121020340200541ffff037122042002492108200420024f0d02200541016a2105200020072006280210118080808000000d020c000b0b200028020020012002200028020428020c1181808080000021080b20080b1a00200028020020012002200028020428020c118180808000000bbf0201077f23808080800041106b2202248080808000410a21032000280200220421050240200441e807490d00410a2103200421050340200241066a20036a2206417c6a2005220020004190ce006e22054190ce006c6b220741ffff037141e4006e22084101742f00bb8dc080003b00002006417e6a2007200841e4006c6b41ffff03714101742f00bb8dc080003b00002003417c6a2103200041fface2044b0d000b0b02400240200541094b0d00200521000c010b200241066a2003417e6a22036a2005200541ffff037141e4006e220041e4006c6b41ffff03714101742f00bb8dc080003b00000b024002402004450d002000450d010b200241066a2003417f6a22036a20004101742d00bc8dc080003a00000b2001410141014100200241066a20036a410a20036b1097818080002103200241106a24808080800020030b130041908dc08000412b2000109381808000000b6e01017f23808080800041206b220524808080800020052001360204200520003602002005200336020c200520023602082005418380808000ad422086200541086aad843703182005418480808000ad4220862005ad84370310419881c08000200541106a2004109481808000000b180020002802002001200028020428020c118080808000000b130041838fc0800041332000109481808000000b1300419c8fc0800041392000109481808000000b140041b88fc0800041c3002000109481808000000b5f02017f017e23808080800041206b2203248080808000200320013602082003200036020c2003418280808000ad42208622042003410c6aad8437031820032004200341086aad8437031041f185c08000200341106a2002109481808000000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030bac07010c7f23808080800041106b210302400240200241104f0d00200021040c010b024020002000410020006b41037122056a22064f0d002005417f6a2107200021042001210802402005450d002005210920002104200121080340200420082d00003a0000200841016a2108200441016a21042009417f6a22090d000b0b20074107490d000340200420082d00003a0000200441016a200841016a2d00003a0000200441026a200841026a2d00003a0000200441036a200841036a2d00003a0000200441046a200841046a2d00003a0000200441056a200841056a2d00003a0000200441066a200841066a2d00003a0000200441076a200841076a2d00003a0000200841086a2108200441086a22042006470d000b0b2006200220056b2209417c7122076a210402400240200120056a220841037122010d00200620044f0d0120082101034020062001280200360200200141046a2101200641046a22062004490d000c020b0b410021022003410036020c2003410c6a20017221050240410420016b220a410171450d00200520082d00003a0000410121020b0240200a410271450d00200520026a200820026a2f01003b01000b200820016b21052001410374210b200328020c210a0240200641046a20044f0d004100200b6b411871210c034020062202200a200b76200541046a2205280200220a200c7472360200200241046a2106200241086a2004490d000b0b41002102200341003a0008200341003a00060240024020014101470d00200341086a210d410021014100210c4100210e0c010b200541056a2d0000210c2003200541046a2d000022013a0008200c410874210c4102210e200341066a210d0b02402008410171450d00200d200541046a200e6a2d00003a000020032d0006411074210220032d000821010b2006200c200272200141ff0171724100200b6b41187174200a200b76723602000b20094103712102200820076a21010b02402004200420026a22064f0d002002417f6a2109024020024107712208450d000340200420012d00003a0000200141016a2101200441016a21042008417f6a22080d000b0b20094107490d000340200420012d00003a0000200441016a200141016a2d00003a0000200441026a200141026a2d00003a0000200441036a200141036a2d00003a0000200441046a200141046a2d00003a0000200441056a200141056a2d00003a0000200441066a200141066a2d00003a0000200441076a200141076a2d00003a0000200141086a2101200441086a22042006470d000b0b20000b0e0020002001200210a5818080000baa0301057f02400240200241104f0d00200021030c010b024020002000410020006b41037122046a22054f0d002004417f6a21062000210302402004450d0020042107200021030340200320013a0000200341016a21032007417f6a22070d000b0b20064107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032005470d000b0b024020052005200220046b2202417c716a22034f0d00200141ff017141818284086c2107034020052007360200200541046a22052003490d000b0b200241037121020b02402003200320026a22074f0d002002417f6a2104024020024107712205450d000340200320013a0000200341016a21032005417f6a22050d000b0b20044107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032007470d000b0b20000b0be30f0100418080c0000bd90f16736c69636520696e6465782073746172747320617420c00d2062757420656e647320617420c0001272616e676520737461727420696e64657820c022206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820c0001072616e676520656e6420696e64657820c022206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820c000c0023a20c0002f55736572732f696e686f757365636f6465732f2e7275737475702f746f6f6c636861696e732f737461626c652d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273002f55736572732f696e686f757365636f6465732f2e7275737475702f746f6f6c636861696e732f737461626c652d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f6f70732f66756e6374696f6e2e7273002f55736572732f696e686f757365636f6465732f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736861322d302e31302e392f7372632f636f72655f6170692e7273002f55736572732f696e686f757365636f6465732f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f6469676573742d302e31302e372f7372632f636f72655f6170692f63745f7661726961626c652e727300636f6e7472616374732f726563656970742d73686172642f7372632f6c69622e7273002f55736572732f696e686f757365636f6465732f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f626c6f636b2d6275666665722d302e31302e342f7372632f6c69622e72730026636f70795f66726f6d5f736c6963653a20736f7572636520736c696365206c656e6774682028c02b2920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028c00129000000008902100067000000a4000000180000008902100067000000a4000000200000008902100067000000ae0000001a00000089021000670000002d010000220000008902100067000000380100001e000000890210006700000035010000180000000000000000000000010000000100000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c75650066021000220000009f000000200000006602100022000000a00000002000000066021000220000009c0000002000000066021000220000009d00000020000000000000000000000000000000000000006602100022000000e90000003800000066021000220000005d0000004e000000010000000000000000000000000000006602100022000000640000000e000000020000000000000000000000000000006602100022000000650000004b00000062617463685f6964206f7574206f662073686172642072616e6765006602100022000000660000000900000000000000040000000000000000000000000000006602100022000000c20000004e0000006602100022000000c5000000540000006602100022000000c8000000520000006602100022000000f3000000120000006602100022000000f400000040000000526f7574657200002805100006000000537461727442617463684964380510000c000000456e644261746368496400004c0510000a000000426174636800000060051000050000005072756e65645570546f0000700510000a0000008e0110006400000024000000090000009e001000760000000b08000011000000436f6e76657273696f6e4572726f72616e63686f7265645f6c6564676572636f756e74706572696f645f656e64706572696f645f7374617274726f6f74000000b30510000f000000c205100005000000c70510000a000000d10510000c000000dd051000040000008e011000640000003e000000360000008e011000640000003e000000170000008e0110006400000042000000130000000000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68059babd9831f19cde05bf3011000720000007c000000240000001501100078000000fa000000050000009e001000760000006f0700001100000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75653030303130323033303430353036303730383039313031313132313331343135313631373138313932303231323232333234323532363237323832393330333133323333333433353336333733383339343034313432343334343435343634373438343935303531353235333534353535363537353835393630363136323633363436353636363736383639373037313732373337343735373637373738373938303831383238333834383538363837383838393930393139323933393439353936393739383939617474656d707420746f20646976696465206279207a65726f617474656d707420746f206164642077697468206f766572666c6f77617474656d707420746f206d756c7469706c792077697468206f766572666c6f77009f020e636f6e74726163746d657461763000000000000000046e616d650000000c52656365697074536861726400000000000000047265706f0000002c68747470733a2f2f6769746875622e636f6d2f616363656e73612f616363656e73612d636f6e7472616374730000000000000006636f6d6d697400000000002832333264323835363130363161396633393832663665353538653432353436333437653763306230000000000000000776657273696f6e0000000005302e312e300000000000000000000005727376657200000000000006312e39372e3100000000000000000008727373646b7665720000002f32372e302e36233630393236613230643166396630613636396435666535353136333666343261313330326630633000008b120e636f6e747261637473706563763000000002000000000000000000000007446174614b65790000000005000000000000000000000006526f75746572000000000000000000000000000c53746172744261746368496400000000000000000000000a456e644261746368496400000000000100000000000000054261746368000000000000010000000600000000000000000000000a5072756e65645570546f0000000000010000011a5374727563747572616c6c79206964656e746963616c20746f206052656365697074416e63686f723a3a42617463685265636f7264602e20536f726f62616e2063726f73732d636f6e74726163740a63616c6c73206465636f646520627920736861706520286669656c64206e616d65732c2074797065732c20616e64206f72646572292c206e6f74206279205275737420747970650a6964656e746974792c20736f207468652074776f20696e646570656e64656e746c7920646566696e65642073747275637473207374617920776972652d636f6d70617469626c652061730a6c6f6e67206173207468697320736861706520646f65736e27742064726966742066726f6d2074686520726f75746572277320636f70792e0000000000000000000b42617463685265636f72640000000005000000000000000f616e63686f7265645f6c656467657200000000040000000000000005636f756e7400000000000004000000000000000a706572696f645f656e64000000000006000000000000000c706572696f645f7374617274000000060000000000000004726f6f74000003ee000000200000000000000000000000096765745f626174636800000000000001000000000000000862617463685f69640000000600000001000003e9000007d00000000b42617463685265636f72640000000003000000000000004f52657475726e7320602873746172745f62617463685f69642c20656e645f62617463685f696429602c2074686520736861726427732061737369676e65640a68616c662d6f70656e2072616e67652e00000000096765745f72616e67650000000000000000000001000003ed00000002000000060000000600000000000000000000000a6765745f726f75746572000000000000000000010000001300000000000000f2577269746573206120626174636820616e63686f7265642062792074686520726f757465722e206062617463685f696460206d7573742066616c6c20696e20746869730a736861726427732061737369676e656420605b73746172742c20656e6429602072616e676520e280942074686520726f7574657220697320736f6c656c790a726573706f6e7369626c6520666f7220636f6d707574696e67207468617420636f72726563746c792c20736f20612076696f6c6174696f6e2068657265206d65616e7320610a726f75746572206275672c206e6f742061207265636f76657261626c652075736572206572726f722e00000000000c616e63686f725f626174636800000005000000000000000862617463685f6964000000060000000000000004726f6f74000003ee000000200000000000000005636f756e7400000000000004000000000000000c706572696f645f737461727400000006000000000000000a706572696f645f656e6400000000000600000000000000000000007852756e732061746f6d6963616c6c79207769746820606465706c6f795f7632602c20736f2061207368617264206973206e65766572206f627365727661626c6520696e20616e0a756e696e697469616c697a6564207374617465206265747765656e206465706c6f796d656e7420616e642073657475702e0000000d5f5f636f6e7374727563746f72000000000000030000000000000006726f75746572000000000013000000000000000e73746172745f62617463685f6964000000000006000000000000000c656e645f62617463685f69640000000600000000000000000000022044656c6574657320626174636865732066726f6d20746869732073686172642773206c6f63616c20605072756e65645570546f6020637572736f7220666f72776172642c0a73746f7070696e6720617420746865206669727374206261746368206e6f7420796574206f6c6420656e6f7567682c2060686967685f77617465725f62617463685f6964600a286e65766572207072756e65206168656164206f6620776861742074686520726f75746572206861732061637475616c6c79207772697474656e292c206f720a606d61785f62617463686573602064656c6574696f6e7320e280942077686963686576657220636f6d65732066697273742e2052657475726e732074686520616476616e6365640a637572736f7220616e6420686f77206d616e7920626174636865732077657265207072756e65642c20736f2074686520726f757465722063616e206465636964650a7768657468657220746f206b65657020676f696e672077697468696e2074686973207368617264206f72206d6f766520746f20746865206e657874206f6e652e0a0a526f757465722d67617465643a207072756e696e67206f72646572206973206120726f757465722d6c6576656c20696e76617269616e7420286120636f6e746967756f75730a676c6f62616c20707265666978292c20736f206f6e6c792074686520726f75746572206d617920616476616e63652074686973207368617264277320637572736f722e0000000d7072756e655f6261746368657300000000000003000000000000000d6265666f72655f6c656467657200000000000004000000000000000b6d61785f6261746368657300000000040000000000000013686967685f77617465725f62617463685f6964000000000600000001000003ed00000002000000060000000600000000000000000000000e7665726966795f72656365697074000000000003000000000000000862617463685f69640000000600000000000000046c656166000003ee00000020000000000000000570726f6f66000000000003ea000003ee0000002000000001000003e90000000100000003000000000000000000000010657874656e645f62617463685f74746c00000001000000000000000862617463685f69640000000600000001000003e90000000200000003001e11636f6e7472616374656e766d6574617630000000000000001b00000000" + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/set_min_anchor_interval_requires_full_quorum_then_executes.1.json b/contracts/governance/test_snapshots/set_min_anchor_interval_requires_full_quorum_then_executes.1.json new file mode 100644 index 00000000..7ff5d717 --- /dev/null +++ b/contracts/governance/test_snapshots/set_min_anchor_interval_requires_full_quorum_then_executes.1.json @@ -0,0 +1,650 @@ +{ + "generators": { + "address": 4, + "nonce": 3, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "symbol": "set_min_anchor_interval" + }, + { + "vec": [ + { + "u32": 3600 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "1" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "2" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "3" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 3600 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 1000 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "set_min_anchor_interval" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "2" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 1000 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 1000 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 10000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 1000 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "BatchCount" + } + ] + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "vec": [ + { + "symbol": "MinAnchorInterval" + } + ] + }, + "val": { + "u32": 3600 + } + }, + { + "key": { + "vec": [ + { + "symbol": "PrunedUpTo" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "RootBuffer" + } + ] + }, + "val": { + "vec": [] + } + }, + { + "key": { + "vec": [ + { + "symbol": "ShardCount" + } + ] + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ShardWasmHash" + } + ] + }, + "val": { + "bytes": "5295f31bb28b192210b0ec8477d8e74d4982acacd844670bf5bbe0fc4aebf902" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": { + "v1": { + "ext": "v0", + "cost_inputs": { + "ext": "v0", + "n_instructions": 8781, + "n_functions": 150, + "n_globals": 2, + "n_table_entries": 5, + "n_types": 37, + "n_data_segments": 1, + "n_elem_segments": 1, + "n_imports": 18, + "n_exports": 10, + "n_data_segment_bytes": 2009 + } + } + }, + "hash": "5295f31bb28b192210b0ec8477d8e74d4982acacd844670bf5bbe0fc4aebf902", + "code": "0061736d0100000001fb012560027f7f017f60037f7f7f017f60027e7e017e60047e7e7e7e017e60037e7e7e017e60017e017e6000017e60047f7f7f7f0060057f7f7e7f7f0060037f7f7f0060027f7f017e60047f7f7f7e0060017f0060027f7f0060027f7e0060037e7e7f017e60027e7f017e60057e7e7e7e7e017e60057e7e7f7e7e0060037e7e7e0060037e7e7e017f60017e017f60057f7f7f7f7f0060017f017f60017f017e60037f7e7e017e60037f7e7e017f60000060037f7f7f017e60057f7e7e7f7f0060057f7f7f7f7f017e60067f7e7f7f7f7f017e60027f7e017e60047f7e7e7e017e60057f7e7e7e7e017e60067f7f7f7f7f7f017f60057f7f7f7f7f017f026d12017601670002016201310003016d01390004016d016100030162016a00020169013000050169015f0005016101300005016c01320002016c01310002016c01300002016c015f0004017801330006016c01370003016c0138000201760131000201760133000501620138000503980196010708090a0900090b090909090b090b0a0a0c0c0d050e0a060c0f06061011120413040b04140a05150a0e0d0c16170a0a0a091809090900041105050606040409170716160c0c1717090c1809191a0e0909090909090909091b0909091c1d1e1f2019212219200a1c1d1e1f1c20202019191921182219192020090d18150515060e090900072300240101000c16000c0c0c09010101010405017001050505030100110611027f01418080c0000b7f0041908dc0000b0786010a066d656d6f727902000d5f5f636f6e7374727563746f7200490c616e63686f725f6261746368004a10657874656e645f62617463685f74746c004b096765745f6261746368004c096765745f72616e6765004d0a6765745f726f75746572004e0d7072756e655f62617463686573004f0e7665726966795f726563656970740050015f0301090d010041010b04489c019f0195010ac0a20196011200200020014201200220031093808080000b270020002000200110958080800020022003108d818080002004108d8180800010f5808080001a0ba70102017f017e23808080800041306b22032480808080000240024002402001200120021095808080002204420110df808080000d00200042003703000c010b200320012004420110de80808000370300200341086a2001200310968080800020032903084201510d0120002003290328370320200020032903203703182000200329031837031020002003290310370308200042013703000b200341306a2480808080000f0b000be60302017f017e23808080800041306b22022480808080000240024002400240024002400240024020012802000e050001020304000b200241206a200041b08ac0800010e68080800020022802200d05200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000c040b200241206a200041c48ac0800010e68080800020022802200d04200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000c030b200241206a200041d88ac0800010e68080800020022802200d03200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000c020b200241206a200041e88ac0800010e68080800020022802200d0220022002290328370318200241186a10dc808080002103200241206a2000200141086a10c68080800020022802200d022002200229032837031020022003370308200241206a200241086a200010e8808080000c010b200241206a200041fc8ac0800010e68080800020022802200d01200220022903283703082002200241086a10dc80808000370318200241206a2000200241186a10c5808080000b200229032821032002290320500d010b000b200241306a24808080800020030bb30202027f057e23808080800041c0006b2203248080808000410021040240034020044128460d01200341086a20046a4202370300200441086a21040c000b0b4201210502402002290300220642ff018342cc00520d002001200641e48bc080004105200341086a410510f1808080001a2003290308220642ff01834204520d002003290310220742ff01834204520d00200341306a2001200341186a109c8080800020032802300d0020032903382108200341306a2001200341206a109c8080800020032802300d0020032903382109200341306a200341286a200110e58080800020032802300d002003290338210520002006422088a736022420002007422088a7360220200020083703182000200937031020002005370308420021050b20002005370300200341c0006a2480808080000b1600200020002001109580808000420110df808080000b100020002001200242011099808080000b21002000200020011095808080002000200210a180808000200310f4808080001a0b900102017f017e23808080800041206b22032480808080000240024002402001200120021095808080002204420210df808080000d00200042003703000c010b200320012004420210de80808000370308200341106a2001200341086a10ed8080800020032903104201510d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b900102017f017e23808080800041206b22032480808080000240024002402001200120021095808080002204420210df808080000d00200042003703000c010b200320012004420210de80808000370308200341106a2001200341086a109c8080800020032903104201510d012003290318210420004201370300200020043703080b200341206a2480808080000f0b000b6401027e02400240024020022903002203a741ff0171220241c000460d0020024106470d01420021042003108f8180800021030c020b420021042001200310f28080800021030c010b4201210410918180800021030b20002004370300200020033703080b10002000200120024202109e808080000b21002000200020011095808080002002200010f880808000200310f4808080001a0b1000200020012002420210a0808080000b21002000200020011095808080002000200210a280808000200310f4808080001a0b4502017f017e23808080800041106b220224808080800020022000200110c380808000024020022903004201520d00000b20022903082103200241106a24808080800020030b4502017f017e23808080800041106b220224808080800020022000200110c680808000024020022903004201520d00000b20022903082103200241106a24808080800020030b5401027f23808080800041d0006b22012480808080004100210203402001410c6a20026a41003a0000200241016a220241c000470d000b20002001410c6a41c00010a6818080001a200141d0006a2480808080000b5701027f23808080800041306b21014100210203402001410c6a20026a41003a0000200241016a22024120470d000b200020012902243700182000200129021c370010200020012902143700082000200129020c3700000b140020002802002802002001410110d1808080000b7001017f23808080800041c0006b220124808080800020012000370308200141106a2001413f6a200141086a109c80808000024020012903104201520d00000b200141106a200129031810a7808080002001413f6a200141106a10a8808080002100200141c0006a24808080800020000b9e0101027f23808080800041c0006b22022480808080002002413f6a10d780808000200242033703282002200137033020022002413f6a200241286a1094808080000240024020022903004201520d0020002002290320370320200020022903183703182000200229031037031020002002290308370308410021030c010b200041e4003b0102410121030b200020033b0100200241c0006a2480808080000b6802017f017e23808080800041106b22022480808080000240024020012f01000d0020022000200141086a10c380808000024020022802000d00200229030821030c020b1091818080001a000b200141026a10c48080800021030b200241106a24808080800020030b4602017f017e23808080800041206b2200248080808000200041086a10aa80808000200029030820002903102000411f6a10ab808080002101200041206a24808080800020010bad0102017f017e23808080800041206b22012480808080002001411f6a10d780808000200141086a2001411f6a41d888c08000109b80808000024002402001280208450d00200129031021022001411f6a10d780808000200141086a2001411f6a41f888c08000109b808080002001280208450d012000200129031037030820002002370300200141206a2480808080000f0b41888ac08000109d81808000000b41988ac08000109d81808000000b3c01017f23808080800041106b220324808080800020032001370308200320003703002002200310c2808080002101200341106a24808080800020010b3702017f017e23808080800041106b220024808080800010ad808080002000410f6a10ae808080002101200041106a24808080800020010b6302017f017e23808080800041206b22002480808080002000411f6a10d780808000200041086a2000411f6a41a888c08000109a80808000024020002802080d0041b888c08000109d81808000000b20002903102101200041206a24808080800020010b3801017f23808080800041106b220224808080800020022000370308200241086a200110f8808080002100200241106a24808080800020000bf80101017f23808080800041c0006b220524808080800020052001370310200520003703082005200337031820052004370320200541286a2005413f6a200541086a109c80808000024020052903284201510d0020052903302101200541286a2005413f6a200541106a10e28080800020052903284201510d00200242ff01834204520d0020052903302100200541286a2005413f6a200541186a109c8080800020052903284201510d0020052903302103200541286a2005413f6a200541206a109c8080800020052903284201510d00200120002002422088a72003200529033010b080808000200541c0006a24808080800042020f0b000bcc0303017f017e017f23808080800041d0006b2205248080808000200541cf006a10d780808000200541086a200541cf006a41a888c08000109a8080800002400240024002402005280208450d0020052005290310370300200510db80808000200541cf006a10d780808000200541086a200541cf006a41d888c08000109b808080002005280208450d0120052903102106200541cf006a10d780808000200541086a200541cf006a41f888c08000109b808080002005280208450d0220002006540d03200020052903105a0d03200541cf006a10d88080800021072005200236022020052001370308200520073602242005200437031820052003370310200541cf006a10d7808080002005420337032820052000370330200541cf006a200541286a200541086a109880808000200541cf006a10d780808000200541cf006a41e4004180d21f10da80808000200541cf006a10d7808080002005200037034020054203370338200541cf006a200541386a41e4004180d21f109280808000200541d0006a2480808080000f0b41c888c08000109d81808000000b41e888c08000109d81808000000b418889c08000109d81808000000b419889c08000413741b489c08000109481808000000bb30101017f23808080800041306b2203248080808000200320013703082003200037030020032002370310200341186a2003412f6a200310ed80808000024020032903184201510d0020032903202101200341186a2003412f6a200341086a109c8080800020032903184201510d0020032903202100200341186a2003412f6a200341106a109c8080800020032903184201510d0020012000200329032010b280808000200341306a24808080800042020f0b000bd30101017f23808080800041206b22032480808080002003200137030820032000370300200320023703102003411f6a10d7808080002003411f6a41a888c080002003109d808080002003411f6a10d7808080002003411f6a41d888c08000200341086a109f808080002003411f6a10d7808080002003411f6a41f888c08000200341106a109f808080002003411f6a10d7808080002003411f6a41c889c08000200341086a109f808080002003411f6a10d7808080002003411f6a41e4004180d21f10da80808000200341206a2480808080000b930101017f23808080800041206b2203248080808000200320023703000240200042ff01834204520d00200142ff01834204520d00200341086a2003411f6a2003109c8080800020032903084201510d00200341086a2000422088a72001422088a7200329031010b480808000200329030820032903102003411f6a10ab808080002100200341206a24808080800020000f0b000b950402017f047e23808080800041e0006b2204248080808000200441df006a10d780808000200441106a200441df006a41a888c08000109a8080800002400240024002402004280210450d0020042004290318370300200410db80808000200441df006a10d780808000200441106a200441df006a41f888c08000109b808080002004280210450d0120042903182105200441df006a10d780808000200441106a200441df006a41c889c08000109b808080002004280210450d022005200320052003541b21062004200429031822073703082002ad2108420021030340200720037c220520065a0d04200320085a0d04200441df006a10d7808080002004420337033820042005370340200441106a200441df006a200441386a109480808000024020042903104201520d00200428023420014f0d05200441df006a10d7808080002004420337034820042005370350200441df006a200441df006a200441c8006a109580808000420110f3808080001a0b2004200542017c370308200342017c21030c000b0b41d889c08000109d81808000000b41e889c08000109d81808000000b41f889c08000109d81808000000b02402003500d00200441df006a10d780808000200441df006a41c889c08000200441086a109f80808000200441df006a10d780808000200441df006a41e4004180d21f10da808080000b2000200337030820002005370300200441e0006a2480808080000ba20101017f23808080800041306b22032480808080002003200137031020032000370308200341186a2003412f6a200341086a109c80808000024020032903184201510d0020032903202101200341186a2003412f6a200341106a10e28080800020032903184201510d00200242ff018342cb00520d0020012003290320200210b6808080002003412f6a10b7808080002102200341306a24808080800020020f0b000bc30f010b7f23808080800041e0046b2203248080808000200320023703202003200137031802400240024002400240200341206a41086a200210f780808000108e81808000410a4d0d00418180a4062104410021050c010b200341d0026a200010a780808000024020032f01d0024101470d0020032f01d20222044108742105200441107441017221040c010b200320032903f00222013702fc01200320032903d802370328200320032903e002370330200320032903e80237033820032001370340200342003703e802200342003703e002200342003703d802200342003703d002200341186a10d980808000200341186a10dc808080004204200341d0026a412010ef80808000200320032903e802370360200320032903e002370358200320032903d802370350200320032903d002370348200341e8006a200210bb80808000200341e4036a41206a210620034198046a41386a2107200341b0036a2108200341d0026a41286a2109200341e0016a41286a210a200341a0016a41206a210b02400340200341d0026a200341e8006a10bc808080000240024020032903d00222024202560d002002a70e03010003010b41bc87c08000412b200341df046a41ac87c0800041f08cc08000109e81808000000b200320032903d802370378200342003703e802200342003703e002200342003703d802200342003703d002200341f8006a10d980808000200341f8006a10dc808080004204200341d0026a412010ef80808000200320032903e80237039801200320032903e00237039001200320032903d80237038801200320032903d00237038001200341a0016a410041c00010a7818080001a02400240200341c8006a20034180016a412010a4818080004101480d00200341a0016a412020034180016a412041e887c0800010d580808000200b4120200341c8006a412041f887c0800010d5808080000c010b200341a0016a4120200341c8006a4120418888c0800010d580808000200b412020034180016a4120419888c0800010d5808080000b200a10bd80808000420021022003420037038002200341002903d88cc080003703f801200341002903d08cc080003703f001200341002903c88cc080003703e801200341002903c08cc080003703e00141c0002104200341d0026a200341a0016a41c00010a6818080001a0240024020032d00c80222050d00200341d0026a220c21050c010b200341106a2005200a41c00041cc86c0800010be8080800020032802102003280214200341d0026a41c00020056b220441dc86c0800010d5808080002003290380022202427f510d04200341d0026a20046a210c20052104200a21050b2003200242017c37038002200341e0016a2005410110d180808000200a2004413f712205200c200441c000716a200541ec86c0800010d580808000200320053a00c802200341d0026a200341e0016a41f00010a6818080001a200341c4036a10a480808000200341e4036a10a48080800020032903f00221022003200341d0026a36028404200242ffffffffffffffff03560d04200242ffffffffffffff3f560d05200320032d00b803220cad2201423b862002420986220020014203868422014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200242018642808080f80f832002420f88428080fc0783842002421f884280fe03832000423888848484370388042009200c6a4180013a0000200320034184046a36029404200341086a200c41016a200941c00041fc86c0800010be80808000200328020c210420032802082105024003402004450d01200541003a00002004417f6a2104200541016a21050c000b0b02400240200c4138714138460d002008410820034188046a4108418c87c0800010d58080800020034194046a200910a5808080000c010b20034194046a200910a58080800020034198046a10a3808080002007410820034188046a4108419c87c0800010d58080800020034194046a20034198046a10a5808080000b41002104200341003a00b803200342a0808080c0003702a4042003410036029c0420032006360298042003200341e4036a3602a004200328028404210d20034198046a10bf808080002205410820054108491b410274210c02400340200c2004460d012003200d20046a280200220541ff81fc0771410878200541187841ff81fc07717236029804200341e4036a20046a410420034198046a410441ac8cc0800010d580808000200441046a21040c000b0b200341c4036a4120200341e4036a412041e08cc0800010d580808000200320032900c403370348200320032900cc03370350200320032900d403370358200320032900dc033703600c000b0b2003200329034837039804200320032903503703a004200320032903583703a804200320032903603703b004200342003703e802200342003703e002200342003703d802200342003703d002200341286a10d980808000200341286a10dc808080004204200341d0026a412010ef80808000200320032903e8023703f801200320032903e0023703f001200320032903d8023703e801200320032903d0023703e00120034198046a200341e0016a412010a481808000452105410021040b200341e0046a2480808080002004200541087441800271720f0b41848bc0800010a181808000000b418c8cc0800010a281808000000b419c8cc0800010a281808000000b3a02017f017e23808080800041106b22022480808080002002200036020c20012002410c6a10c0808080002103200241106a24808080800020030b6601017f23808080800041206b220124808080800020012000370300200141086a2001411f6a2001109c80808000024020012903084201520d00000b200129031010b98080800041ffff03712001411f6a10ba808080002100200141206a24808080800020000b8a0101027f23808080800041306b22012480808080002001412f6a10d780808000200142033703082001200037031041e400210202402001412f6a200141086a109780808000450d002001412f6a10d78080800020012000370320200142033703182001412f6a200141186a41e4004180d21f109280808000410021020b200141306a24808080800020020b3a02017f017e23808080800041106b2202248080808000200220003b010e20022002410e6a10c1808080002103200241106a24808080800020030b4d01017f23808080800041106b2202248080808000200220013703082000200241106a200110f780808000108e8180800036020c2000410036020820002001370300200241106a2480808080000b8d0103017f017e027f23808080800041206b220224808080800042022103024020012802082204200128020c4f0d002002200141086a220520012903002004108d8180800010f680808000370318200241086a2005200241186a10e28080800020022903082103200020022903103703082001200441016a3602080b20002003370300200241206a2480808080000b1100200010a380808000200041003a00400b3000024020032001490d002000200320016b3602042000200220016a3602000f0b2001200320032004109681808000000b2501017f0240200028021022010d0041948bc0800010a081808000000b200028020c20016e0b6802017f017e23808080800041106b22022480808080000240024020012d00000d0020022000200141016a10eb80808000024020022802000d00200229030821030c020b1091818080001a000b200141026a10c48080800021030b200241106a24808080800020030b1700024020012f01000d0042020f0b200110c4808080000b4502017f017e23808080800041106b220224808080800020022000200110c780808000024020022903004201520d00000b20022903082103200241106a24808080800020030b8c0202017f057e23808080800041306b2203248080808000200341086a20012002411c6a10ec8080800042012104024020032802080d0020032903102105200341086a2001200241186a10ec8080800020032802080d0020032903102106200341086a2001200241106a10c68080800020032802080d0020032903102107200341086a2001200241086a10c68080800020032802080d0020032903102108200341086a2002200110e38080800020032802080d0020032003290310370328200320083703202003200737031820032006370310200320053703082000200141e48bc080004105200341086a410510f080808000370308420021040b20002004370300200341306a2480808080000bd40301017e428380808010210102400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002f01002200417f6a0e1723020304050607080901010a0b0c0d0e0f101112131415000b0240200041d47d6a0e051e1f202122000b02402000419c7f6a0e0416171819000b200041b87e6a0e04191a1b1c190b000b4283808080200f0b4283808080300f0b4283808080c0000f0b4283808080d0000f0b4283808080e0000f0b4283808080f0000f0b428380808080010f0b428380808090010f0b4283808080c0010f0b4283808080d0010f0b4283808080e0010f0b4283808080f0010f0b428380808080020f0b428380808090020f0b4283808080a0020f0b4283808080b0020f0b4283808080c0020f0b4283808080d0020f0b4283808080e0020f0b4283808080f0020f0b4283808080c00c0f0b4283808080d00c0f0b4283808080e00c0f0b4283808080f00c0f0b428380808080190f0b428380808090190f0b4283808080a0190f0b4283808080b0190f0b4283808080c0250f0b4283808080d0250f0b4283808080e0250f0b4283808080f0250f0b4283808080802621010b20010b7302017f027e23808080800041106b220324808080800020032002200110e4808080000240024020032802000d00200320032903083703004200210420012003410110ee8080800021050c010b4201210410918180800021050b2000200437030020002005370308200341106a2480808080000b4602017f017e23808080800041106b220324808080800020032001200210e180808000200329030821042000200329030037030020002004370308200341106a2480808080000b980102017f037e23808080800041106b220324808080800020032001200210c6808080002003290308210442012105024020032802000d0020032001200241086a10c6808080002003290308210602402003280200450d00200621040c010b20032006370308200320043703004200210520012003410210ee8080800021040b2000200537030020002004370308200341106a2480808080000b1200200141a48bc08000410f109b818080000b140010ea8080800020002001200210b1808080000b180010ea808080002000200120022003200410af808080000b100010ea80808000200010b8808080000b100010ea80808000200010a6808080000b0e0010ea8080800010a9808080000b0e0010ea8080800010ac808080000b140010ea8080800020002001200210b3808080000b140010ea8080800020002001200210b5808080000b922402197f027e23808080800041e0016b22032480808080002003410c6a410041c00010a7818080001a200120024106746a2104200028021c2105200028021821062000280214210720002802102108200028020c21092000280208210a2000280204210b2000280200210c0240034020012004460d0120034280808080c0003702582003200136024c200341c0003602502003200141c0006a220d360254200341cc006a10d2808080002202411020024110491b410274210e4100210202400340200e2002460d012003410c6a20026a200120026a280000220f41ff81fc0771410878200f41187841ff81fc077172360200200241046a21020c000b0b2003200328020c22103602cc012003200328021022113602c8012003200328021422123602c4012003200328021822133602c0012003200b3602642003200736026c2003200c360260200320083602682003200a36027020032009360274200320063602782003200536027c200328022821022003280224210f200328022021012003200328021c221436028c0120032001360288012003200f3602840120032002360280012003280238210e20032802342115200328023021162003200328022c221736029c01200320163602980120032015360294012003200e3602900120032802482118200328024421192003280240211a2003200328023c221b3602ac012003201a3602a801200320193602a401200320183602a001200320104198dfa894046a221036025820032011419189dd89076a22113602542003201241cff783ae7b6a22123602502003201341a5b7d7cd7e6a221336024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d801370378200320123602dc01200320133602d801200320103602d401200320113602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c3703602003201441db84dbca036a22103602582003200141f1a3c4cf056a22013602542003200f41a485fe91796a220f3602502003200241d5bdf1d87a6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d801200320103602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200320174198d59ec07d6a2202360258200320164181b68d94016a220f3602542003201541be8bc6a1026a22013602502003200e41c3fbb1a8056a220e36024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d801370378200320013602dc012003200e3602d801200320023602d4012003200f3602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c3703602003201b41f4baf995076a22023602582003201a41fee3fa86786a220f3602542003201941a78df0de796a22013602502003201841f4e2ef8c7c6a220e36024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d801370378200320013602dc012003200e3602d801200320023602d4012003200f3602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341b0016a200341c0016a20034180016a20034190016a200341a0016a10d48080800020032802b001210220032802b401210f20032802b8012101200320032802bc0141c1d3eda47e6a220e3602582003200141868ff9fd7e6a22013602542003200f41c6bb86fe006a220f3602502003200241ccc3b2a0026a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341c0016a20034180016a20034190016a200341a0016a200341b0016a10d48080800020032802c001210220032802c401210f20032802c8012101200320032802cc0141efd8a4ef026a220e3602582003200141aa89d2d3046a22013602542003200f41dcd3c2e5056a220f3602502003200241da91e6b7076a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034180016a20034190016a200341a0016a200341b0016a200341c0016a10d4808080002003280280012102200328028401210f20032802880121012003200328028c0141d2a2f9c1796a220e3602582003200141ed8cc7c17a6a22013602542003200f41c8cf8c807b6a220f3602502003200241c7ffe5fa7b6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034190016a200341a0016a200341b0016a200341c0016a20034180016a10d4808080002003280290012102200328029401210f20032802980121012003200328029c0141f39780b77c6a220e3602582003200141c7a29ead7d6a22013602542003200f41d1c6a9366a220f3602502003200241e7d2a4a1016a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341a0016a200341b0016a200341c0016a20034180016a20034190016a10d48080800020032802a001210220032802a401210f20032802a8012101200320032802ac01418595dcbd026a220e3602582003200141b8c2ecf0026a22013602542003200f41fcdbb1e9046a220f3602502003200241939ae099056a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341b0016a200341c0016a20034180016a20034190016a200341a0016a10d48080800020032802b001210220032802b401210f20032802b8012101200320032802bc0141d4e6a9a8066a220e3602582003200141bb95a8b3076a22013602542003200f41ae928b8e786a220f360250200320024185d9c893796a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341c0016a20034180016a20034190016a200341a0016a200341b0016a10d48080800020032802c001210220032802c401210f20032802c8012101200320032802cc0141a1d1ff957a6a220e3602582003200141cbcce9c07a6a22013602542003200f41f096ae927c6a220f3602502003200241a3a3b1bb7c6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034180016a20034190016a200341a0016a200341b0016a200341c0016a10d4808080002003280280012102200328028401210f20032802880121012003200328028c014199d0cb8c7d6a220e3602582003200141a48ce4b47d6a22013602542003200f4185ebb8a07f6a220f3602502003200241f0c0aa83016a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c37036020034190016a200341a0016a200341b0016a200341c0016a20034180016a10d4808080002003280290012102200328029401210f20032802980121012003200328029c0141968293cd016a220e360258200320014188d8ddf1016a22013602542003200f41cceea1ba026a220f3602502003200241b5f9c2a5036a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341a0016a200341b0016a200341c0016a20034180016a20034190016a10d48080800020032802a001210220032802a401210f20032802a8012101200320032802ac0141b399f0c8036a220e3602582003200141cad4e2f6046a22013602542003200f41cf94f3dc056a220f3602502003200241f3dfb9c1066a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341b0016a200341c0016a20034180016a20034190016a200341a0016a10d48080800020032802b001210220032802b401210f20032802b8012101200320032802bc0141ee85bea4076a220e3602582003200141efc695c5076a22013602542003200f4194f0a1a6786a220f360250200320024188849ce6786a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d380808000200320032902543703682003200329024c370360200341c0016a20034180016a20034190016a200341a0016a200341b0016a10d48080800020032802c001210220032802c401210f20032802c8012101200320032802cc0141fafffb85796a220e3602582003200141ebd9c1a27a6a22013602542003200f41f7c7e6f77b6a220f3602502003200241f2f1c5b37c6a220236024c200341d0016a200341f0006a200341e0006a200341cc006a10d380808000200320032902d001370370200320032902d8013703782003200f3602dc01200320023602d8012003200e3602d401200320013602d001200341cc006a200341e0006a200341f0006a200341d0016a10d38080800020032003290254221c3703682003200329024c221d370360200328027c20056a2105200328027820066a2106200328027420096a21092003280270200a6a210a201ca720086a2108201da7200c6a210c200328026c20076a21072003280264200b6a210b200d21010c000b0b2000200536021c2000200636021820002007360214200020083602102000200936020c2000200a3602082000200b3602042000200c360200200341e0016a2480808080000b2501017f0240200028021022010d0041808dc0800010a081808000000b200028020420016e0bdc0101077f200020022802082204411a77200441157773200441077773200328020c6a200128020c6a20012802082205200228020c2206732004712005736a220720012802046a220836020c2000200128020022092002280204220a7320022802002202712009200a71732002411e772002411377732002410a77736a20076a220136020420002009200520032802086a20062008200620047371736a2008411a772008411577732008410777736a22046a36020820002001411e772001411377732001410a77732001200a20027371200a200271736a20046a3602000bed0101037f2000200128020822054119772005410e7773200541037673200128020c6a20032802086a20042802042206410f772006410d77732006410a76736a220636020c20002005200128020422074119772007410e77732007410376736a20032802046a20042802002205410f772005410d77732005410a76736a220536020820002007200128020022014119772001410e77732001410376736a20032802006a2006410f772006410d77732006410a76736a36020420002001200428020c6a200228020c22014119772001410e77732001410376736a2005410f772005410d77732005410a76736a3602000b2600024020012003460d0020012003200410a381808000000b20002002200110a6818080001a0b0300000b02000b10002000108581808000108e818080000b0700200041086a0b1b0020002001108d818080002002108d818080001087818080001a0b1300200041086a20002903001080818080001a0b070020002903000b3901017f23808080800041106b22032480808080002003200229020037020820002001200341086a10e980808000200341106a2480808080000b0e002000200120021082818080000b14002000200120021083818080001090818080000b5a02017f017e23808080800041106b220224808080800020022001370308420121030240200241106a2001108a81808000108e818080004120470d0020002001370308420021030b20002003370300200241106a2480808080000b6102017f017e23808080800041106b22032480808080002003200229030022041092818080000240024020032802000d00200329030821040c010b2001200410ff8080800021040b2000420037030020002004370308200341106a2480808080000b2a01017e02402002290300220342ff018342c800510d00200042013703000f0b2000200310e0808080000b130020004200370300200020012903003703080b130020004200370300200020012903003703080b0e0020002001200110e2808080000b5102017f017e23808080800041106b220324808080800020032001200210dd8080800042012104024020032802000d0020002003290308370308420021040b20002004370300200341106a2480808080000b5202017f017e23808080800041106b2203248080808000200320022903083703082003200229030037030020012003410210f98080800021042000420037030020002004370308200341106a2480808080000b0e0020002002200110e7808080000b6d02027f017e23808080800041106b220324808080800020032002280200220420022802042202108b818080000240024020032802004101470d0020012004200210fd8080800021050c010b200329030821050b2000420037030020002005370308200341106a2480808080000b02000b130020004200370300200020023100003703080b190020004200370300200020023502004220864204843703080b2e01027e4201210302402002290300220442ff018342cd00520d0020002004370308420021030b200020033703000b0e0020002001200210f9808080000b12002000200120022003200410fa808080000b12002000200120022003200410fb808080000b140020002001200220032004200510fc808080000b0c002000200110fe808080000b0e002000200120021081818080000b100020002001200220031084818080000b1200200020012002200320041086818080000b0e002000200120021088818080000b0c00200020011089818080000b070020002903000b1a002001ad4220864204842002ad4220864204841080808080000b1f00200120022003ad4220864204842004ad4220864204841081808080001a0b2e00024020022004460d00000b2001ad4220864204842003ad4220864204842002ad4220864204841082808080000b3000024020032005460d00000b20012002ad4220864204842004ad4220864204842003ad4220864204841083808080000b1a002001ad4220864204842002ad4220864204841084808080000b0a0020011085808080000b0a0020011086808080000b0a0020011087808080000b0c00200120021088808080000b0c00200120021089808080000b0c0020012002108a808080000b0e00200120022003108b808080000b0800108c808080000b10002001200220032004108d808080000b0c0020012002108e808080000b0c0020012002108f808080000b0a0020011090808080000b0a0020011091808080000bb60102017f017e23808080800041106b220324808080800002400240200241094b0d00420021040340024020020d002000410036020020002004420886420e843703080c030b200341086a20012d0000108c81808000024020032d000841ff01460d0020002003290308370204200041013602000c030b2002417f6a2102200141016a2101200442068620033100098421040c000b0b20002002360208200041003a0004200041013602000b200341106a2480808080000b830101017f410121020240200141ff017141df00460d0002400240200141506a41ff0171410a490d00200141bf7f6a41ff0171411a490d0102402001419f7f6a41ff0171411a490d00200020013a0001200041013a00000f0b200141456a21020c020b200141526a21020c010b2001414b6a21020b200041ff013a0000200020023a00010b0b002000ad4220864204840b08002000422088a70b070020004208880b070020004201510b0900428390808080010b3201017e420121020240200142ffffffffffffffff00560d0020002001420886420684370308420021020b200020023703000b1500200020014101744101722002109481808000000b4701017f23808080800041206b2203248080808000200320013602102003200036020c200341013b011c2003200236021820032003410c6a360214200341146a10d680808000000b1400200120002802002000280204109a818080000bcd0202017f017e23808080800041206b2204248080808000024002400240200020024b0d00200120024b0d01418280808000ad4220862105200020014d0d02200420003602082004200136020c200420052004410c6aad8437031820042005200441086aad84370310418080c08000200441106a2003109481808000000b200420003602082004200236020c2004418280808000ad42208622052004410c6aad8437031820042005200441086aad8437031041a880c08000200441106a2003109481808000000b200420013602082004200236020c2004418280808000ad42208622052004410c6aad8437031820042005200441086aad8437031041e180c08000200441106a2003109481808000000b200420013602082004200236020c200420052004410c6aad8437031820042005200441086aad8437031041e180c08000200441106a2003109481808000000b810602087f017e412b417f2000280208220641808080017122071b21082007411576410120011b20056a21090240024020064180808004710d00410021020c010b0240024020034110490d002002200310988180800021070c010b024020030d00410021070c010b2003410371210a4100210b41002107024020034104490d002003410c71210c4100210b41002107034020072002200b6a220d2c000041bf7f4a6a200d41016a2c000041bf7f4a6a200d41026a2c000041bf7f4a6a200d41036a2c000041bf7f4a6a2107200c200b41046a220b470d000b200a450d010b2002200b6a210d03402007200d2c000041bf7f4a6a2107200d41016a210d200a417f6a220a0d000b0b200720096a21090b2008412d20011b210c02400240200920002f010c22014f0d0002400240024020064180808008710d00200120096b210841002107410021010240024002402006411d764103710e0402000100020b200821010c010b200841feff037141017621010b200641ffffff007121092000280204210b2000280200210a0340200741ffff0371200141ffff03714f0d024101210d200741016a2107200a2009200b28021011808080800000450d000c050b0b20002000290208220ea741808080ff797141b080808002723602084101210d2000280200220a2000280204220b200c200220031099818080000d0341002107200120096b41ffff037121020340200741ffff037120024f0d024101210d200741016a2107200a4130200b28021011808080800000450d000c040b0b4101210d200a200b200c200220031099818080000d02200a20042005200b28020c118180808000000d0241002107200820016b41ffff037121000340200741ffff03712202200049210d200220004f0d03200741016a2107200a2009200b28021011808080800000450d000c030b0b4101210d200a20042005200b28020c118180808000000d012000200e37020841000f0b4101210d200028020022072000280204220a200c200220031099818080000d00200720042005200a28020c11818080800000210d0b200d0beb0601087f024002402001200041036a417c71220220006b2203490d00200120036b22044102762205450d00200441037121064100210741002101024020022000460d0041002108410021010240200020026b2209417c4b0d00410021084100210103402001200020086a22022c000041bf7f4a6a200241016a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c000041bf7f4a6a2101200841046a22080d000b0b200020086a21020340200120022c000041bf7f4a6a2101200241016a2102200941016a22090d000b0b200020036a210902402006450d002009200441fcffffff07716a22022c000041bf7f4a210720064101460d00200720022c000141bf7f4a6a210720064102460d00200720022c000241bf7f4a6a21070b200720016a21080340200921032005450d02200541c001200541c001491b22074103712106024002402007410274220441f0077122010d00410021020c010b200320016a2100410021022003210103402001410c6a2802002209417f73410776200941067672418182840871200141086a2802002209417f73410776200941067672418182840871200141046a2802002209417f7341077620094106767241818284087120012802002209417f7341077620094106767241818284087120026a6a6a6a2102200141106a22012000470d000b0b200520076b2105200320046a2109200241087641ff81fc0771200241ff81fc07716a418180046c41107620086a21082006450d000b2003200741fc01714102746a22022802002201417f734107762001410676724181828408712101024020064101460d0020022802042209417f7341077620094106767241818284087120016a210120064102460d0020022802082202417f7341077620024106767241818284087120016a21010b200141087641ff811c71200141ff81fc07716a418180046c41107620086a21080c010b024020010d0041000f0b200141037121024100210941002108024020014104490d002001417c712105410021084100210903402008200020096a22012c000041bf7f4a6a200141016a2c000041bf7f4a6a200141026a2c000041bf7f4a6a200141036a2c000041bf7f4a6a21082005200941046a2209470d000b2002450d010b200020096a21010340200820012c000041bf7f4a6a2108200141016a21012002417f6a22020d000b0b20080b3e0002402002417f460d0020002002200128021011808080800000450d0041010f0b024020030d0041000f0b200020032004200128020c118180808000000b8e0501077f024002402000280208220341808080c00171450d0002400240024002400240200341808080800171450d0020002f010e22040d01410021020c020b024020024110490d002001200210988180800021050c040b024020020d00410021050c040b200241037121064100210741002105024020024104490d002002410c712104410021054100210703402005200120076a22082c000041bf7f4a6a200841016a2c000041bf7f4a6a200841026a2c000041bf7f4a6a200841036a2c000041bf7f4a6a21052004200741046a2207470d000b2006450d040b200120076a21080340200520082c000041bf7f4a6a2105200841016a21082006417f6a22060d000c040b0b200120026a21074100210220012108200421060340200822052007460d020240024020052c00002208417f4c0d00200541016a21080c010b0240200841604f0d00200541026a21080c010b2005410441032008416f4b1b6a21080b200820056b20026a21022006417f6a22060d000b0b410021060b200420066b21050b200520002f010c22084f0d00200820056b210941002105410021040240024002402003411d764103710e0402000102020b200921040c010b200941feff037141017621040b200341ffffff00712107200028020421062000280200210002400340200541ffff0371200441ffff03714f0d0141012108200541016a2105200020072006280210118080808000000d030c000b0b41012108200020012002200628020c118180808000000d0141002105200920046b41ffff037121020340200541ffff037122042002492108200420024f0d02200541016a2105200020072006280210118080808000000d020c000b0b200028020020012002200028020428020c1181808080000021080b20080b1a00200028020020012002200028020428020c118180808000000bbf0201077f23808080800041106b2202248080808000410a21032000280200220421050240200441e807490d00410a2103200421050340200241066a20036a2206417c6a2005220020004190ce006e22054190ce006c6b220741ffff037141e4006e22084101742f00bb8dc080003b00002006417e6a2007200841e4006c6b41ffff03714101742f00bb8dc080003b00002003417c6a2103200041fface2044b0d000b0b02400240200541094b0d00200521000c010b200241066a2003417e6a22036a2005200541ffff037141e4006e220041e4006c6b41ffff03714101742f00bb8dc080003b00000b024002402004450d002000450d010b200241066a2003417f6a22036a20004101742d00bc8dc080003a00000b2001410141014100200241066a20036a410a20036b1097818080002103200241106a24808080800020030b130041908dc08000412b2000109381808000000b6e01017f23808080800041206b220524808080800020052001360204200520003602002005200336020c200520023602082005418380808000ad422086200541086aad843703182005418480808000ad4220862005ad84370310419881c08000200541106a2004109481808000000b180020002802002001200028020428020c118080808000000b130041838fc0800041332000109481808000000b1300419c8fc0800041392000109481808000000b140041b88fc0800041c3002000109481808000000b5f02017f017e23808080800041206b2203248080808000200320013602082003200036020c2003418280808000ad42208622042003410c6aad8437031820032004200341086aad8437031041f185c08000200341106a2002109481808000000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030bac07010c7f23808080800041106b210302400240200241104f0d00200021040c010b024020002000410020006b41037122056a22064f0d002005417f6a2107200021042001210802402005450d002005210920002104200121080340200420082d00003a0000200841016a2108200441016a21042009417f6a22090d000b0b20074107490d000340200420082d00003a0000200441016a200841016a2d00003a0000200441026a200841026a2d00003a0000200441036a200841036a2d00003a0000200441046a200841046a2d00003a0000200441056a200841056a2d00003a0000200441066a200841066a2d00003a0000200441076a200841076a2d00003a0000200841086a2108200441086a22042006470d000b0b2006200220056b2209417c7122076a210402400240200120056a220841037122010d00200620044f0d0120082101034020062001280200360200200141046a2101200641046a22062004490d000c020b0b410021022003410036020c2003410c6a20017221050240410420016b220a410171450d00200520082d00003a0000410121020b0240200a410271450d00200520026a200820026a2f01003b01000b200820016b21052001410374210b200328020c210a0240200641046a20044f0d004100200b6b411871210c034020062202200a200b76200541046a2205280200220a200c7472360200200241046a2106200241086a2004490d000b0b41002102200341003a0008200341003a00060240024020014101470d00200341086a210d410021014100210c4100210e0c010b200541056a2d0000210c2003200541046a2d000022013a0008200c410874210c4102210e200341066a210d0b02402008410171450d00200d200541046a200e6a2d00003a000020032d0006411074210220032d000821010b2006200c200272200141ff0171724100200b6b41187174200a200b76723602000b20094103712102200820076a21010b02402004200420026a22064f0d002002417f6a2109024020024107712208450d000340200420012d00003a0000200141016a2101200441016a21042008417f6a22080d000b0b20094107490d000340200420012d00003a0000200441016a200141016a2d00003a0000200441026a200141026a2d00003a0000200441036a200141036a2d00003a0000200441046a200141046a2d00003a0000200441056a200141056a2d00003a0000200441066a200141066a2d00003a0000200441076a200141076a2d00003a0000200141086a2101200441086a22042006470d000b0b20000b0e0020002001200210a5818080000baa0301057f02400240200241104f0d00200021030c010b024020002000410020006b41037122046a22054f0d002004417f6a21062000210302402004450d0020042107200021030340200320013a0000200341016a21032007417f6a22070d000b0b20064107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032005470d000b0b024020052005200220046b2202417c716a22034f0d00200141ff017141818284086c2107034020052007360200200541046a22052003490d000b0b200241037121020b02402003200320026a22074f0d002002417f6a2104024020024107712205450d000340200320013a0000200341016a21032005417f6a22050d000b0b20044107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032007470d000b0b20000b0be30f0100418080c0000bd90f16736c69636520696e6465782073746172747320617420c00d2062757420656e647320617420c0001272616e676520737461727420696e64657820c022206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820c0001072616e676520656e6420696e64657820c022206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820c000c0023a20c0002f55736572732f696e686f757365636f6465732f2e7275737475702f746f6f6c636861696e732f737461626c652d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f697465722e7273002f55736572732f696e686f757365636f6465732f2e7275737475702f746f6f6c636861696e732f737461626c652d616172636836342d6170706c652d64617277696e2f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f6f70732f66756e6374696f6e2e7273002f55736572732f696e686f757365636f6465732f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f736861322d302e31302e392f7372632f636f72655f6170692e7273002f55736572732f696e686f757365636f6465732f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f6469676573742d302e31302e372f7372632f636f72655f6170692f63745f7661726961626c652e727300636f6e7472616374732f726563656970742d73686172642f7372632f6c69622e7273002f55736572732f696e686f757365636f6465732f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f626c6f636b2d6275666665722d302e31302e342f7372632f6c69622e72730026636f70795f66726f6d5f736c6963653a20736f7572636520736c696365206c656e6774682028c02b2920646f6573206e6f74206d617463682064657374696e6174696f6e20736c696365206c656e6774682028c00129000000008902100067000000a4000000180000008902100067000000a4000000200000008902100067000000ae0000001a00000089021000670000002d010000220000008902100067000000380100001e000000890210006700000035010000180000000000000000000000010000000100000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c75650066021000220000009f000000200000006602100022000000a00000002000000066021000220000009c0000002000000066021000220000009d00000020000000000000000000000000000000000000006602100022000000e90000003800000066021000220000005d0000004e000000010000000000000000000000000000006602100022000000640000000e000000020000000000000000000000000000006602100022000000650000004b00000062617463685f6964206f7574206f662073686172642072616e6765006602100022000000660000000900000000000000040000000000000000000000000000006602100022000000c20000004e0000006602100022000000c5000000540000006602100022000000c8000000520000006602100022000000f3000000120000006602100022000000f400000040000000526f7574657200002805100006000000537461727442617463684964380510000c000000456e644261746368496400004c0510000a000000426174636800000060051000050000005072756e65645570546f0000700510000a0000008e0110006400000024000000090000009e001000760000000b08000011000000436f6e76657273696f6e4572726f72616e63686f7265645f6c6564676572636f756e74706572696f645f656e64706572696f645f7374617274726f6f74000000b30510000f000000c205100005000000c70510000a000000d10510000c000000dd051000040000008e011000640000003e000000360000008e011000640000003e000000170000008e0110006400000042000000130000000000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68059babd9831f19cde05bf3011000720000007c000000240000001501100078000000fa000000050000009e001000760000006f0700001100000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75653030303130323033303430353036303730383039313031313132313331343135313631373138313932303231323232333234323532363237323832393330333133323333333433353336333733383339343034313432343334343435343634373438343935303531353235333534353535363537353835393630363136323633363436353636363736383639373037313732373337343735373637373738373938303831383238333834383538363837383838393930393139323933393439353936393739383939617474656d707420746f20646976696465206279207a65726f617474656d707420746f206164642077697468206f766572666c6f77617474656d707420746f206d756c7469706c792077697468206f766572666c6f77009f020e636f6e74726163746d657461763000000000000000046e616d650000000c52656365697074536861726400000000000000047265706f0000002c68747470733a2f2f6769746875622e636f6d2f616363656e73612f616363656e73612d636f6e7472616374730000000000000006636f6d6d697400000000002832333264323835363130363161396633393832663665353538653432353436333437653763306230000000000000000776657273696f6e0000000005302e312e300000000000000000000005727376657200000000000006312e39372e3100000000000000000008727373646b7665720000002f32372e302e36233630393236613230643166396630613636396435666535353136333666343261313330326630633000008b120e636f6e747261637473706563763000000002000000000000000000000007446174614b65790000000005000000000000000000000006526f75746572000000000000000000000000000c53746172744261746368496400000000000000000000000a456e644261746368496400000000000100000000000000054261746368000000000000010000000600000000000000000000000a5072756e65645570546f0000000000010000011a5374727563747572616c6c79206964656e746963616c20746f206052656365697074416e63686f723a3a42617463685265636f7264602e20536f726f62616e2063726f73732d636f6e74726163740a63616c6c73206465636f646520627920736861706520286669656c64206e616d65732c2074797065732c20616e64206f72646572292c206e6f74206279205275737420747970650a6964656e746974792c20736f207468652074776f20696e646570656e64656e746c7920646566696e65642073747275637473207374617920776972652d636f6d70617469626c652061730a6c6f6e67206173207468697320736861706520646f65736e27742064726966742066726f6d2074686520726f75746572277320636f70792e0000000000000000000b42617463685265636f72640000000005000000000000000f616e63686f7265645f6c656467657200000000040000000000000005636f756e7400000000000004000000000000000a706572696f645f656e64000000000006000000000000000c706572696f645f7374617274000000060000000000000004726f6f74000003ee000000200000000000000000000000096765745f626174636800000000000001000000000000000862617463685f69640000000600000001000003e9000007d00000000b42617463685265636f72640000000003000000000000004f52657475726e7320602873746172745f62617463685f69642c20656e645f62617463685f696429602c2074686520736861726427732061737369676e65640a68616c662d6f70656e2072616e67652e00000000096765745f72616e67650000000000000000000001000003ed00000002000000060000000600000000000000000000000a6765745f726f75746572000000000000000000010000001300000000000000f2577269746573206120626174636820616e63686f7265642062792074686520726f757465722e206062617463685f696460206d7573742066616c6c20696e20746869730a736861726427732061737369676e656420605b73746172742c20656e6429602072616e676520e280942074686520726f7574657220697320736f6c656c790a726573706f6e7369626c6520666f7220636f6d707574696e67207468617420636f72726563746c792c20736f20612076696f6c6174696f6e2068657265206d65616e7320610a726f75746572206275672c206e6f742061207265636f76657261626c652075736572206572726f722e00000000000c616e63686f725f626174636800000005000000000000000862617463685f6964000000060000000000000004726f6f74000003ee000000200000000000000005636f756e7400000000000004000000000000000c706572696f645f737461727400000006000000000000000a706572696f645f656e6400000000000600000000000000000000007852756e732061746f6d6963616c6c79207769746820606465706c6f795f7632602c20736f2061207368617264206973206e65766572206f627365727661626c6520696e20616e0a756e696e697469616c697a6564207374617465206265747765656e206465706c6f796d656e7420616e642073657475702e0000000d5f5f636f6e7374727563746f72000000000000030000000000000006726f75746572000000000013000000000000000e73746172745f62617463685f6964000000000006000000000000000c656e645f62617463685f69640000000600000000000000000000022044656c6574657320626174636865732066726f6d20746869732073686172642773206c6f63616c20605072756e65645570546f6020637572736f7220666f72776172642c0a73746f7070696e6720617420746865206669727374206261746368206e6f7420796574206f6c6420656e6f7567682c2060686967685f77617465725f62617463685f6964600a286e65766572207072756e65206168656164206f6620776861742074686520726f75746572206861732061637475616c6c79207772697474656e292c206f720a606d61785f62617463686573602064656c6574696f6e7320e280942077686963686576657220636f6d65732066697273742e2052657475726e732074686520616476616e6365640a637572736f7220616e6420686f77206d616e7920626174636865732077657265207072756e65642c20736f2074686520726f757465722063616e206465636964650a7768657468657220746f206b65657020676f696e672077697468696e2074686973207368617264206f72206d6f766520746f20746865206e657874206f6e652e0a0a526f757465722d67617465643a207072756e696e67206f72646572206973206120726f757465722d6c6576656c20696e76617269616e7420286120636f6e746967756f75730a676c6f62616c20707265666978292c20736f206f6e6c792074686520726f75746572206d617920616476616e63652074686973207368617264277320637572736f722e0000000d7072756e655f6261746368657300000000000003000000000000000d6265666f72655f6c656467657200000000000004000000000000000b6d61785f6261746368657300000000040000000000000013686967685f77617465725f62617463685f6964000000000600000001000003ed00000002000000060000000600000000000000000000000e7665726966795f72656365697074000000000003000000000000000862617463685f69640000000600000000000000046c656166000003ee00000020000000000000000570726f6f66000000000003ea000003ee0000002000000001000003e90000000100000003000000000000000000000010657874656e645f62617463685f74746c00000001000000000000000862617463685f69640000000600000001000003e90000000200000003001e11636f6e7472616374656e766d6574617630000000000000001b00000000" + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/cannot_execute_twice.1.json b/contracts/governance/test_snapshots/test/cannot_execute_twice.1.json new file mode 100644 index 00000000..d24e7930 --- /dev/null +++ b/contracts/governance/test_snapshots/test/cannot_execute_twice.1.json @@ -0,0 +1,601 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 1 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 1 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "set_value" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "4" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "value" + }, + "val": { + "u32": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/cannot_vote_twice.1.json b/contracts/governance/test_snapshots/test/cannot_vote_twice.1.json new file mode 100644 index 00000000..0c32cc1f --- /dev/null +++ b/contracts/governance/test_snapshots/test/cannot_vote_twice.1.json @@ -0,0 +1,446 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 1 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 1 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "set_value" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "1" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/constructor_rejects_mismatched_lengths.1.json b/contracts/governance/test_snapshots/test/constructor_rejects_mismatched_lengths.1.json new file mode 100644 index 00000000..014503b0 --- /dev/null +++ b/contracts/governance/test_snapshots/test/constructor_rejects_mismatched_lengths.1.json @@ -0,0 +1,60 @@ +{ + "generators": { + "address": 2, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/constructor_rejects_zero_threshold.1.json b/contracts/governance/test_snapshots/test/constructor_rejects_zero_threshold.1.json new file mode 100644 index 00000000..014503b0 --- /dev/null +++ b/contracts/governance/test_snapshots/test/constructor_rejects_zero_threshold.1.json @@ -0,0 +1,60 @@ +{ + "generators": { + "address": 2, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/constructor_rejects_zero_voting_period.1.json b/contracts/governance/test_snapshots/test/constructor_rejects_zero_voting_period.1.json new file mode 100644 index 00000000..014503b0 --- /dev/null +++ b/contracts/governance/test_snapshots/test/constructor_rejects_zero_voting_period.1.json @@ -0,0 +1,60 @@ +{ + "generators": { + "address": 2, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": null + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/no_votes_can_outweigh_a_stale_quorum.1.json b/contracts/governance/test_snapshots/test/no_votes_can_outweigh_a_stale_quorum.1.json new file mode 100644 index 00000000..25131acb --- /dev/null +++ b/contracts/governance/test_snapshots/test/no_votes_can_outweigh_a_stale_quorum.1.json @@ -0,0 +1,592 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 1 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "1" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": "1" + }, + { + "bool": false + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 1 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "set_value" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "2" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/non_member_cannot_propose.1.json b/contracts/governance/test_snapshots/test/non_member_cannot_propose.1.json new file mode 100644 index 00000000..23c0f192 --- /dev/null +++ b/contracts/governance/test_snapshots/test/non_member_cannot_propose.1.json @@ -0,0 +1,225 @@ +{ + "generators": { + "address": 6, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/prune_rejects_active_proposal_then_succeeds_once_expired.1.json b/contracts/governance/test_snapshots/test/prune_rejects_active_proposal_then_succeeds_once_expired.1.json new file mode 100644 index 00000000..f49cdcb1 --- /dev/null +++ b/contracts/governance/test_snapshots/test/prune_rejects_active_proposal_then_succeeds_once_expired.1.json @@ -0,0 +1,279 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 1 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 101, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/prune_succeeds_immediately_after_execution.1.json b/contracts/governance/test_snapshots/test/prune_succeeds_immediately_after_execution.1.json new file mode 100644 index 00000000..e577c423 --- /dev/null +++ b/contracts/governance/test_snapshots/test/prune_succeeds_immediately_after_execution.1.json @@ -0,0 +1,506 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 1 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "value" + }, + "val": { + "u32": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/quorum_below_threshold_blocks_execution.1.json b/contracts/governance/test_snapshots/test/quorum_below_threshold_blocks_execution.1.json new file mode 100644 index 00000000..3c5ef480 --- /dev/null +++ b/contracts/governance/test_snapshots/test/quorum_below_threshold_blocks_execution.1.json @@ -0,0 +1,446 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 7 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 7 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "set_value" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "2" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/quorum_met_executes_and_authorizes_governed_call.1.json b/contracts/governance/test_snapshots/test/quorum_met_executes_and_authorizes_governed_call.1.json new file mode 100644 index 00000000..4cee3b34 --- /dev/null +++ b/contracts/governance/test_snapshots/test/quorum_met_executes_and_authorizes_governed_call.1.json @@ -0,0 +1,529 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 42 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "vote", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "u64": "1" + }, + { + "bool": true + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 42 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "set_value" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "3" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Voted" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 100 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "value" + }, + "val": { + "u32": 42 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/test_snapshots/test/voting_closes_after_deadline.1.json b/contracts/governance/test_snapshots/test/voting_closes_after_deadline.1.json new file mode 100644 index 00000000..c8740213 --- /dev/null +++ b/contracts/governance/test_snapshots/test/voting_closes_after_deadline.1.json @@ -0,0 +1,373 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "function_name": "propose", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "symbol": "set_value" + }, + { + "vec": [ + { + "u32": 1 + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 27, + "sequence_number": 101, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "1" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Member" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u64": "2" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "vec": [ + { + "symbol": "Proposal" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "args" + }, + "val": { + "vec": [ + { + "u32": 1 + } + ] + } + }, + { + "key": { + "symbol": "deadline_ledger" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "executed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "function" + }, + "val": { + "symbol": "set_value" + } + }, + { + "key": { + "symbol": "no_weight" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "proposer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "target" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "yes_weight" + }, + "val": { + "u64": "0" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "ProposalCount" + } + ] + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ThresholdBps" + } + ] + }, + "val": { + "u32": 6000 + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalWeight" + } + ] + }, + "val": { + "u64": "4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "VotingPeriod" + } + ] + }, + "val": { + "u32": 100 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contracts/governance/tests/receipt_anchor_admin.rs b/contracts/governance/tests/receipt_anchor_admin.rs new file mode 100644 index 00000000..7a37d597 --- /dev/null +++ b/contracts/governance/tests/receipt_anchor_admin.rs @@ -0,0 +1,201 @@ +//! Governance as `ReceiptAnchor`'s admin — closes the single-admin-key SPOF +//! (see `docs/SECURITY_MODEL.md`) for the merchant-gated calls that +//! genuinely exist on the contract (`set_min_anchor_interval`, +//! `anchor_batch`, `prune_batches`). `ReceiptAnchor` has no upgrade entry +//! point (see `docs/ADR-003-upgradeability.md`, accepted: both contracts are +//! deliberately immutable), so there is nothing to gate there — this +//! exercises the admin surface that actually exists. +//! +//! `ReceiptAnchor::initialize` accepts any `Address` as merchant, including +//! a contract's (`multisig_admin_anchor.rs` already proves this with a +//! `MultisigAccount`). These tests initialize it with a `Governance` +//! instance instead and drive `set_min_anchor_interval`/`prune_batches` +//! through `propose`/`vote`/`execute`, with **no change to `ReceiptAnchor` +//! itself**: `execute`'s nested call satisfies `merchant.require_auth()` +//! because the host auto-authorizes a contract's own address when that +//! contract is the direct caller — the same mechanism `ReceiptAnchor` +//! already relies on for its `MultisigAccount` admin. +//! +//! No `mock_all_auths()`: member votes use real, explicit auth entries +//! (`mock_auths`) so the tests prove a specific weighted quorum is required, +//! and `execute` itself runs with **no auth entries at all** — proving the +//! self-authorization path is real, not a testing artifact. + +use governance::{Governance, GovernanceClient}; +use receipt_anchor::{ReceiptAnchor, ReceiptAnchorClient}; +use soroban_sdk::{ + testutils::{Address as _, MockAuth, MockAuthInvoke}, + Address, BytesN, Env, IntoVal, Symbol, Vec, +}; + +/// The `ReceiptShard` wasm, built by `cargo build -p receipt-shard --target +/// wasm32v1-none --release` before these tests run (see `.github/workflows/ci.yml`). +mod shard_wasm { + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/receipt_shard.wasm"); +} + +/// Two members, weighted 1/1, 100% quorum (both must vote yes), a +/// 1000-ledger voting window. `ReceiptAnchor` is initialized with the +/// governance contract as merchant. +fn setup() -> ( + Env, + GovernanceClient<'static>, + ReceiptAnchorClient<'static>, + Address, + Address, + Address, +) { + let env = Env::default(); + + let m1 = Address::generate(&env); + let m2 = Address::generate(&env); + + let members = Vec::from_array(&env, [m1.clone(), m2.clone()]); + let weights = Vec::from_array(&env, [1u64, 1u64]); + let gov_id = env.register(Governance, (members, weights, 10_000u32, 1000u32)); + let gov = GovernanceClient::new(&env, &gov_id); + + let anchor_id = env.register(ReceiptAnchor, ()); + let anchor = ReceiptAnchorClient::new(&env, &anchor_id); + // `initialize` is not auth-gated, so it needs no auth entries. + let shard_wasm_hash = env.deployer().upload_contract_wasm(shard_wasm::WASM); + anchor.initialize(&gov_id.clone(), &shard_wasm_hash); + + (env, gov, anchor, gov_id, m1, m2) +} + +/// Mock a real auth entry for `voter` calling `gov::vote(voter, proposal_id, support)`. +fn mock_vote_auth(env: &Env, gov_id: &Address, voter: &Address, proposal_id: u64, support: bool) { + let args = soroban_sdk::vec![ + env, + voter.into_val(env), + proposal_id.into_val(env), + support.into_val(env), + ]; + env.mock_auths(&[MockAuth { + address: voter, + invoke: &MockAuthInvoke { + contract: gov_id, + fn_name: "vote", + args, + sub_invokes: &[], + }, + }]); +} + +/// Mock a real auth entry for `proposer` calling +/// `gov::propose(proposer, target, function, args)`. +fn mock_propose_auth( + env: &Env, + gov_id: &Address, + proposer: &Address, + target: &Address, + function: &Symbol, + call_args: &Vec, +) { + let args = soroban_sdk::vec![ + env, + proposer.into_val(env), + target.into_val(env), + function.into_val(env), + call_args.into_val(env), + ]; + env.mock_auths(&[MockAuth { + address: proposer, + invoke: &MockAuthInvoke { + contract: gov_id, + fn_name: "propose", + args, + sub_invokes: &[], + }, + }]); +} + +/// A quorum of governance votes gates `set_min_anchor_interval`; once +/// passed, `execute` applies it with no auth entries of its own. +#[test] +fn set_min_anchor_interval_requires_full_quorum_then_executes() { + let (env, gov, anchor, gov_id, m1, m2) = setup(); + + let function = Symbol::new(&env, "set_min_anchor_interval"); + let call_args = Vec::from_array(&env, [3600u32.into_val(&env)]); + + mock_propose_auth(&env, &gov_id, &m1, &anchor.address, &function, &call_args); + let id = gov.propose(&m1, &anchor.address, &function, &call_args); + + mock_vote_auth(&env, &gov_id, &m1, id, true); + gov.vote(&m1, &id, &true); + + // Only one of two votes is in: 50% of 100% required quorum. + env.set_auths(&[]); + assert!( + gov.try_execute(&id).is_err(), + "must not execute below the configured quorum" + ); + + mock_vote_auth(&env, &gov_id, &m2, id, true); + gov.vote(&m2, &id, &true); + + // `execute` needs no auth entries at all — the governed call's + // `merchant.require_auth()` is satisfied by the host's own + // self-authorization rule for the governance contract's address. + env.set_auths(&[]); + gov.execute(&id); + + assert_eq!(anchor.get_min_anchor_interval(), 3600); +} + +/// `anchor_batch` and `prune_batches` — both merchant-gated — also run only +/// once governance has approved them, end to end. +#[test] +fn anchor_and_prune_run_through_governance() { + let (env, gov, anchor, gov_id, m1, m2) = setup(); + let root = BytesN::from_array(&env, &[9u8; 32]); + + let anchor_fn = Symbol::new(&env, "anchor_batch"); + let anchor_args = Vec::from_array( + &env, + [ + root.into_val(&env), + 10u32.into_val(&env), + 100u64.into_val(&env), + 200u64.into_val(&env), + ], + ); + + mock_propose_auth( + &env, + &gov_id, + &m1, + &anchor.address, + &anchor_fn, + &anchor_args, + ); + let anchor_proposal = gov.propose(&m1, &anchor.address, &anchor_fn, &anchor_args); + mock_vote_auth(&env, &gov_id, &m1, anchor_proposal, true); + gov.vote(&m1, &anchor_proposal, &true); + mock_vote_auth(&env, &gov_id, &m2, anchor_proposal, true); + gov.vote(&m2, &anchor_proposal, &true); + env.set_auths(&[]); + gov.execute(&anchor_proposal); + + let batch = anchor.get_batch(&1); + assert_eq!(batch.count, 10, "the anchored batch must be stored"); + + let prune_fn = Symbol::new(&env, "prune_batches"); + let prune_args = Vec::from_array(&env, [1_000_000u32.into_val(&env)]); + + mock_propose_auth(&env, &gov_id, &m2, &anchor.address, &prune_fn, &prune_args); + let prune_proposal = gov.propose(&m2, &anchor.address, &prune_fn, &prune_args); + mock_vote_auth(&env, &gov_id, &m1, prune_proposal, true); + gov.vote(&m1, &prune_proposal, &true); + mock_vote_auth(&env, &gov_id, &m2, prune_proposal, true); + gov.vote(&m2, &prune_proposal, &true); + env.set_auths(&[]); + gov.execute(&prune_proposal); + + assert!( + anchor.try_get_batch(&1).is_err(), + "the pruned batch must be gone" + ); +} diff --git a/contracts/receipt-anchor/Cargo.toml b/contracts/receipt-anchor/Cargo.toml index 095b312b..6b833cb2 100644 --- a/contracts/receipt-anchor/Cargo.toml +++ b/contracts/receipt-anchor/Cargo.toml @@ -24,6 +24,15 @@ budget-assert = ["dep:budget_macros"] soroban-sdk = { workspace = true } accensa-common = { workspace = true } sha2 = { version = "0.10.9", default-features = false } +# Tollcraft/soroban-budget-assert — Tier A local assertion macros, used only +# by the `#[cfg(test)]`-gated `budget_test` module. Cargo does not allow +# optional *dev*-dependencies, so this lives here, optional, gated by the +# `budget-assert` feature; it never links into a real (non-test) build. +# Pinned to a stable ref; the macros read `env.cost_estimate().budget()` on +# the WASM-mode estimate and fail the test if the pinned limit is exceeded. +# NOTE: pin this to a released tag (e.g. `tag = "v0.1.0"`) once a tag exists; +# `main` is used here so the dependency always resolves. +budget_macros = { git = "https://github.com/Tollcraft/soroban-budget-assert.git", branch = "main", package = "budget-macros", optional = true } [dev-dependencies] multisig-account = { path = "../multisig-account", features = ["testutils"] } @@ -35,10 +44,3 @@ soroban-sdk = { workspace = true, features = ["testutils"] } # crate's generated functions into a native test binary creates no symbol # collisions with receipt-anchor's own same-named functions. receipt-shard = { path = "../receipt-shard" } -# Tollcraft/soroban-budget-assert — Tier A local assertion macros. Pinned to a -# stable ref; the macros read `env.cost_estimate().budget()` on the WASM-mode -# estimate and fail the test if the pinned limit is exceeded. Optional so it is -# only compiled when the `budget-assert` feature is on. -# NOTE: pin this to a released tag (e.g. `tag = "v0.1.0"`) once a tag exists; -# `main` is used here so the dependency always resolves. -budget_macros = { git = "https://github.com/Tollcraft/soroban-budget-assert.git", branch = "main", package = "budget-macros", optional = true } diff --git a/contracts/receipt-anchor/src/test.rs b/contracts/receipt-anchor/src/test.rs index f6c62785..2792266a 100644 --- a/contracts/receipt-anchor/src/test.rs +++ b/contracts/receipt-anchor/src/test.rs @@ -452,7 +452,8 @@ fn test_shared_vectors_cover_required_edge_cases() { // shared fixture, the cross-implementation proof-of-parity is no longer // proving what it claims to. Names are matched by substring so the suite // keeps working as vectors are renamed. - let names: Vec<&str> = vectors::VECTORS.iter().map(|v| v.name).collect(); + extern crate std; + let names: std::vec::Vec<&str> = vectors::VECTORS.iter().map(|v| v.name).collect(); let has = |needle: &str| { assert!( names.iter().any(|n| n.contains(needle)), diff --git a/contracts/refund-vault/Cargo.toml b/contracts/refund-vault/Cargo.toml index 12408157..9e3f89a3 100644 --- a/contracts/refund-vault/Cargo.toml +++ b/contracts/refund-vault/Cargo.toml @@ -28,16 +28,18 @@ accensa-common = { workspace = true } # this adds no new crates; `default-features = false` keeps it no_std / no # rand. Pure RustCrypto code, no_std, wasm32-compatible. crypto-bigint = { version = "0.5.5", default-features = false } +# Tollcraft/soroban-budget-assert — Tier A local assertion macros, used only +# by the `#[cfg(test)]`-gated budget-assertion module. Cargo does not allow +# optional *dev*-dependencies, so this lives here, optional, gated by the +# `budget-assert` feature; it never links into a real (non-test) build. +# Pinned to a stable ref; the macros read `env.cost_estimate().budget()` on +# the WASM-mode estimate and fail the test if the pinned limit is exceeded. +# NOTE: pin this to a released tag (e.g. `tag = "v0.1.0"`) once a tag exists; +# `main` is used here so the dependency always resolves. +budget_macros = { git = "https://github.com/Tollcraft/soroban-budget-assert.git", branch = "main", package = "budget-macros", optional = true } [dev-dependencies] multisig-account = { path = "../multisig-account", features = ["testutils"] } proptest = "1.4" soroban-sdk = { workspace = true, features = ["testutils"] } receipt-anchor = { path = "../receipt-anchor" } -# Tollcraft/soroban-budget-assert — Tier A local assertion macros. Pinned to a -# stable ref; the macros read `env.cost_estimate().budget()` on the WASM-mode -# estimate and fail the test if the pinned limit is exceeded. Optional so it is -# only compiled when the `budget-assert` feature is on. -# NOTE: pin this to a released tag (e.g. `tag = "v0.1.0"`) once a tag exists; -# `main` is used here so the dependency always resolves. -budget_macros = { git = "https://github.com/Tollcraft/soroban-budget-assert.git", branch = "main", package = "budget-macros", optional = true }