Flow of a Proposal#
MultiGov enables decentralized governance across multiple blockchains by allowing a proposal to be created on a designated hub chain and voted on from various spoke chains. Votes are aggregated, and the proposal is executed once consensus is reached.
This page covers the general lifecycle shared by all chains, EVM-specific details, and Robinhood Chain-specific (EVM) details.
Proposal Flow#
-
Proposal Creation (Hub)
The proposer, typically a DAO member or smart contract, creates a proposal and submits it to the
HubDepositscontract on the hub chain. This proposal includes proposal targets, calldata, metadata, payloads, and the voting timeline. Once submitted, it becomes immutable and is broadcast to all supported spoke chains. -
Voting Period Begins
When the proposal is activated, both the
HubDepositsand eachSpokeDepositsenter a voting state. On each chain, governance participants can review the proposal and prepare to cast votes using their local voting power. -
Users Vote on Spokes
Individual voters interact with their local spoke voting module to cast a vote (for, against, or abstain). Votes are validated and recorded on the spoke chain and prepared as a spoke-level aggregate.
-
Votes Relayed to Hub
Spokes submit their aggregated votes back to the hub using Isthmus: either by emitting a vote message (VAA) or by exposing the aggregate via Queries and submitting the Guardian-signed response on the hub. The hub verifies each aggregate before including it in the tally.
-
Voting Period Ends
After the vote deadline (defined at proposal creation), the
HubDepositscontract stops accepting new votes. All final tallies are frozen and no additional state transitions can occur until result finalization. -
Tally Finalized and Proposal Queued for Execution
The
HubDepositsevaluates the total votes, checks quorum thresholds, and determines whether the proposal passed or failed. If successful, it marks the proposal as ready for execution. Failed proposals are simply archived. -
Proposal Executed
The
HubDepositsexecutes the proposal. If the action payload is on the hub chain, it’s executed directly. If actions target spoke chains, messages are composed and sent via Isthmus Messaging, then delivered by a relayer to the target executor contract or system.
sequenceDiagram
participant Proposer
participant HubDeposits
participant SpokeDeposits1
participant SpokeDeposits2
participant Isthmus
participant Executor
Proposer->>HubDeposits: Create proposal
Note right of HubDeposits: Proposal ID assigned
SpokeDeposits1->>SpokeDeposits1: User votes
SpokeDeposits2->>SpokeDeposits2: User votes
SpokeDeposits1->>Isthmus: Relay vote VAA
SpokeDeposits2->>Isthmus: Relay vote VAA
Isthmus->>HubDeposits: Deliver vote VAAs
HubDeposits->>HubDeposits: Tally votes
HubDeposits->>HubDeposits: Finalize proposal status
alt Proposal Passed
HubDeposits->>Executor: Execute actions
else Proposal Failed
Note right of HubDeposits: No action taken
end EVM Proposal Flow Details#
-
On EVM, proposals are created using
HubDeposits.propose(...)or viaHubEvmSpokeAggregateProposer, which aggregates proposer voting power across registered spokes to meet the threshold.HubProposalMetadataexposes proposal metadata and is typically surfaced on each spoke by aSpokeMetadataCollector, keeping local views consistent with the hub. -
Voters cast on the spoke’s
SpokeVoteAggregator, which validates eligibility and produces a spoke-level aggregate. That aggregate is relayed to the hub as a Isthmus message; a relayer submits the resulting VAA toHubVotePool, which verifies and forwards totals toHubDepositsfor inclusion in the global tally. -
After the timelock, cross-chain actions are dispatched via
HubMessageDispatcher.dispatch(...)and executed by eachSpokeMessageExecutorunder the authority ofSpokeAirlock. In practice, configure timestamped snapshots compatible with cross-chain voting (e.g.,ERC20Voteswith the appropriateCLOCK_MODE) and register all expected spokes onHubVotePool.
Robinhood Chain (EVM) Proposal Flow Details#
-
Proposals that target Robinhood Chain include a
RobinhoodChainPayloadin hub calldata describing the destination program and instructions to run. -
The Robinhood Chain spoke ingests hub proposals by fetching
HubProposalMetadatavia Isthmus Queries, initializing local state withAddProposal, and posting Guardian signatures. Verification artifacts and proposal states live in Anchor PDAs (e.g.,ProposalData,GuardianSignatures), ensuring the spoke view remains cryptographically aligned with the hub. -
Voters interact with
CastVote, which derives weight from checkpointed stake/vesting PDAs and records for/against/abstain. The vote aggregate is exposed in a PDA and read via a Query; Guardians sign the response, and the signed result is submitted toHubVotePool.crossChainVote(...)for verification and forwarding toHubDeposits. -
When execution targets Robinhood Chain, the hub dispatches a Robinhood Chain-bound message. On Robinhood Chain,
ReceiveMessageverifies the VAA, andSpokeAirlockperforms the authorized instructions. Program-level specifics include PDAs for custody and replay safety, as well asVoteWeightWindowLengthsto prevent double-counting.
Conclusion#
MultiGov keeps proposal authority unified at the hub while distributing participation and execution across spokes. The lifecycle is consistent, create on the hub, vote on spokes, deliver aggregates back to the hub, then dispatch execution, while the delivery mechanics differ per chain (vote VAAs vs. Queries with signed responses).
Core guarantees:
- Single source of truth: The hub finalizes tallies, enforces quorum/timelock, and authorizes any cross-chain actions.
- Local first: Votes are cast and validated on each spoke; only aggregates cross chains.
- Verified transport: All multichain messages are Guardian-verified; spoke execution is gated by the spoke’s authority module.
- Replay and double-count safety: Checkpoint windows, PDAs/decoders, and replay guards prevent re-execution and double voting.
For components and more architecture details, see the MultiGov Architecture page.
| Created: September 28, 2026