Back to Home
Deployed January 29, 2016 (10 years ago)Block 923,647
This contract is not yet documented
Know something about this contract? Switch to the History tab and suggest an edit to help preserve Ethereum history.
Frontier EraVerified Source
Key Facts
Transactions by Year
20168
Deployment Transaction: 0xa9b53004ab2d7551...4d1613854cd73420
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Detected Type: Token
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
Block span: 0 — 1,149,999
July 30, 2015 — March 14, 2016
Bytecode Overview
Opcodes5,489
Unique Opcodes215
Jump Instructions226
Storage Operations181
Verified Source Available
This contract has verified source code on Etherscan.
Show source code (Solidity)
{
"language": "Solidity",
"sources": {
"CongressGist.sol": {
"content": "contract owned {\n address public administrator;\n\n function owned() {\n administrator = msg.sender;\n }\n\n modifier onlyAdmin {\n if (msg.sender != administrator) throw;\n _\n }\n\n function transferOwnership(address newAdministrator) onlyAdmin {\n administrator = newAdministrator;\n }\n}\n\ncontract Congress is owned {\n\n /* Contract Variables and events */\n uint public minimumQuorum;\n uint public debatingPeriodInMinutes;\n int public majorityMargin;\n Proposal[] public proposals;\n uint public numProposals;\n mapping (address => uint) public memberId;\n Member[] public members;\n\n event ProposalAdded(uint proposalID, address recipient, uint amount, string description);\n event Voted(uint proposalID, bool position, address voter, string justification);\n event ProposalTallied(uint proposalID, int result, uint quorum, bool active);\n event MembershipChanged(address member, bool isMember);\n event ChangeOfRules(uint minimumQuorum, uint debatingPeriodInMinutes, int majorityMargin);\n \n struct Proposal {\n address recipient;\n uint amount;\n string description;\n uint votingDeadline;\n bool executed;\n bool proposalPassed;\n uint numberOfVotes;\n int currentResult;\n bytes32 proposalHash;\n Vote[] votes;\n mapping (address => bool) voted;\n }\n \n struct Member {\n address member;\n bool canVote;\n bool canAddProposals;\n string name;\n uint memberSince;\n }\n\n struct Vote {\n bool inSupport;\n address voter;\n string justification;\n }\n\n \n /* First time setup */\n function Congress(uint minimumQuorumForProposals, uint minutesForDebate, int marginOfVotesForMajority, address congressLeader) {\n minimumQuorum = minimumQuorumForProposals;\n debatingPeriodInMinutes = minutesForDebate;\n majorityMargin = marginOfVotesForMajority;\n members.length++;\n members[0] = Member({member: 0, canVote: false, canAddProposals: false, memberSince: now, name: ''});\n if (congressLeader != 0) administrator = congressLeader;\n\n }\n \n /*make member*/\n function changeMembership(address targetMember, bool canVote, bool canAddProposals, string memberName) onlyAdmin {\n uint id;\n if (memberId[targetMember] == 0) {\n memberId[targetMember] = members.length;\n id = members.length++;\n members[id] = Member({member: targetMember, canVote: canVote, canAddProposals: canAddProposals, memberSince: now, name: memberName});\n } else {\n id = memberId[targetMember];\n Member m = members[id];\n m.canVote = canVote;\n }\n \n MembershipChanged(targetMember, canVote);\n }\n \n /*change rules*/\n function changeVotingRules(uint minimumQuorumForProposals, uint minutesForDebate, int marginOfVotesForMajority) onlyAdmin {\n minimumQuorum = minimumQuorumForProposals;\n debatingPeriodInMinutes = minutesForDebate;\n majorityMargin = marginOfVotesForMajority;\n ChangeOfRules(minimumQuorum, debatingPeriodInMinutes, majorityMargin);\n }\n\n /* Function to create a new proposal */\n function newProposal(address beneficiary, uint etherAmount, string JobDescription, bytes transactionBytecode) returns (uint proposalID) {\n if (memberId[msg.sender] == 0 || !members[memberId[msg.sender]].canAddProposals) throw;\n\n proposalID = proposals.length++;\n Proposal p = proposals[proposalID];\n p.recipient = beneficiary;\n p.amount = etherAmount;\n p.description = JobDescription;\n p.proposalHash = sha3(beneficiary, etherAmount, transactionBytecode);\n p.votingDeadline = now + debatingPeriodInMinutes * 1 minutes;\n p.executed = false;\n p.proposalPassed = false;\n p.numberOfVotes = 0;\n ProposalAdded(proposalID, beneficiary, etherAmount, JobDescription);\n numProposals = proposalID+1;\n }\n \n /* function to check if a proposal code matches */\n function checkProposalCode(uint proposalNumber, address beneficiary, uint etherAmount, bytes transactionBytecode) constant returns (bool codeChecksOut) {\n Proposal p = proposals[proposalNumber];\n return p.proposalHash == sha3(beneficiary, etherAmount, transactionBytecode);\n }\n \n function vote(uint proposalNumber, bool supportsProposal, string justificationText) returns (uint voteID){\n if (memberId[msg.sender] == 0 || !members[memberId[msg.sender]].canVote) throw;\n \n Proposal p = proposals[proposalNumber];\n if (p.voted[msg.sender] == true) throw;\n p.voted[msg.sender] = true;\n p.numberOfVotes++;\n if (supportsProposal) {\n p.currentResult++;\n } else {\n p.currentResult--;\n }\n Voted(proposalNumber, supportsProposal, msg.sender, justificationText);\n }\n\n function executeProposal(uint proposalNumber, bytes transactionBytecode) returns (int result) {\n Proposal p = proposals[proposalNumber];\n if (now < p.votingDeadline\n || p.executed\n || p.proposalHash != sha3(p.recipient, p.amount, transactionBytecode)\n || p.numberOfVotes < minimumQuorum)\n throw;\n \n if (p.currentResult > majorityMargin) {\n p.recipient.call.value(p.amount * 1 ether)(transactionBytecode);\n p.executed = true;\n p.proposalPassed = true;\n } else {\n p.executed = true;\n p.proposalPassed = false;\n }\n ProposalTallied(proposalNumber, p.currentResult, p.numberOfVotes, p.proposalPassed);\n }\n}\n"
}
},
"settings": {
"optimizer": {
"runs": 200,
"enabled": true
},
"compilationTarget": {
"CongressGist.sol": "Congress"
}
}
}