On-chain voting.
token.balanceOf(msg.sender)voted[id][msg.sender] = trueproposals[id].fvproposals[id].av// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IToken { function balanceOf(address) external view returns (uint256); }
contract Gov {
IToken public immutable token;
struct P { address target; bytes data; uint256 fv; uint256 av; bool done; }
P[] public proposals;
mapping(uint256 => mapping(address => bool)) public voted;
constructor(IToken t) { token = t; }
function propose(address target, bytes calldata data) external returns (uint256) { /* TODO */ }
function vote(uint256 id, bool support) external { /* TODO */ }
function execute(uint256 id) external { /* TODO */ }
}