Calix Chain

Multisig

CalixMultisig is an M-of-N on-chain multisig wallet used to govern the Bridge, Oracle, and LPStaking contracts. All governance changes — including ownership of the multisig itself — go through the same proposal lifecycle.

How It Works

The contract enforces a submit → approve → execute lifecycle. A proposal is a raw (target, value, calldata) tuple. Once it accumulates threshold approvals from distinct owners, any owner can execute it. Execution is atomic: if the call reverts, the proposal stays pending.

â„šī¸
Self-governance. addOwner, removeOwner, and changeThreshold can only be called via a successful multisig proposal — never directly. The multisig is its own admin.

Proposal Flow

1
Encode calldata
const data = iface.encodeFunctionData("setRewardRate", [newRate]);
2
Submit proposal
const txId = await multisig.submit(stakingAddress, 0, data);
3
Collect approvals (other owners)
await multisig.connect(owner2).approve(txId);
4
Execute once threshold is met
await multisig.execute(txId);

Key Functions

FunctionAccessDescription
submit(address, uint256, bytes)ownerCreate a new proposal; returns proposal ID
approve(uint256 txId)ownerAdd caller's approval to a pending proposal
revoke(uint256 txId)ownerWithdraw caller's approval before execution
execute(uint256 txId)ownerExecute a proposal that has reached threshold
isReady(uint256 txId)publicReturns true if approval count ≥ threshold
getProposal(uint256 txId)publicReturns target, value, data, executed flag, approval count

Encoding Calldata

Use Solidity's abi.encodeWithSignature for calldata in tests/scripts:

// Solidity
bytes memory data = abi.encodeWithSignature(
    "transferOwnership(address)",
    newOwner
);

// ethers.js
const iface = new ethers.Interface(["function transferOwnership(address)"]);
const data  = iface.encodeFunctionData("transferOwnership", [newOwner]);
âš ī¸
Minimum threshold. The contract enforces a minimum threshold of 2. A 1-of-N multisig provides no meaningful security improvement over a single EOA. For production governance, 3-of-5 or higher is strongly recommended.

Security