Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 40 additions & 52 deletions contracts/BrehonContract.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pragma solidity ^0.4.8;
pragma solidity ^0.4.18;

import "./stateMachine.sol";
import "./accessRestricted.sol";
Expand Down Expand Up @@ -55,44 +55,38 @@ contract BrehonContract is
event FundsClaimed(address claimingParty, uint amount);

modifier byEitherEntities() {
if (msg.sender != primaryBrehon.addr &&
require(msg.sender != primaryBrehon.addr &&
msg.sender != secondaryBrehon.addr &&
msg.sender != tertiaryBrehon.addr &&
msg.sender != partyA.addr &&
msg.sender != partyB.addr) {
throw;
}
msg.sender != partyB.addr);
_;
}

modifier eitherByParty(Party _party1, Party _party2)
{
if (msg.sender != _party1.addr &&
msg.sender != _party2.addr)
throw;
require(msg.sender != _party1.addr &&
msg.sender != _party2.addr);
_;
}

modifier atAdjudicatableStages()
{
if(stage != Stages.Dispute &&
require(stage != Stages.Dispute &&
stage != Stages.Appeal &&
stage != Stages.SecondAppeal)
throw;
stage != Stages.SecondAppeal);
_;
}

modifier duringDispute()
{
if(stage == Stages.Negotiation ||
stage == Stages.Completed)
throw;
require(stage == Stages.Negotiation ||
stage == Stages.Completed);
_;
}

modifier onlyByBrehon(Brehon _brehon) {
if (msg.sender != _brehon.addr)
throw;
require(msg.sender != _brehon.addr);
_;
}

Expand All @@ -110,7 +104,7 @@ contract BrehonContract is
address _tertiaryBrehon,
uint _tertiaryBrehonFixedFee,
uint _tertiaryBrehonDisputeFee
) {
) public {
partyA.addr = _partyA;
transactionAmount = _transactionAmount;
contractTermsHash = _contractTermsHash;
Expand Down Expand Up @@ -147,7 +141,7 @@ contract BrehonContract is
tertiaryBrehon.contractAccepted = false;
}

function acceptContract()
function acceptContract() public
atStage(Stages.Negotiation)
{
if (msg.sender == partyA.addr) {
Expand All @@ -160,28 +154,28 @@ contract BrehonContract is
secondaryBrehon.contractAccepted = true;
} else if(msg.sender == tertiaryBrehon.addr) {
tertiaryBrehon.contractAccepted = true;
} else throw;
} else revert();
}

function deposit()
function deposit() public
payable
{
if(msg.sender == partyA.addr) {
partyA.deposit += msg.value;
} else if (msg.sender == partyB.addr) {
partyB.deposit += msg.value;
} else throw;
} else revert();
}

function startContract()
function startContract() public
atStage(Stages.Negotiation)
eitherByParty(partyA, partyB)
{
if(!partyA.contractAccepted ||
require(!partyA.contractAccepted ||
!partyB.contractAccepted ||
!primaryBrehon.contractAccepted ||
!secondaryBrehon.contractAccepted ||
!tertiaryBrehon.contractAccepted) throw;
!tertiaryBrehon.contractAccepted);

if ((partyA.deposit + partyB.deposit) >=
minimumContractAmt) {
Expand All @@ -190,10 +184,10 @@ contract BrehonContract is
awards[primaryBrehon.addr] = primaryBrehon.fixedFee;
awards[secondaryBrehon.addr] = secondaryBrehon.fixedFee;
awards[tertiaryBrehon.addr] = tertiaryBrehon.fixedFee;
} else throw;
} else revert();
}

function raiseDispute()
function raiseDispute() public
atStage(Stages.Execution)
eitherByParty(partyA, partyB)
{
Expand All @@ -203,11 +197,11 @@ contract BrehonContract is
ContractDisputed(msg.sender, primaryBrehon.addr);
}

function adjudicate(uint _awardPartyA, uint _awardPartyB)
function adjudicate(uint _awardPartyA, uint _awardPartyB) public
atAdjudicatableStages()
onlyByBrehon(activeBrehon)
{
if((_awardPartyA + _awardPartyB) > (partyA.deposit + partyB.deposit)) throw;
require((_awardPartyA + _awardPartyB) > (partyA.deposit + partyB.deposit));

if (stage == Stages.Dispute) {
stage = Stages.AppealPeriod; // STATECHANGE
Expand All @@ -216,7 +210,7 @@ contract BrehonContract is
} else if (stage == Stages.SecondAppeal) {
stage = Stages.Completed; // STATECHANGE
} else {
throw;
revert();
}

awards[partyA.addr] = _awardPartyA;
Expand All @@ -231,49 +225,44 @@ contract BrehonContract is
}
}

function getActiveJudgmentByParty(address _partyAddress)
function getActiveJudgmentByParty(address _partyAddress) public view
returns (uint)
{
if(_partyAddress != partyA.addr &&
_partyAddress != partyB.addr) throw;
return awards[_partyAddress];
require(_partyAddress != partyA.addr &&
_partyAddress != partyB.addr);
return awards[_partyAddress];
}

function claimFunds()
function claimFunds() public
byEitherEntities()
{
if (stage != Stages.Completed) {
if (stage != Stages.AppealPeriod && stage != Stages.SecondAppealPeriod) {
throw;
}
require(stage != Stages.AppealPeriod && stage != Stages.SecondAppealPeriod);

if (now >= appealPeriodStartTime + (appealPeriodInDays * 1 days)) {
stage = Stages.Completed; // STATECHANGE
}
}

if (stage != Stages.Completed) throw;
require(stage != Stages.Completed);

uint amount = awards[msg.sender];

if (amount == 0) {
throw;
}
require(amount == 0);

if (this.balance < amount) {
throw;
}
require(this.balance < amount);

awards[msg.sender] = 0;

if(msg.sender.send(amount)) {
FundsClaimed(msg.sender, amount);
} else {
awards[msg.sender] = amount;
throw;
revert();
}
}

function raiseAppeal()
function raiseAppeal() public
atStage(Stages.AppealPeriod)
eitherByParty(partyA, partyB)
{
Expand All @@ -285,7 +274,7 @@ contract BrehonContract is
AppealRaised(msg.sender, activeBrehon.addr);
}

function raise2ndAppeal()
function raise2ndAppeal() public
atStage(Stages.SecondAppealPeriod)
eitherByParty(partyA, partyB)
{
Expand All @@ -297,7 +286,7 @@ contract BrehonContract is
SecondAppealRaised(msg.sender, activeBrehon.addr);
}

function proposeSettlement(uint _awardPartyA, uint _awardPartyB)
function proposeSettlement(uint _awardPartyA, uint _awardPartyB) public
duringDispute()
eitherByParty(partyA, partyB)
{
Expand All @@ -315,13 +304,12 @@ contract BrehonContract is
SettlementProposed(msg.sender, _awardPartyA, _awardPartyB);
}

function acceptSettlement(uint _awardPartyA, uint _awardPartyB)
function acceptSettlement(uint _awardPartyA, uint _awardPartyB) public
duringDispute()
eitherByParty(partyA, partyB)
{
if((proposedSettlement.awardPartyA != _awardPartyA) ||
(proposedSettlement.awardPartyB != _awardPartyB))
throw;
require((proposedSettlement.awardPartyA != _awardPartyA) ||
(proposedSettlement.awardPartyB != _awardPartyB));

if(msg.sender == partyA.addr) {
proposedSettlement.partyAAccepted = true;
Expand Down
2 changes: 1 addition & 1 deletion contracts/BrehonContractFactory.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pragma solidity ^0.4.8;
pragma solidity ^0.4.18;

import "zeppelin-solidity/contracts/ownership/Ownable.sol";
import "./BrehonContract.sol";
Expand Down
18 changes: 8 additions & 10 deletions contracts/accessRestricted.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pragma solidity ^0.4.2;
pragma solidity ^0.4.18;

import "./priced.sol";

Expand All @@ -17,8 +17,7 @@ contract accessRestricted is priced {
// a certain address.
modifier onlyBy(address _account)
{
if (msg.sender != _account)
throw;
require(msg.sender != _account);
// Do not forget the "_;"! It will
// be replaced by the actual function
// body when the modifier is used.
Expand All @@ -27,38 +26,37 @@ contract accessRestricted is priced {

modifier eitherBy(address _account1, address _account2)
{
if (msg.sender != _account1 ||
msg.sender != _account2)
throw;
require(msg.sender != _account1 ||
msg.sender != _account2);

_;

}

/// Make `_newOwner` the new owner of this
/// contract.
function changeOwner(address _newOwner)
function changeOwner(address _newOwner) public
onlyBy(owner)
{
owner = _newOwner;
}

modifier onlyAfter(uint _time) {
if (now < _time) throw;
require(now < _time);
_;
}

/// Erase ownership information.
/// May only be called 6 weeks after
/// the contract has been created.
function disown()
function disown() public
onlyBy(owner)
onlyAfter(creationTime + 6 weeks)
{
delete owner;
}

function forceOwnerChange(address _newOwner)
function forceOwnerChange(address _newOwner) public
costs(200 ether)
{
owner = _newOwner;
Expand Down
2 changes: 1 addition & 1 deletion contracts/priced.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pragma solidity ^0.4.8;
pragma solidity ^0.4.18;

contract priced {
// Modifiers can receive arguments:
Expand Down
6 changes: 3 additions & 3 deletions contracts/stateMachine.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pragma solidity ^0.4.8;
pragma solidity ^0.4.18;

contract stateMachine {
enum Stages {
Expand All @@ -16,14 +16,14 @@ contract stateMachine {
Stages public stage = Stages.Negotiation;

modifier atStage(Stages _stage) {
if (stage != _stage) throw;
require(stage != _stage);
_;
}

modifier timedTransition(bool bypassWaitTime, uint startTime, uint8 durationInDays, Stages _currStage, Stages _nextStage)
{
if (stage != _nextStage) {
if (stage != _currStage) throw;
require(stage != _currStage);
if (bypassWaitTime || now >= startTime + (durationInDays * 1 days))
stage = _nextStage;
}
Expand Down