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
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