Advertisement
Guest User

Untitled

a guest
Feb 11th, 2016
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.81 KB | None | 0 0
  1. /*
  2. Foundation Tip Contract
  3.  
  4. Address: 0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359
  5. Bitcoin Shapeshift Address: 1GyczDXWjFbmhx2Qau4ham3zJqNEP8UcEG (if transaction fails it is sent to 39BaMQCphFXyYAvcoGpeKtnptLJ9v6cdFY instead)
  6. Interface: [{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"priceOfAUnicornInFinney","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"newUnicornPriceInFinney","type":"uint256"},{"name":"newUnicornAddress","type":"address"}],"name":"changeUnicorn","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"voteWeight","type":"uint256"},{"name":"canAddProposals","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"voteWeight","type":"uint256"},{"name":"canAddProposals","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"weiAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposalInWei","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":true,"inputs":[],"name":"unicornAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposalInEther","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]
  7.  
  8.  
  9. */
  10.  
  11. contract owned {
  12. address public owner;
  13.  
  14. function owned() {
  15. owner = msg.sender;
  16. }
  17.  
  18. modifier onlyOwner {
  19. if (msg.sender != owner) throw;
  20. _
  21. }
  22.  
  23. function transferOwnership(address newOwner) onlyOwner {
  24. owner = newOwner;
  25. }
  26. }
  27.  
  28. /* The token is used as a voting shares */
  29. contract token { function mintToken(address target, uint256 mintedAmount); }
  30.  
  31. contract Congress is owned {
  32.  
  33. /* Contract Variables and events */
  34. uint public minimumQuorum;
  35. uint public debatingPeriodInMinutes;
  36. int public majorityMargin;
  37. Proposal[] public proposals;
  38. uint public numProposals;
  39. mapping (address => uint) public memberId;
  40. Member[] public members;
  41.  
  42. address public unicornAddress;
  43. uint public priceOfAUnicornInFinney;
  44.  
  45. event ProposalAdded(uint proposalID, address recipient, uint amount, string description);
  46. event Voted(uint proposalID, bool position, address voter, string justification);
  47. event ProposalTallied(uint proposalID, int result, uint quorum, bool active);
  48. event MembershipChanged(address member);
  49. event ChangeOfRules(uint minimumQuorum, uint debatingPeriodInMinutes, int majorityMargin);
  50.  
  51. struct Proposal {
  52. address recipient;
  53. uint amount;
  54. string description;
  55. uint votingDeadline;
  56. bool executed;
  57. bool proposalPassed;
  58. uint numberOfVotes;
  59. int currentResult;
  60. bytes32 proposalHash;
  61. Vote[] votes;
  62. mapping (address => bool) voted;
  63. }
  64.  
  65. struct Member {
  66. address member;
  67. uint voteWeight;
  68. bool canAddProposals;
  69. string name;
  70. uint memberSince;
  71. }
  72.  
  73. struct Vote {
  74. bool inSupport;
  75. address voter;
  76. string justification;
  77. }
  78.  
  79.  
  80. /* First time setup */
  81. function Congress(uint minimumQuorumForProposals, uint minutesForDebate, int marginOfVotesForMajority, address congressLeader) {
  82. minimumQuorum = minimumQuorumForProposals;
  83. debatingPeriodInMinutes = minutesForDebate;
  84. majorityMargin = marginOfVotesForMajority;
  85. members.length++;
  86. members[0] = Member({member: 0, voteWeight: 0, canAddProposals: false, memberSince: now, name: ''});
  87. if (congressLeader != 0) owner = congressLeader;
  88.  
  89. }
  90.  
  91. /*make member*/
  92. function changeMembership(address targetMember, uint voteWeight, bool canAddProposals, string memberName) onlyOwner {
  93. uint id;
  94. if (memberId[targetMember] == 0) {
  95. memberId[targetMember] = members.length;
  96. id = members.length++;
  97. members[id] = Member({member: targetMember, voteWeight: voteWeight, canAddProposals: canAddProposals, memberSince: now, name: memberName});
  98. } else {
  99. id = memberId[targetMember];
  100. Member m = members[id];
  101. m.voteWeight = voteWeight;
  102. m.canAddProposals = canAddProposals;
  103. m.name = memberName;
  104. }
  105.  
  106. MembershipChanged(targetMember);
  107.  
  108. }
  109.  
  110. /*change rules*/
  111. function changeVotingRules(uint minimumQuorumForProposals, uint minutesForDebate, int marginOfVotesForMajority) onlyOwner {
  112. minimumQuorum = minimumQuorumForProposals;
  113. debatingPeriodInMinutes = minutesForDebate;
  114. majorityMargin = marginOfVotesForMajority;
  115.  
  116. ChangeOfRules(minimumQuorum, debatingPeriodInMinutes, majorityMargin);
  117. }
  118.  
  119. // ribbonPriceInEther
  120. function changeUnicorn(uint newUnicornPriceInFinney, address newUnicornAddress) onlyOwner {
  121. unicornAddress = newUnicornAddress;
  122. priceOfAUnicornInFinney = newUnicornPriceInFinney;
  123. }
  124.  
  125. /* Function to create a new proposal */
  126. function newProposalInWei(address beneficiary, uint weiAmount, string JobDescription, bytes transactionBytecode) returns (uint proposalID) {
  127. if (memberId[msg.sender] == 0 || !members[memberId[msg.sender]].canAddProposals) throw;
  128.  
  129. proposalID = proposals.length++;
  130. Proposal p = proposals[proposalID];
  131. p.recipient = beneficiary;
  132. p.amount = weiAmount;
  133. p.description = JobDescription;
  134. p.proposalHash = sha3(beneficiary, weiAmount, transactionBytecode);
  135. p.votingDeadline = now + debatingPeriodInMinutes * 1 minutes;
  136. p.executed = false;
  137. p.proposalPassed = false;
  138. p.numberOfVotes = 0;
  139. ProposalAdded(proposalID, beneficiary, weiAmount, JobDescription);
  140. numProposals = proposalID+1;
  141. }
  142.  
  143. /* Function to create a new proposal */
  144. function newProposalInEther(address beneficiary, uint etherAmount, string JobDescription, bytes transactionBytecode) returns (uint proposalID) {
  145. if (memberId[msg.sender] == 0 || !members[memberId[msg.sender]].canAddProposals) throw;
  146.  
  147. proposalID = proposals.length++;
  148. Proposal p = proposals[proposalID];
  149. p.recipient = beneficiary;
  150. p.amount = etherAmount * 1 ether;
  151. p.description = JobDescription;
  152. p.proposalHash = sha3(beneficiary, etherAmount * 1 ether, transactionBytecode);
  153. p.votingDeadline = now + debatingPeriodInMinutes * 1 minutes;
  154. p.executed = false;
  155. p.proposalPassed = false;
  156. p.numberOfVotes = 0;
  157. ProposalAdded(proposalID, beneficiary, etherAmount, JobDescription);
  158. numProposals = proposalID+1;
  159. }
  160.  
  161. /* function to check if a proposal code matches */
  162. function checkProposalCode(uint proposalNumber, address beneficiary, uint amount, bytes transactionBytecode) constant returns (bool codeChecksOut) {
  163. Proposal p = proposals[proposalNumber];
  164. return p.proposalHash == sha3(beneficiary, amount, transactionBytecode);
  165. }
  166.  
  167. function vote(uint proposalNumber, bool supportsProposal, string justificationText) returns (uint voteID){
  168. if (memberId[msg.sender] == 0) throw;
  169.  
  170. uint voteWeight = members[memberId[msg.sender]].voteWeight;
  171.  
  172. Proposal p = proposals[proposalNumber]; // Get the proposal
  173. if (p.voted[msg.sender] == true) throw; // If has already voted, cancel
  174. p.voted[msg.sender] = true; // Set this voter as having voted
  175. p.numberOfVotes+= voteWeight; // Increase the number of votes
  176. if (supportsProposal) { // If they support the proposal
  177. p.currentResult += int(voteWeight); // Increase score
  178. } else { // If they don't
  179. p.currentResult -= int(voteWeight); // Decrease the score
  180. }
  181. // Create a log of this event
  182. Voted(proposalNumber, supportsProposal, msg.sender, justificationText);
  183. }
  184.  
  185. function executeProposal(uint proposalNumber, bytes transactionBytecode) returns (int result) {
  186. Proposal p = proposals[proposalNumber];
  187. /* Check if the proposal can be executed */
  188. if (now < p.votingDeadline // has the voting deadline arrived?
  189. || p.executed // has it been already executed?
  190. || p.proposalHash != sha3(p.recipient, p.amount, transactionBytecode) // Does the transaction code match the proposal?
  191. || p.numberOfVotes < minimumQuorum) // has minimum quorum?
  192. throw;
  193.  
  194. /* execute result */
  195. if (p.currentResult > majorityMargin) {
  196. /* If difference between support and opposition is larger than margin */
  197. p.recipient.call.value(p.amount)(transactionBytecode);
  198. p.executed = true;
  199. p.proposalPassed = true;
  200. } else {
  201. p.executed = true;
  202. p.proposalPassed = false;
  203. }
  204. // Fire Events
  205. ProposalTallied(proposalNumber, p.currentResult, p.numberOfVotes, p.proposalPassed);
  206. }
  207.  
  208. function () {
  209. if (msg.value > priceOfAUnicornInFinney) {
  210. token unicorn = token(unicornAddress);
  211. unicorn.mintToken(msg.sender, msg.value / (priceOfAUnicornInFinney * 1 finney));
  212. }
  213.  
  214. }
  215. }
  216.  
  217.  
  218. /*
  219. Foundation Unicorn contract
  220.  
  221. unicorn address: 0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7
  222. Interface: [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"mintedAmount","type":"uint256"}],"name":"mintToken","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"frozenAccount","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"freeze","type":"bool"}],"name":"freezeAccount","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"},{"name":"centralMinter","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"},{"indexed":false,"name":"frozen","type":"bool"}],"name":"FrozenFunds","type":"event"}]
  223.  
  224.  
  225. */
  226.  
  227.  
  228. contract owned {
  229. address public owner;
  230.  
  231. function owned() {
  232. owner = msg.sender;
  233. }
  234.  
  235. modifier onlyOwner {
  236. if (msg.sender != owner) throw;
  237. _
  238. }
  239.  
  240. function transferOwnership(address newOwner) onlyOwner {
  241. owner = newOwner;
  242. }
  243. }
  244.  
  245. contract MyToken is owned {
  246. /* Public variables of the token */
  247. string public name;
  248. string public symbol;
  249. uint8 public decimals;
  250. uint256 public totalSupply;
  251.  
  252. /* This creates an array with all balances */
  253. mapping (address => uint256) public balanceOf;
  254. mapping (address => bool) public frozenAccount;
  255. mapping (address => mapping (address => uint)) public allowance;
  256. mapping (address => mapping (address => uint)) public spentAllowance;
  257.  
  258.  
  259. /* This generates a public event on the blockchain that will notify clients */
  260. event Transfer(address indexed from, address indexed to, uint256 value);
  261. event FrozenFunds(address target, bool frozen);
  262.  
  263. /* Initializes contract with initial supply tokens to the creator of the contract */
  264. function MyToken(uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol, address centralMinter) {
  265. if(centralMinter != 0 ) owner = centralMinter; // Sets the minter
  266. balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens
  267. name = tokenName; // Set the name for display purposes
  268. symbol = tokenSymbol; // Set the symbol for display purposes
  269. decimals = decimalUnits; // Amount of decimals for display purposes
  270. totalSupply = initialSupply;
  271. }
  272.  
  273. /* Send coins */
  274. function transfer(address _to, uint256 _value) {
  275. if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough
  276. if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
  277. if (frozenAccount[msg.sender]) throw; // Check if frozen
  278. balanceOf[msg.sender] -= _value; // Subtract from the sender
  279. balanceOf[_to] += _value; // Add the same to the recipient
  280. Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place
  281. }
  282.  
  283. function mintToken(address target, uint256 mintedAmount) onlyOwner {
  284. balanceOf[target] += mintedAmount;
  285. totalSupply += mintedAmount;
  286. Transfer(owner, target, mintedAmount);
  287. }
  288.  
  289. function freezeAccount(address target, bool freeze) onlyOwner {
  290. frozenAccount[target] = freeze;
  291. FrozenFunds(target, freeze);
  292. }
  293.  
  294. function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
  295. if (balanceOf[_from] < _value) throw; // Check if the sender has enough
  296. if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
  297. if (frozenAccount[_from]) throw; // Check if frozen
  298. if (spentAllowance[_from][msg.sender] + _value > allowance[_from][msg.sender]) throw; // Check allowance
  299. balanceOf[_from] -= _value; // Subtract from the sender
  300. balanceOf[_to] += _value; // Add the same to the recipient
  301. spentAllowance[_from][msg.sender] += _value;
  302. Transfer(msg.sender, _to, _value);
  303. }
  304.  
  305. function approve(address _spender, uint256 _value) returns (bool success) {
  306. allowance[msg.sender][_spender] = _value;
  307. }
  308.  
  309. function () {
  310. //owner.send(msg.value);
  311. throw;
  312. }
  313. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement