Complete API documentation for On-Chain Jurisdiction smart contracts.
File: contracts/Dao.sol
Governor contract implementing the proposal and voting lifecycle. Inherits from OpenZeppelin's Governor framework.
constructor(
IVotes _token,
TimelockController _timelock,
string memory name,
uint48 minsDelay,
uint32 minsVoting,
uint256 pThreshold,
uint8 qvrm
)| Parameter | Type | Description |
|---|---|---|
_token |
IVotes |
Governance token (RepToken) |
_timelock |
TimelockController |
Timelock for proposal execution |
name |
string |
DAO name |
minsDelay |
uint48 |
Voting delay in minutes |
minsVoting |
uint32 |
Voting period in minutes |
pThreshold |
uint256 |
Tokens required to create proposal |
qvrm |
uint8 |
Quorum percentage (0-100) |
// Create a proposal
function propose(
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
string memory description
) public returns (uint256 proposalId)
// Cast a vote
function castVote(uint256 proposalId, uint8 support) public returns (uint256)
// support: 0 = Against, 1 = For, 2 = Abstain
// Cast vote with reason
function castVoteWithReason(
uint256 proposalId,
uint8 support,
string calldata reason
) public returns (uint256)
// Queue a successful proposal
function queue(
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
bytes32 descriptionHash
) public returns (uint256)
// Execute a queued proposal
function execute(
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
bytes32 descriptionHash
) public payable returns (uint256)
// Get proposal state
function state(uint256 proposalId) public view returns (ProposalState)
// States: Pending, Active, Canceled, Defeated, Succeeded, Queued, Expired, ExecutedFile: contracts/RepToken.sol
ERC20Votes governance token with reputation accrual from Economy activity.
constructor(
string memory name,
string memory symbol,
address payable _registryAddress,
address _adminAddress,
address[] memory initialMembers,
uint256[] memory initialAmounts,
bool transferrable
)| Parameter | Type | Description |
|---|---|---|
name |
string |
Token name |
symbol |
string |
Token symbol |
_registryAddress |
address payable |
Registry contract address |
_adminAddress |
address |
Initial admin (typically factory) |
initialMembers |
address[] |
Initial token recipients |
initialAmounts |
uint256[] |
Token amounts for each recipient |
transferrable |
bool |
Whether tokens can be transferred |
bool public immutable isTransferable; // Transfer restriction flag
address public admin; // Admin address (can mint/burn)
address public registryAddress; // Registry for parity lookup
address public economyAddress; // Economy for reputation claims
uint256 public currentPassiveIncomeEpochId;
uint256 public currentDelegateRewardEpochId;// Mint tokens (admin only)
function mint(address to, uint256 amount) public
// Burn tokens (admin only)
function burn(address from, uint256 amount) public
// Transfer admin role
function setAdmin(address newAdmin) public
// Link Economy contract (one-time)
function setEconomyAddress(address _economyAddress) public// Start a new passive income epoch
function startNewPassiveIncomeEpoch(uint256 budget, address paymentToken) public
// Claim passive income for an epoch
function claimPassiveIncome(uint256 epochId) public
// Start a new delegate reward epoch
function startNewDelegateRewardEpoch(uint256 budget, address paymentToken) public
// Claim delegate rewards for an epoch
function claimRepresentationReward(uint256 epochId) public
// Get epoch info
function getPassiveIncomeEpochStart(uint256 epochId) public view returns (uint48)
function getDelegateRewardEpochStart(uint256 epochId) public view returns (uint48)// Claim reputation from Economy activity
function claimReputationFromEconomy() external// Delegate voting power
function delegate(address delegatee) public
// Get current voting power
function getVotes(address account) public view returns (uint256)
// Get voting power at past timepoint
function getPastVotes(address account, uint256 timepoint) public view returns (uint256)
// Get total voting power at past timepoint
function getPastTotalSupply(uint256 timepoint) public view returns (uint256)File: contracts/Registry.sol
Treasury and configuration store for the DAO.
constructor(address initialOwner, address _wrapperAddress)| Parameter | Type | Description |
|---|---|---|
initialOwner |
address |
Initial owner (typically factory) |
_wrapperAddress |
address |
Factory address for registry edits |
address public wrapperAddress; // Factory address
address public jurisdictionAddress; // RepToken address// Receive ETH
receive() external payable
// Receive ERC721
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4)
// Transfer ETH (owner only)
function transferETH(address payable to, uint256 amount) external
// Transfer ERC20 (owner only)
function transferERC20(address tokenAddress, address to, uint256 amount) external
// Transfer ERC721 (owner only)
function transferERC721(address tokenAddress, address to, uint256 tokenId) external// Set a registry key-value pair
function editRegistry(string memory key, string memory value) public
// Set multiple key-value pairs
function batchEditRegistry(string[] memory keys, string[] memory values) public
// Get a registry value
function getRegistryValue(string memory key) public view returns (string memory)
// Get all keys
function getAllKeys() public view returns (string[] memory)
// Get all values
function getAllValues() public view returns (string[] memory)// Reserve funds for a purpose
function earmarkFunds(bytes32 purpose, uint256 amount, address tokenAddress) external
// Release reservation (funds stay in treasury)
function withdrawEarmarkedFunds(bytes32 purpose, uint256 amount) external
// Disburse to recipient
function disburseEarmarked(
address recipient,
uint256 amount,
bytes32 purpose,
address tokenAddress
) external
// Reclaim unclaimed epoch funds
function reclaimEarmarkedFunds(
uint256 epochId,
address paymentToken,
bool isDelegateReward
) externalFile: contracts/Economy.sol
Marketplace contract that deploys and tracks projects.
constructor(uint _arbitrationFeeBps)// DAO links
address public timelockAddress;
address public registryAddress;
address public governorAddress;
address public repTokenAddress;
// Project implementations (for cloning)
address public nativeProjectImplementation;
address public erc20ProjectImplementation;
// DAO-controlled parameters
uint public arbitrationFeeBps; // Default: 1000 (10%)
uint public platformFeeBps; // Default: 100 (1%)
uint public authorFeeBps; // Default: 100 (1%)
uint public coolingOffPeriod; // Default: 120 seconds
uint public backersVoteQuorumBps; // Default: 7000 (70%)
uint public projectThreshold; // Default: 0
uint public appealPeriod; // Default: 604800 (7 days)
uint public maxImmediateBps; // Default: 2000 (20%)
// Tracking
address[] public deployedProjects;
mapping(address => bool) public isProjectContract;
mapping(address => mapping(address => uint)) public earnings;
mapping(address => mapping(address => uint)) public spendings;// Create native currency project
function createProject(
string memory name,
address contractor,
address arbiter,
string memory termsHash,
string memory repo,
string memory description
) public payable returns (address)
// Create ERC20 token project
function createERC20Project(
string memory name,
address contractor,
address arbiter,
string memory termsHash,
string memory repo,
string memory description,
address tokenAddress,
uint256 arbitrationFee
) public returns (address)// Get user profile
function getUser(address user) external view returns (
address[] memory earnedTokens,
uint[] memory earnedAmounts,
address[] memory spentTokens,
uint[] memory spentAmounts,
address[] memory projectsAsAuthor,
address[] memory projectsAsContractor,
address[] memory projectsAsArbiter
)
// Called by projects to track activity
function updateEarnings(address user, uint amount, address tokenAddress) external
function updateSpendings(address user, uint amount, address tokenAddress) external
function registerProjectRoles(
address projectAddress,
address author,
address contractor,
address arbiter
) external// Set implementations (timelock only)
function setImplementations(address native, address erc20) external
// Parameter setters (timelock only after initial setup)
function setPlatformFee(uint newFeeBps) external
function setAuthorFee(uint newFeeBps) external
function setCoolingOffPeriod(uint newPeriod) external
function setBackersVoteQuorum(uint newQuorumBps) external
function setProjectThreshold(uint newThreshold) external
function setAppealPeriod(uint newPeriod) external
function setMaxImmediateBps(uint newMaxBps) external
// Fee withdrawal
function withdrawNative() external
function withdrawERC20(address tokenAddress) external
// Orphan token recovery
function sweepOrphanedTokens(address tokenAddress, address to) externalFile: contracts/NativeProject.sol
Escrow contract for native currency (ETH/XTZ) projects.
enum Stage { Open, Pending, Ongoing, Dispute, Appealable, Appeal, Closed }
Stage public stage;
IEconomy public economy;
string public name;
address public author;
address public contractor;
address public arbiter;
string public termsHash;
uint public projectValue;
uint public totalImmediate;
uint public totalLocked;
uint public arbitrationFee;
uint public availableToContractor;
uint public disputeResolution; // 0-100 percent to contractor
bool public arbitrationFeePaidOut;
address public daoTimelock;
address public daoGovernor;
uint public appealEnds;
mapping(address => Contribution) public contributions;
struct Contribution {
uint total;
uint immediate;
uint locked;
}function initialize(
address economyAddress,
string memory _name,
address _author,
address _contractor,
address _arbiter,
string memory _termsHash,
string memory _repo,
address _daoTimelock,
address _daoGovernor
) external payable// Send funds (all escrowed)
function sendFunds() public payable
// Send funds with immediate release portion
function sendFundsWithImmediate(uint immediateBps) public payable// Set contractor and arbiter (author only)
function setParties(
address _contractor,
address _arbiter,
string memory _termsHash
) external
// Contractor signs contract
function signContract() public payable// Vote to release payment
function voteToReleasePayment() public
// Vote to dispute
function voteToDispute() public// Contractor initiates dispute
function disputeAsContractor() public
// Arbiter rules on dispute
function arbitrate(uint256 percent, string memory rulingHash) public
// Handle arbiter timeout (150 days)
function arbitrationPeriodExpired() public// Initiate DAO appeal
function appeal(uint256 proposalId, address[] calldata targets) external
// DAO overrules arbiter
function daoOverrule(uint256 percent, string memory rulingHash) public
// Finalize arbitration (accept original ruling)
function finalizeArbitration() public// Contractor withdraws payment
function withdrawAsContractor() public
// Contributor withdraws refund
function withdrawAsContributor() public
// Reclaim arbitration fee (if no dispute)
function reclaimArbitrationFee() public
// Contractor reimburses (cancels project)
function reimburse() public// DAO vetoes project
function daoVeto() externalFile: contracts/ERC20Project.sol
Escrow contract for ERC20 token projects. Same interface as NativeProject with ERC20 handling.
IERC20 public token; // The ERC20 token used for this project// Funding requires token approval first
function sendFunds(uint256 amount) public // Uses transferFrom
// Contractor signs with token staking
function signContract() public // Requires token approval for arbitration feeFile: contracts/factories/StandardFactory.sol
Deploys standard DAOs with governance tokens.
struct DaoParams {
string name;
string symbol;
string description;
uint8 decimals;
uint256 executionDelay;
address[] initialMembers;
uint256[] initialAmounts; // Token amounts + 4 governance params
string[] keys;
string[] values;
}
function deployDAOwithToken(DaoParams memory params) public payableThe initialAmounts array contains:
- Token amounts for each
initialMembersaddress - Four governance parameters (at the end):
- Voting delay (minutes)
- Voting period (minutes)
- Proposal threshold (tokens)
- Quorum fraction (0-100)
function deployDAOwithToken(
string memory name,
string memory symbol,
string memory description,
uint8 decimals,
uint256 executionDelay,
address[] memory initialMembers,
uint256[] memory initialAmounts,
string[] memory keys,
string[] memory values
) public payableFile: contracts/factories/TrustlessFactory.sol
Deploys Economy DAOs with marketplace functionality.
function deployInfrastructure(uint timelockDelayInMinutes) externalDeploys: Economy, Timelock, Registry
struct TokenParams {
string name;
string symbol;
address[] initialMembers;
uint256[] initialAmounts;
}
struct GovParams {
string name;
uint48 timelockDelay;
uint32 votingPeriod;
uint256 proposalThreshold;
uint8 quorumFraction;
}
function deployDAOToken(
address registryAddr,
address timelockAddr,
TokenParams memory tokenParams,
GovParams memory govParams
) externalstruct AddressParams {
address[2] implAddresses; // [nativeProjectImpl, erc20ProjectImpl]
address[5] contractAddresses; // [economy, registry, timelock, repToken, dao]
}
struct EconomyParams {
uint initialPlatformFeeBps;
uint initialAuthorFeeBps;
uint initialCoolingOffPeriod;
uint initialBackersQuorumBps;
uint initialProjectThreshold;
uint initialAppealPeriod;
}
function configureAndFinalize(
AddressParams memory addressParams,
EconomyParams memory economyParams
) external// StandardFactory
event NewDaoCreated(
address indexed dao,
address token,
address[] initialMembers,
uint256[] initialAmounts,
string name,
string symbol,
string description,
uint256 executionDelay,
address registry,
string[] keys,
string[] values
);
// TrustlessFactory
event InfrastructureDeployed(address economy, address registry, address timelock);
event DAOTokenDeployed(address repToken, address dao);
event SuiteConfigured(
address deployer,
address indexed economy,
address registry,
address timelock,
address indexed repToken,
address indexed dao
);event NewProject(
address indexed contractAddress,
string projectName,
address contractor,
address arbiter,
string termsHash,
string repo,
string description,
address tokenAddress // address(0) for native
);event SetParties(address _contractor, address _arbiter, string _termsHash);
event SendFunds(address who, uint256 howMuch, uint immediateBps);
event ContractSigned(address contractor);
event VotedToRelease(address who, uint votingPower);
event VotedToDispute(address who, uint votingPower);
event ProjectDisputed(address by);
event ArbitrationDecision(address arbiter, uint256 percent, string rulingHash);
event ArbitrationAppealed(address indexed appealer, uint256 indexed proposalId);
event ArbitrationFinalized(address indexed finalizer);
event DaoOverruled(address indexed timelock, uint256 percent, string rulingHash);
event DaoVetoed(address indexed timelock);
event ContractorPaid(address contractor, uint256 amount);
event ContributorWithdrawn(address contributor, uint256 amount);
event ArbitrationFeeReclaimed(address who, uint256 amount);
event ProjectReimbursed(address contractor);
event ProjectClosed(address by);// Governor (OpenZeppelin)
event ProposalCreated(
uint256 proposalId,
address proposer,
address[] targets,
uint256[] values,
string[] signatures,
bytes[] calldatas,
uint256 voteStart,
uint256 voteEnd,
string description
);
event VoteCast(
address indexed voter,
uint256 proposalId,
uint8 support,
uint256 weight,
string reason
);
event ProposalQueued(uint256 proposalId, uint256 eta);
event ProposalExecuted(uint256 proposalId);
event ProposalCanceled(uint256 proposalId);
// RepToken
event PassiveIncomeEpochStarted(uint256 epochId, uint256 budget, address paymentToken);
event PassiveIncomeClaimed(address indexed claimant, uint256 epochId, uint256 amount);
event DelegateRewardEpochStarted(uint256 epochId, uint256 budget, address paymentToken);
event DelegateRewardClaimed(address indexed claimant, uint256 epochId, uint256 amount);
event ReputationClaimed(address indexed claimant, uint256 amount);| Contract | Address |
|---|---|
| StandardFactory | 0xeB7509CC4496C857a3EC2D722d3AA10da419725d |
| InfrastructureFactory | 0xaAee6c3C383D8f85920977375561fcb7CdA5543b |
| DAOFactory | 0x72C0413227418e4C1bbA40559c762c15A1417db7 |
| RepTokenFactory | 0x440a296CF621F704ac25F5F27FB3d043F7B95F05 |
| Network | Chain ID | RPC URL |
|---|---|---|
| Etherlink Testnet | 128123 | https://node.ghostnet.etherlink.com |
| Etherlink Mainnet | 42793 | https://node.mainnet.etherlink.com |
| Localhost (Hardhat) | 31337 | http://127.0.0.1:8545 |
uint constant ARBITRATION_TIMEOUT = 150 days; // Time for arbiter to rule
uint constant BPS_DENOMINATOR = 10000; // Basis points denominator| Parameter | Default Value | Unit |
|---|---|---|
arbitrationFeeBps |
1000 | bps (10%) |
platformFeeBps |
100 | bps (1%) |
authorFeeBps |
100 | bps (1%) |
coolingOffPeriod |
120 | seconds |
backersVoteQuorumBps |
7000 | bps (70%) |
projectThreshold |
0 | tokens |
appealPeriod |
604800 | seconds (7 days) |
maxImmediateBps |
2000 | bps (20%) |
- Architecture - System design and contract relationships
- DAO Governance - Voting and treasury management
- Trustless Economy - Project lifecycle and dispute resolution
- OpenZeppelin Governor - Base framework documentation
- OpenZeppelin ERC20Votes - Voting token documentation