Stake → governance

VLVoting

Member staking, proposals, voting, execution, and withdrawal queues.

What VLVoting is for.

Member staking, proposals, voting, execution, and withdrawal queues.

Only voting members can propose and vote. The contract itself authorizes governance-controlled protocol operations.

How it fits together.

  1. Members stake VOW to establish voting weight.
  2. A member proposes a membership change or governed contract call.
  3. Members vote, then anyone executes an approved proposal after its voting period.

Declared public interface.

These are the public and external methods declared directly by VLVoting. Inherited token, ownership, and upgrade methods follow their respective standards.

initialize(address vow_, uint256 minimumStake_, uint64 votingPeriod_, uint64 withdrawalDelay_, uint16 quorumBps_, uint16 supermajorityBps_)Transaction

Initializes the deployed contract and its required dependencies.

registryName() returns (string memory)Read

Returns the human-readable name used for contract registration.

stake(uint256 amount)Transaction

Executes the stake operation.

proposeMember(address candidate) returns (uint256)Transaction

Executes the propose member operation.

proposeRemoval(address member) returns (uint256)Transaction

Executes the propose removal operation.

proposeCall(address target, uint256 value, bytes calldata callData) returns (uint256)Transaction

Executes the propose call operation.

vote(uint256 proposalId, bool support)Transaction

Executes the vote operation.

execute(uint256 proposalId) returns (bytes memory result)Transaction

Executes the execute operation.

queueWithdrawal(uint256 amount)Transaction

Executes the queue withdrawal operation.

withdraw()Transaction

Executes the withdraw operation.

getProposal(uint256 proposalId) returns (Proposal memory)Read

Reads the requested contract state or calculated result without changing state.

votingWeightAt(address voter, uint32 blockNumber) returns (uint256)Read

Executes the voting weight at operation.

Connect with ethers v6.

import { Contract, JsonRpcProvider, Wallet, encodeBytes32String, parseUnits } from "ethers";

const provider = new JsonRpcProvider(process.env.RPC_URL);
const signer = new Wallet(process.env.SIGNER_PRIVATE_KEY, provider);
const at = (address, abi, writable = false) =>
  new Contract(address, abi, writable ? signer : provider);

const voting = at(VOTING, ["function vote(uint256,bool)", "function getProposal(uint256) view returns (tuple)"] , true);
await (await voting.vote(proposalId, true)).wait();

Use the address for the chain you selected.

Read the deployment manifest or resolve the configured registry entry for the target network. Test on a local or test network before using a privileged signer. See the contract source and contract index for the full interface.