diff --git a/build.nims b/build.nims index 741484a6..037ecd09 100644 --- a/build.nims +++ b/build.nims @@ -25,13 +25,13 @@ task codex, "build codex binary": buildBinary "codex", params = "-d:chronicles_runtime_filtering -d:chronicles_log_level=TRACE" task testCodex, "Build & run Codex tests": - test "testCodex", params = "-d:codex_enable_proof_failures=true" + test "testCodex", params = "-d:codex_testing=true" task testContracts, "Build & run Codex Contract tests": test "testContracts" task testIntegration, "Run integration tests": - buildBinary "codex", params = "-d:chronicles_runtime_filtering -d:chronicles_log_level=TRACE -d:codex_enable_proof_failures=true" + buildBinary "codex", params = "-d:chronicles_runtime_filtering -d:chronicles_log_level=TRACE -d:codex_testing=true" test "testIntegration" task build, "build codex binary": diff --git a/codex/codex.nim b/codex/codex.nim index 4fc0f922..31ff6053 100644 --- a/codex/codex.nim +++ b/codex/codex.nim @@ -118,7 +118,7 @@ proc bootstrapInteractions( if config.persistence: # This is used for simulation purposes. Normal nodes won't be compiled with this flag # and hence the proof failure will always be 0. - when codex_enable_proof_failures: + when codex_testing: let proofFailures = config.simulateProofFailures if proofFailures > 0: warn "Enabling proof failure simulation!" diff --git a/codex/conf.nim b/codex/conf.nim index 9dc3cb8d..019f0c41 100644 --- a/codex/conf.nim +++ b/codex/conf.nim @@ -44,7 +44,7 @@ export net, DefaultQuotaBytes, DefaultBlockTtl, DefaultBlockMaintenanceInterval, const codex_enable_api_debug_peers* {.booldefine.} = false - codex_enable_proof_failures* {.booldefine.} = false + codex_testing* {.booldefine.} = false codex_enable_log_counter* {.booldefine.} = false type diff --git a/codex/contracts/clock.nim b/codex/contracts/clock.nim index 2c6a1728..af076ee0 100644 --- a/codex/contracts/clock.nim +++ b/codex/contracts/clock.nim @@ -2,6 +2,7 @@ import pkg/ethers import pkg/chronos import pkg/stint import ../clock +import ../conf export clock @@ -41,14 +42,17 @@ method stop*(clock: OnChainClock) {.async.} = await clock.subscription.unsubscribe() method now*(clock: OnChainClock): SecondsSince1970 = - try: - if queriedBlock =? (waitFor clock.provider.getBlock(BlockTag.latest)): - if queriedBlock.timestamp != clock.lastBlockTime: - trace "queried block and event block are not in sync", - queriedBlockLessThanEventBlock = queriedBlock.timestamp < clock.lastBlockTime - return queriedBlock.timestamp.truncate(int64) - except CatchableError as e: - warn "failed to get latest block timestamp" + when codex_testing: + # hardhat's latest block.timestamp is usually 1s behind the block timestamp + # in the newHeads event. When testing, always return the latest block. + try: + if queriedBlock =? (waitFor clock.provider.getBlock(BlockTag.latest)): + return queriedBlock.timestamp.truncate(int64) + except CatchableError as e: + warn "failed to get latest block timestamp" + return clock.lastBlockTime.truncate(int64) + + else: return clock.lastBlockTime.truncate(int64) method waitUntil*(clock: OnChainClock, time: SecondsSince1970) {.async.} = diff --git a/codex/sales/states/filled.nim b/codex/sales/states/filled.nim index c5bc4c27..4fe551fd 100644 --- a/codex/sales/states/filled.nim +++ b/codex/sales/states/filled.nim @@ -51,7 +51,7 @@ method run*(state: SaleFilled, machine: Machine): Future[?State] {.async.} = if err =? (await onExpiryUpdate(request.content.cid, requestEnd)).errorOption: return some State(SaleErrored(error: err)) - when codex_enable_proof_failures: + when codex_testing: if context.simulateProofFailures > 0: info "Proving with failure rate", rate = context.simulateProofFailures return some State(SaleProvingSimulated(failEveryNProofs: context.simulateProofFailures)) diff --git a/codex/sales/states/provingsimulated.nim b/codex/sales/states/provingsimulated.nim index f5753cf2..b0ae7206 100644 --- a/codex/sales/states/provingsimulated.nim +++ b/codex/sales/states/provingsimulated.nim @@ -1,5 +1,5 @@ import ../../conf -when codex_enable_proof_failures: +when codex_testing: import std/strutils import pkg/chronicles import pkg/stint diff --git a/codex/validation.nim b/codex/validation.nim index 2be39975..b7557f93 100644 --- a/codex/validation.nim +++ b/codex/validation.nim @@ -4,6 +4,7 @@ import pkg/chronos import pkg/chronicles import ./market import ./clock +import ./utils/exceptions export market export sets @@ -78,7 +79,7 @@ proc markProofAsMissing(validation: Validation, except CancelledError: raise except CatchableError as e: - error "Marking proof as missing failed", msg = e.msg + error "Marking proof as missing failed", msg = e.msgDetail proc markProofsAsMissing(validation: Validation) {.async.} = for slotId in validation.slots: diff --git a/config.nims b/config.nims index 031cdaa7..3acc58b5 100644 --- a/config.nims +++ b/config.nims @@ -95,7 +95,7 @@ if not defined(macosx): --define:nimStackTraceOverride switch("import", "libbacktrace") -switch("define", "codex_enable_proof_failures=true") +switch("define", "codex_testing=true") # `switch("warning[CaseTransition]", "off")` fails with "Error: invalid command line option: '--warning[CaseTransition]'" switch("warning", "CaseTransition:off")