Consolidate TokenBounties into Bounty

pull/35/head
Makoto Inoue 8 years ago
parent caca41f855
commit 99f288bfb5
  1. 14
      contracts/Bounty.sol
  2. 38
      contracts/bounties/CrowdsaleTokenBounty.sol
  3. 2
      migrations/2_deploy_contracts.js
  4. 14
      test/Bounty.js

@ -1,11 +1,11 @@
pragma solidity ^0.4.0; pragma solidity ^0.4.0;
import '../PullPayment.sol'; import './PullPayment.sol';
import '../Killable.sol'; import './Killable.sol';
/* /*
* Bounty * Bounty
* This bounty will pay out if you can cause a SimpleToken's balance * This bounty will pay out to a researcher if he/she breaks invariant logic of
* to be lower than its totalSupply, which would mean that it doesn't * the contract you bet reward against.
* have sufficient ether for everyone to withdraw.
*/ */
contract Factory { contract Factory {
@ -16,7 +16,7 @@ contract Target {
function checkInvariant() returns(bool); function checkInvariant() returns(bool);
} }
contract SimpleTokenBounty is PullPayment, Killable { contract Bounty is PullPayment, Killable {
Target target; Target target;
bool public claimed; bool public claimed;
address public factoryAddress; address public factoryAddress;
@ -28,7 +28,7 @@ contract SimpleTokenBounty is PullPayment, Killable {
if (claimed) throw; if (claimed) throw;
} }
function SimpleTokenBounty(address _factoryAddress){ function Bounty(address _factoryAddress){
factoryAddress = _factoryAddress; factoryAddress = _factoryAddress;
} }

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

@ -2,7 +2,7 @@ module.exports = function(deployer) {
deployer.deploy(PullPaymentBid); deployer.deploy(PullPaymentBid);
deployer.deploy(BadArrayUse); deployer.deploy(BadArrayUse);
deployer.deploy(ProofOfExistence); deployer.deploy(ProofOfExistence);
deployer.deploy(SimpleTokenBounty); deployer.deploy(Bounty);
deployer.deploy(CrowdsaleTokenBounty); deployer.deploy(CrowdsaleTokenBounty);
deployer.deploy(Ownable); deployer.deploy(Ownable);
deployer.deploy(LimitFunds); deployer.deploy(LimitFunds);

@ -10,7 +10,7 @@ contract('Bounty', function(accounts) {
it("creates bounty contract with factory address", function(done){ it("creates bounty contract with factory address", function(done){
var target = SecureTargetMock.deployed(); var target = SecureTargetMock.deployed();
SimpleTokenBounty.new(target.address). Bounty.new(target.address).
then(function(bounty){ then(function(bounty){
return bounty.factoryAddress.call() return bounty.factoryAddress.call()
}). }).
@ -25,7 +25,7 @@ contract('Bounty', function(accounts) {
var owner = accounts[0]; var owner = accounts[0];
var reward = web3.toWei(1, "ether"); var reward = web3.toWei(1, "ether");
SimpleTokenBounty.new(target.address). Bounty.new(target.address).
then(function(bounty){ then(function(bounty){
sendReward(owner, bounty.address, reward); sendReward(owner, bounty.address, reward);
assert.equal(reward, web3.eth.getBalance(bounty.address).toNumber()) assert.equal(reward, web3.eth.getBalance(bounty.address).toNumber())
@ -38,7 +38,7 @@ contract('Bounty', function(accounts) {
var owner = accounts[0]; var owner = accounts[0];
var reward = web3.toWei(1, "ether"); var reward = web3.toWei(1, "ether");
var bounty; var bounty;
SimpleTokenBounty.new(target.address). Bounty.new(target.address).
then(function(_bounty){ then(function(_bounty){
bounty = _bounty; bounty = _bounty;
sendReward(owner, bounty.address, reward); sendReward(owner, bounty.address, reward);
@ -55,7 +55,7 @@ contract('Bounty', function(accounts) {
it("checkInvariant returns true", function(done){ it("checkInvariant returns true", function(done){
var targetFactory = SecureTargetFactory.deployed(); var targetFactory = SecureTargetFactory.deployed();
var bounty; var bounty;
SimpleTokenBounty.new(targetFactory.address). Bounty.new(targetFactory.address).
then(function(_bounty) { then(function(_bounty) {
bounty = _bounty; bounty = _bounty;
return bounty.createTarget(); return bounty.createTarget();
@ -75,7 +75,7 @@ contract('Bounty', function(accounts) {
var researcher = accounts[1]; var researcher = accounts[1];
var reward = web3.toWei(1, "ether"); var reward = web3.toWei(1, "ether");
SimpleTokenBounty.new(targetFactory.address). Bounty.new(targetFactory.address).
then(function(bounty) { then(function(bounty) {
var event = bounty.TargetCreated({}); var event = bounty.TargetCreated({});
event.watch(function(err, result) { event.watch(function(err, result) {
@ -108,7 +108,7 @@ contract('Bounty', function(accounts) {
it("checkInvariant returns false", function(done){ it("checkInvariant returns false", function(done){
var targetFactory = InsecureTargetFactory.deployed(); var targetFactory = InsecureTargetFactory.deployed();
var bounty; var bounty;
SimpleTokenBounty.new(targetFactory.address). Bounty.new(targetFactory.address).
then(function(_bounty) { then(function(_bounty) {
bounty = _bounty; bounty = _bounty;
return bounty.createTarget(); return bounty.createTarget();
@ -128,7 +128,7 @@ contract('Bounty', function(accounts) {
var researcher = accounts[1]; var researcher = accounts[1];
var reward = web3.toWei(1, "ether"); var reward = web3.toWei(1, "ether");
SimpleTokenBounty.new(targetFactory.address). Bounty.new(targetFactory.address).
then(function(bounty) { then(function(bounty) {
var event = bounty.TargetCreated({}); var event = bounty.TargetCreated({});
event.watch(function(err, result) { event.watch(function(err, result) {

Loading…
Cancel
Save