Decentralised Committee

Traditional contracts typically involve a single owner, although some allow for multiple ownership controls. A few contracts even implement a multi-signature structure for administrative actions. As part of our standards, we employ a decentralised autonomous organization (DAO) contract to execute all actions, ensuring impartiality and eliminating single points of failure.

The DAO council is designed to be expandable, equipped with comprehensive mechanisms to maintain fairness within the contract. To build public trust and encourage participation, the council should operate with a degree of transparency. This transparency can extend to decentralised identity systems or other methods of demonstrating the credibility of council members.

suspend(address contractAddr, address[] perpetrators) returns(uint256)
// Execute dAOSuspend in target contract

unsuspend(address contractAddr, address[] perpetrators) returns(uint256)
// Execute dAOUnsuspend in target contract

transfer(address contractAddr, address from, address to, uint256 amount) returns(uint256)
// Execute dAOTransferFrom in target contract

burn(address contractAddr, address perpetrator, uint256 amount) returns(uint256)
// Execute dAOBurn in target contract

mint(address contractAddr, address to, uint256 amount) returns(uint256)
// Execute dAOMint in target contract

callOthers(address contractAddr, byte[] bytecodes) returns(uint256)
// Execute any other methods or functions in target contract

addCouncil(address newCouncil) returns(uint256)
// Propose to add new council member

removeCouncil(address existingCouncil) returns(uint256)
// Propose to remove old council

getAllCouncils() returns(address[])
// List existing council member array

setVotePercentage(uint256 newPercent) returns(uint256)
// Propose new voting percentage
// If 100% is set, all council member must vote
// If 0% is set, any new calling will pass through automatically

getVotePercentage() returns(uint256)
// Get the current vote percentage to execute a function

setExpiryTime(uint256 newTime) returns(uint256)
// Propose new voting time
// Follow the unix time standard, 3600 = 1H, 86400 = 1D
// It is using block time so it might be few secs to few minutes off
// 0 = no expiry
// It is important to set an expiry to prevent interference from any upcoming
// or outgoing council members

getExpiryTime() returns(uint256)
// Get the expiry time in Unix

vote(uint256 voteId, bool decision)
// Vote for or against on the voteId
// Will return error if vote does not exist, expired,
// voting is completed or caller has no access

getVoteDetails(uint256 voteId) returns(uint256, uint256, uint256)
// 1st: Return the vote type in term of vote ID
// It will be a standard chart, e.g. 1 - suspend
// 2 - unsuspend and so on
// 2nd: Return the number of positive votes so far
// Remaining vote needed can be calculated using
// the total council number and the percentage needed
// 3rd: the unix time this vote is created, if 0
// means it has no expiry

Last updated