Events for the MiningAdjudicator

pull/507/head
szotov 2018-12-11 18:04:35 +03:00
parent fa190cd27a
commit 92af87778f
2 changed files with 20 additions and 1 deletions

View File

@ -17,13 +17,19 @@ contract MiningAdjudicator is Upgradeable {
using UmbralDeserializer for bytes;
using SafeMath for uint256;
event CFragEvaluated(
bytes32 indexed evaluationHash,
address indexed miner,
address indexed investigator,
bool correctness
);
uint8 public constant UMBRAL_PARAMETER_U_SIGN = 0x02;
uint256 public constant UMBRAL_PARAMETER_U_XCOORD = 0x03c98795773ff1c241fc0b1cced85e80f8366581dda5c9452175ebd41385fa1f;
uint256 public constant UMBRAL_PARAMETER_U_YCOORD = 0x7880ed56962d7c0ae44d6f14bb53b5fe64b31ea44a41d0316f3a598778f0f936;
// used only for upgrading
bytes32 constant RESERVED_CAPSULE_AND_CFRAG_BYTES = bytes32(0);
address constant RESERVED_ADDRESS = 0x0;
// TODO events
MinersEscrow public escrow;
SignatureVerifier.HashAlgorithm public hashAlgorithm;
@ -120,6 +126,9 @@ contract MiningAdjudicator is Upgradeable {
if (!isCapsuleFragCorrect(_capsuleBytes, _cFragBytes, _preComputedData)) {
(uint256 penalty, uint256 reward) = calculatePenaltyAndReward(miner, minerValue);
escrow.slashMiner(miner, penalty, msg.sender, reward);
emit CFragEvaluated(evaluationHash, miner, msg.sender, false);
} else {
emit CFragEvaluated(evaluationHash, miner, msg.sender, true);
}
}

View File

@ -89,6 +89,7 @@ def fragments(metadata):
@pytest.mark.slow
def test_evaluate_cfrag(testerchain, escrow, adjudicator_contract):
creator, miner, wrong_miner, *everyone_else = testerchain.interface.w3.eth.accounts
evaluation_log = adjudicator_contract.events.CFragEvaluated.createFilter(fromBlock='latest')
# TODO: Move this to an integration test?
umbral_params = default_params()
@ -171,6 +172,14 @@ def test_evaluate_cfrag(testerchain, escrow, adjudicator_contract):
assert adjudicator_contract.functions.evaluatedCFrags(data_hash).call()
assert 1000 == escrow.functions.minerInfo(miner).call()[0]
events = evaluation_log.get_all_entries()
assert 1 == len(events)
event_args = events[0]['args']
assert data_hash == event_args['evaluationHash']
assert miner == event_args['miner']
assert creator == event_args['investigator']
assert event_args['correctness']
# Can't evaluate miner with data that already was checked
with pytest.raises((TransactionFailed, ValueError)):
tx = adjudicator_contract.functions.evaluateCFrag(*args).transact()
@ -291,6 +300,7 @@ def test_evaluate_cfrag(testerchain, escrow, adjudicator_contract):
# assert adjudicator_contract.functions.evaluatedCFrags(data_hash).call()
# assert 800 == escrow.functions.minerInfo(miner).call()[0]
# TODO tests for penalty/reward calculation
# TODO tests for events
@pytest.mark.slow