mirror of https://github.com/nucypher/nucypher.git
Events for the MiningAdjudicator
parent
fa190cd27a
commit
92af87778f
|
@ -17,13 +17,19 @@ contract MiningAdjudicator is Upgradeable {
|
||||||
using UmbralDeserializer for bytes;
|
using UmbralDeserializer for bytes;
|
||||||
using SafeMath for uint256;
|
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;
|
uint8 public constant UMBRAL_PARAMETER_U_SIGN = 0x02;
|
||||||
uint256 public constant UMBRAL_PARAMETER_U_XCOORD = 0x03c98795773ff1c241fc0b1cced85e80f8366581dda5c9452175ebd41385fa1f;
|
uint256 public constant UMBRAL_PARAMETER_U_XCOORD = 0x03c98795773ff1c241fc0b1cced85e80f8366581dda5c9452175ebd41385fa1f;
|
||||||
uint256 public constant UMBRAL_PARAMETER_U_YCOORD = 0x7880ed56962d7c0ae44d6f14bb53b5fe64b31ea44a41d0316f3a598778f0f936;
|
uint256 public constant UMBRAL_PARAMETER_U_YCOORD = 0x7880ed56962d7c0ae44d6f14bb53b5fe64b31ea44a41d0316f3a598778f0f936;
|
||||||
// used only for upgrading
|
// used only for upgrading
|
||||||
bytes32 constant RESERVED_CAPSULE_AND_CFRAG_BYTES = bytes32(0);
|
bytes32 constant RESERVED_CAPSULE_AND_CFRAG_BYTES = bytes32(0);
|
||||||
address constant RESERVED_ADDRESS = 0x0;
|
address constant RESERVED_ADDRESS = 0x0;
|
||||||
// TODO events
|
|
||||||
|
|
||||||
MinersEscrow public escrow;
|
MinersEscrow public escrow;
|
||||||
SignatureVerifier.HashAlgorithm public hashAlgorithm;
|
SignatureVerifier.HashAlgorithm public hashAlgorithm;
|
||||||
|
@ -120,6 +126,9 @@ contract MiningAdjudicator is Upgradeable {
|
||||||
if (!isCapsuleFragCorrect(_capsuleBytes, _cFragBytes, _preComputedData)) {
|
if (!isCapsuleFragCorrect(_capsuleBytes, _cFragBytes, _preComputedData)) {
|
||||||
(uint256 penalty, uint256 reward) = calculatePenaltyAndReward(miner, minerValue);
|
(uint256 penalty, uint256 reward) = calculatePenaltyAndReward(miner, minerValue);
|
||||||
escrow.slashMiner(miner, penalty, msg.sender, reward);
|
escrow.slashMiner(miner, penalty, msg.sender, reward);
|
||||||
|
emit CFragEvaluated(evaluationHash, miner, msg.sender, false);
|
||||||
|
} else {
|
||||||
|
emit CFragEvaluated(evaluationHash, miner, msg.sender, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,7 @@ def fragments(metadata):
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
def test_evaluate_cfrag(testerchain, escrow, adjudicator_contract):
|
def test_evaluate_cfrag(testerchain, escrow, adjudicator_contract):
|
||||||
creator, miner, wrong_miner, *everyone_else = testerchain.interface.w3.eth.accounts
|
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?
|
# TODO: Move this to an integration test?
|
||||||
umbral_params = default_params()
|
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 adjudicator_contract.functions.evaluatedCFrags(data_hash).call()
|
||||||
assert 1000 == escrow.functions.minerInfo(miner).call()[0]
|
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
|
# Can't evaluate miner with data that already was checked
|
||||||
with pytest.raises((TransactionFailed, ValueError)):
|
with pytest.raises((TransactionFailed, ValueError)):
|
||||||
tx = adjudicator_contract.functions.evaluateCFrag(*args).transact()
|
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 adjudicator_contract.functions.evaluatedCFrags(data_hash).call()
|
||||||
# assert 800 == escrow.functions.minerInfo(miner).call()[0]
|
# assert 800 == escrow.functions.minerInfo(miner).call()[0]
|
||||||
# TODO tests for penalty/reward calculation
|
# TODO tests for penalty/reward calculation
|
||||||
|
# TODO tests for events
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
|
|
Loading…
Reference in New Issue