Docs
Protocols
DKG
Governance
Global Proposals

Global Governance Proposals

This page provides an overview of Webb global governance specific proposals, the proposal structure and the intended use.

Collectively, there are 4 distinct global governance proposals as you can see from the table below. A proposal simply is a message that is voted on which suggests a change in the merkle roots or system. Proposals can be unsigned and unsigned. Below are all global governance proposals that the DKG protocol handles.

ProposalsDescription
Refresh (Governance)Proposal to refresh a contract's governor
AnchorUpdate (Governance)Proposal to update merkle roots
ResourceIdUpdate (Governance)Proposal to add/update a resource ID
ProposalSetUpdate (Governance)Proposal to update the latest proposer set state

Definitions

Typed Chain ID

A unique Webb-specific chain identifier that is composed of a chain / virtual machine type and the respective identifier.
Size: 6 bytes

Target System

Relevant for identifying the actual resource / system / contract that is being targeted in the proposal lifecycle.
Size: 26 bytes

Resource ID

Relevant for identifying the system the proposal is being executed on and interacting with. The resource ID contains the target system and the target chain ID to be communicated with.
Size: 32 bytes
Structure: (TargetSystem, TypedChainId)

FunctionSig

Relevant for EVM networks where call data is generic and not directly executable at a specific function.
Size: 4 bytes

Nonce

Relevant for tracking updates to contracts.
Size: 4 bytes

Proposal Header

Size: 40 bytes
Structure: (**Resource ID, FunctionSig, Nonce)

Proposals

AnchorUpdateProposal

ProtocolDocByte SizeArguments
EVMProposal Docs (opens in a new tab)Total Size: 104 bytes1. ProposalHeader (40 bytes)
2. Merkle root (32 bytes)
3. Source ResourceID (32 bytes)
SubstrateProposal Docs (opens in a new tab)Total Size: ≥ 40 bytesEncoded call (opens in a new tab)
1. ProposalHeader (40 bytes)
2. Merkle root (32 bytes)
3. Source ResourceID (32 bytes)
CosmwasmProposal Docs (opens in a new tab)Total Size: ≥ 40 bytesEncoded call (opens in a new tab)
1. ProposalHeader (40 bytes)
2. Merkle root (32 bytes)
3. Source ResourceID (32 bytes)
ink!Proposal Docs (opens in a new tab)Total Size: ≥ 40 bytesEncoded call (opens in a new tab)
1. ProposalHeader (40 bytes)
2. Merkle root (32 bytes)
3. Source ResourceID (32 bytes)

ResourceIdUpdateProposal

ProtocolDocByte SizeArguments
EVMProposal Docs (opens in a new tab)Total Size: 92 bytes1. ProposalHeader (40 bytes)
2. New resource ID (32 bytes)
3. Handler address (20 bytes)
SubstrateProposal Docs (opens in a new tab)Total Size: ≥ 40 bytesEncoded call for a specific handler pallet
1. VAnchor handler pallet call (opens in a new tab)
CosmwasmProposal Docs (opens in a new tab)Total Size: ≥ 40 bytesEncoded call (opens in a new tab)
1. ProposalHeader (40 bytes)
2. New resource ID (32 bytes)
3. Handler address (20 bytes)
ink!Proposal Docs (opens in a new tab)Total Size: ≥ 40 bytesEncoded call (opens in a new tab)
1. ProposalHeader (40 bytes)
2. New resource ID (32 bytes)
3. Handler address (20 bytes)

Refresh

ProtocolDocByte SizeArguments
DKGProposal Docs (opens in a new tab)Total Size: 68 bytes1. Public key (64 bytes)
2. Nonce (4 bytes)

ProposerSetUpdate

ProtocolDocByte SizeArguments
DKGProposal Docs (opens in a new tab)Total Size: 48 bytes1. Merkle root (32 bytes)
2. Average session length (8 bytes)
3. Number of proposers (4 bytes)
4. Nonce (4 bytes)

How proposals are signed

The below sequence diagram illustrates the steps required to successfully submit an Anchor Update Proposal for signature.

  1. Proposers propose an anchor update
  2. Proposers vote to either reject or acknowledge the proposal
  3. If the majority vote to reject, the execution is canceled and the proposal rejection event is emitted
  4. If the majority vote in favour of the proposal, the execution to have that proposal signed begins
  5. The proposal is inserted into an Unsigned Proposal Queue
  6. The DKG-gadget an offchain service worker, fetches the unsigned proposal from the queue
  7. The DKG-gadget sends messages to all connected peers to be signed in the given or next round
  8. Upon the completion of the round, the now signed proposals are processed and stored in offchain storage
  9. The Proposal-Handlers offchain worker then fetches signed proposals
  10. The proposals signatures are validated and inserted into pallet storage
  11. A ProposalSigned event is emitted indicating a successfully submitted proposal
Dkg light

Supported Proposals

The current DKG implementation manages the following proposals, each specify a unique change to the system that must be signed in order for any of these requested updates to be considered valid.

ProposalsDescription
RefreshProposal to refresh a contract’s governor
AnchorUpdateProposal to update merkle roots
SetVerifierProposalProposal to set a verifier address
TokenAddProposal to add token to a set
TokenRemoveProposal to remove token from a set
WrappingFeeUpdateProposal to update fee parameter
RescueTokenProposal to move tokens from a Treasury
MaxDepositLimitUpdateProposal to update a maximum deposit limit parameter
MinWithdrawalLimitUpdateProposal to update a minimum withdrawal limit parameter
FeeRecipientUpdateProposalProposal to update a fee recipient account
SetTreasuryHandlerProposalProposal to set a treasury handler address
ResourceIdUpdateProposal to add/update a resource ID
ProposalSetUpdateProposal to update the latest proposer set state
Last updated on December 16, 2022