Browse Source

Bounty contract

Manuel Araoz 9 years ago
parent
commit
857e37e032
2 changed files with 42 additions and 0 deletions
  1. 41 0
      contracts/Bounty.sol
  2. 1 0
      migrations/2_deploy_contracts.js

+ 41 - 0
contracts/Bounty.sol

@@ -0,0 +1,41 @@
+import './PullPaymentCapable.sol';
+import './Token.sol';
+
+/*
+ * Bounty
+ * This bounty will pay out if you can cause a Token's balance
+ * to be lower than its totalSupply, which would mean that it doesn't 
+ * have sufficient ether for everyone to withdraw.
+ */
+
+contract Bounty is PullPaymentCapable {
+
+  bool public claimed;
+  mapping(address => address) public researchers;
+
+  function() {
+    if (claimed) {
+      throw;
+    }
+  }
+
+  function createTarget() returns(Token) {
+    Token target = new Token(0);
+    researchers[target] = msg.sender;
+    return target;
+  }
+
+  function claim(Token target) {
+    address researcher = researchers[target];
+    if (researcher == 0) {
+      throw;
+    }
+    // check Token contract invariants
+    if (target.totalSupply() == target.balance) {
+      throw;
+    }
+    asyncSend(researcher, this.balance);
+    claimed = true;
+  }
+
+}

+ 1 - 0
migrations/2_deploy_contracts.js

@@ -3,4 +3,5 @@ module.exports = function(deployer) {
   deployer.deploy(GoodFailEarly);
   deployer.deploy(PullPaymentBid);
   deployer.deploy(BadArrayUse);
+  deployer.deploy(Bounty);
 };