Skip to content

feat(registrar): hinted nitro registration on pre-dynamic nitro-host - #4610

Draft
mw2000 wants to merge 12 commits into
feat/pre-dynamic-upgrade-nitro-host-newfrom
mihirwadekar/hinted-nitro-prover-on-nitro-host-new
Draft

feat(registrar): hinted nitro registration on pre-dynamic nitro-host#4610
mw2000 wants to merge 12 commits into
feat/pre-dynamic-upgrade-nitro-host-newfrom
mihirwadekar/hinted-nitro-prover-on-nitro-host-new

Conversation

@mw2000

@mw2000 mw2000 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Backports the hinted Nitro registrar cutover onto feat/pre-dynamic-upgrade-nitro-host-new so Zeronet/pre-dynamic nitro-host can register without Boundless/RISC Zero.
  • Replays the already-merged hinted stack from main: planner (#4373 / CHAIN-4835), contract clients (#4406), P-384 inverse hints (#4376 / CHAIN-4830), hinted cutover (#4425 / CHAIN-4834), Boundless removal (#4449), legacy attestation-prover removal (#4477), and hinted metrics (#4480 / CHAIN-4841).
  • Also includes the registrar/verifier prerequisites those diffs need on this older line (#4042, #4067, #4141, #4164) plus a serde_json contracts test dep the cutover tests require here.

Test plan

  • cargo check -p base-proof-tee-registrar -p base-proof-tee-registrar-bin -p base-proof-contracts --all-targets
  • cargo test -p base-proof-tee-registrar -p base-proof-tee-registrar-bin -p base-proof-contracts --lib
  • Confirm CI on this pre-dynamic base
  • After the hinted Registry upgrade on Zeronet, start a registrar canary and confirm it discovers non-zero NitroValidator / CertManager addresses (no config-service key changes required)

Made with Cursor

jackchuma and others added 12 commits August 18, 2026 12:58
Co-authored-by: Codex <codex-noreply@coinbase.com>
(cherry picked from commit 573f769)
Co-authored-by: Codex <codex-noreply@coinbase.com>
(cherry picked from commit ac1c815)
* fix(registrar): prevent processing unhealthy instances

Co-authored-by: Codex <codex-noreply@coinbase.com>

* fix(registrar): treat unhealthy targets as absent

Co-authored-by: Codex <codex-noreply@coinbase.com>

* fix(registrar): remove unreachable cache branch

Co-authored-by: Codex <codex-noreply@coinbase.com>

* fix(registrar): preserve unhealthy signer cache

Co-authored-by: Codex <codex-noreply@coinbase.com>

* fix(registrar): preserve cold-start unhealthy signer grace

Co-authored-by: Codex <codex-noreply@coinbase.com>

* docs(registrar): clarify unhealthy signer grace

Co-authored-by: Codex <codex-noreply@coinbase.com>

---------

Co-authored-by: Codex <codex-noreply@coinbase.com>
(cherry picked from commit 1345ec1)
…4164)

* fix(registrar): probe readyz to break registration health deadlock

ALB /healthz is registration-gated on nitro-host, so the registrar now
overlays discovery health with a direct readyz probe before registering.

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(registrar): streamline readiness probing

Avoid an intermediate readiness snapshot and stop pending probes promptly during shutdown.

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(registrar): simplify readiness probing

Remove redundant readiness state handling and polling noise while retaining
wire-level coverage for the host readiness endpoint.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): pipeline readiness probes with resolution

Allow healthy prover instances to resolve while another readiness request waits for its timeout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(registrar): simplify readiness probe test state

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
(cherry picked from commit 7ba1984)
* feat(registrar): add Rust Nitro attestation planner (CHAIN-4835)

Build CertManager-oriented registration plans from Nitro attestations via AttestationReport, without wiring into the Boundless path yet.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-Authored-By: Claude <noreply@anthropic.com>

* fix(registrar): address planner review feedback (CHAIN-4835)

Parse each cert once for cache/revocation keys, preserve typed Parse/Certificate error sources, and cover full plan construction against the Nitro fixture.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): align attestation planner with NitroValidator (CHAIN-4835)

Parse COSE with raw protected/payload TLVs, enforce CertManager DER/v3 rules, and pin Base fixture plan outputs so hinted registration cannot diverge from onchain acceptance.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): tighten Nitro COSE envelope checks (CHAIN-4835)

Require an empty unprotected header, reject indefinite COSE arrays with a clear error, and avoid silent u64-to-usize length truncation.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): address Nitro COSE planner review feedback (CHAIN-4835)

Add CBOR/COSE rejection unit tests, keep PCR/cabundle validators internal,
and document intentional dual validation plus exact-fit DER TLV preconditions.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): reject duplicate payload keys and oversized CBOR containers (CHAIN-4835)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): pin COSE/cert parsing to nitro-validator main (CHAIN-4835)

Agora's Go planner still encodes older contract rules (contiguous PCRs, empty unprotected maps). Match current NitroValidator/CertManager: compact 0xD2/0x84 envelopes, skip any unprotected map, sparse PCR bank, indefinite pcrs/cabundle, recognized-key duplicates only, and exact version-wrapper consume.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): use b256! for pinned root and document serial hashing (CHAIN-4835)

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude <noreply@anthropic.com>
(cherry picked from commit 2de80c2)
* feat(registrar): add hinted contract clients (CHAIN-4837)

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>

* fix(registrar): remove legacy CRL compatibility

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>

---------

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
(cherry picked from commit 054a3bd)
#4376)

* feat(registrar): port Agora P-384 inverse-hint generation (CHAIN-4830)

Add an offchain transcript collector that walks the onchain P-384 ECDSA
affine schedule and emits packed 48-byte BE inverses for CA/leaf cert
signatures and the attestation COSE sig. Exposed via P384Hints and
AttestationPlanner::prepare_hinted_registration_plan, but left unused by
the Boundless registrar path until hinted orchestration lands.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): address P-384 hints review feedback (CHAIN-4830)

Share one parse path for registration and hinted plans, fold the inverse
collector into P384Hints, and cover prepare_hinted_registration_plan against
for_registration_plan on the Base Nitro fixture.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): clarify P-384 pubkey width and reuse s⁻¹ (CHAIN-4830)

Separate the affine pubkey length constant from the signature encoding and
record the scalar inverse once while still appending it twice for transcript
parity with the onchain verifier.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): match onchain P-384 infinity and drop reserialized TBS

Treat x==0 as infinity in affine helpers and generate attestation hints only via raw plan TBS.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): silence needless_return in P-384 add_affine

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): keep twice3 going through intermediate x==0

Solidity only treats x==0 as infinity on twice3 entry; reusing twice_affine aborted early.

Co-authored-by: Cursor <cursoragent@cursor.com>

* style(registrar): rustfmt twice3 intermediate-x-zero test

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
(cherry picked from commit 9260231)
* feat(registrar): cut over to hinted registration (CHAIN-4834)

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>

* fix(registrar): address hinted registration review

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>

* fix(registrar): distinguish empty contract reverts

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>

---------

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
(cherry picked from commit 09104a6)
* refactor(registrar): remove Boundless deployment requirements

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>

* style(registrar): format metrics feature list

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>

---------

Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
(cherry picked from commit 771af22)
Co-authored-by: OpenCode <opencode-noreply@coinbase.com>
(cherry picked from commit 1469893)
* feat(registrar): add hinted registration metrics (CHAIN-4841)

Emit bounded-label metrics for hint generation, hint sizes, certificate-cache
lookups/transactions, recovery, and final registration so operators can see
the hinted path without Boundless-era proof stages.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): record hinted final-registration outcomes only on that path

Keep stale and observed-registered counts on the final registration attempt
so cache/plan freshness checks and recovery rereads do not skew the metric.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): close hinted metric gaps after submit

Record a failed cache-tx outcome when the receipt succeeds but the
certificate is still unusable, and a cancelled final-registration
outcome when shutdown lands after send.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): drop overlapping hinted registration metrics

Keep hint sizes and cert-cache series; reuse registration_stage_total for hint generation and final registration instead of parallel counters.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): close remaining cert-cache tx metric exits

Record cancelled when the post-send cache reread is cancelled, and failed when that reread returns a permanent cert error, so submitted stays reconcilable.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(registrar): derive cache-tx and stale metrics from outcomes, not exits

Recording metrics as side effects at each control-flow exit is why the submitted/terminal counts
kept drifting: `ensure_cert_cached` had eight returns that each had to remember a terminal, and
`proof_stale` lived in the shared freshness check, so it also fired once per revoked certificate on
the CRL path. One cache attempt now returns a CacheTxAttempt that the loop records once, and
proof_stale is classified at the registration-attempt boundary.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
(cherry picked from commit ebb0946)
The CHAIN-4834 error.rs tests need serde_json; this older nitro-host branch never added that contracts dev-dependency.

Co-authored-by: Cursor <cursoragent@cursor.com>
*keccak256(input)
}

fn cert_lock(&self, cert_hash: B256) -> Arc<AsyncMutex<()>> {
let mut locks = self.cert_locks.lock().unwrap_or_else(|poisoned| poisoned.into_inner());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unwrap_or_else(|poisoned| poisoned.into_inner()) silently swallows mutex poisoning throughout (cert_lock, and cert_locks lock). If the previous holder panicked, the HashMap invariants might be violated (e.g. a half-inserted entry). This is a defensive choice that keeps the system running, but consider at minimum logging a warning when the lock is poisoned so operators get visibility into the root-cause panic.

@@ -188,15 +347,14 @@ impl ProofTaskSet {
RegistrarMetrics::PROOF_TASK_OUTCOME_JOIN_ERROR,
);
let id = join_err.id();
let removed = self.pending.extract_if(|_, p| p.task_id == id).next();
let signer = removed.as_ref().map(|(signer, _)| *signer);
let removed = self.pending.extract_if(|_, pending| pending.task_id == id).next();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extract_if is a nightly-only API (#![feature(hash_extract_if)]). Depending on the project's MSRV and toolchain policy, this may break on stable Rust. If the project pins nightly, disregard — otherwise this should use .retain() plus a separate lookup, or iterate/collect/remove manually.

if revoked.is_empty() {
return Ok(true);
}
RegistrarMetrics::crl_revocations_detected().increment(revoked.len() as u64);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The count of revoked items is cast via as u64. revoked is a Vec<&CertCrlInfo> bounded by cert_infos, which itself is bounded by plan.certs (at most ~32 certificates). So the cast is safe here, but if this pattern appears in hotter paths consider using .try_into().unwrap_or(u64::MAX) for consistency with how other counters are handled.

}
} else {
// Each array item is at least one byte.
let remaining = bytes.len().saturating_sub(end) as u64;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor: remaining is computed as bytes.len().saturating_sub(end) as u64. If bytes.len() is equal to end (empty remaining), this correctly yields 0. However, the as u64 cast on usize is fine on 64-bit but on a hypothetical 128-bit platform would truncate. Low concern for this codebase, just noting for completeness.

}
unreachable!("bounded revocation retry loop must return")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The unreachable! at the end of submit_revocation's retry loop is correct when max_tx_retries >= 0 (which it always is as a u32), since the loop runs 0..=max_tx_retries and the final iteration either returns on non-retryable or when retry == self.max_tx_retries. Same logic applies to lines 784 and 1032.

However, consider whether a debug assertion or a more descriptive panic message (e.g., including the retry count) would help if this invariant were ever violated due to a future refactor.

@github-actions

Copy link
Copy Markdown
Contributor

Review Summary

Large PR introducing the base-tee-prover-registrar crate with hinted CertManager contract bindings, CRL checking, CBOR/COSE attestation parsing, P-384 inverse-hint generation, and a full registration orchestration loop. The code is well-structured with thorough test coverage and careful error handling throughout.

Findings

Minor / Informational:

  1. Mutex poisoning silently swallowed (signer_manager.rs:178): unwrap_or_else(|poisoned| poisoned.into_inner()) suppresses panics from previous lock holders. While this keeps the system running, a warning log on poison would give operators visibility into the root-cause panic.

  2. unreachable! after bounded retry loops (signer_manager.rs:694,784,1032): The unreachable! is provably correct given the current loop structure, but a more descriptive panic message (e.g., including the retry count) would help if a future refactor breaks the invariant.

  3. as u64 cast on collection length (signer_manager.rs:613): The revoked.len() as u64 cast is safe here (bounded by ~32 certs), but using .try_into().unwrap_or(u64::MAX) would be more robust as a pattern.

Note: I posted an inline comment about extract_if potentially being nightly-only, but it was stabilized in Rust 1.87.0 and the project pins 1.94.1, so that comment should be disregarded. I also posted a comment about as u64 on usize in cbor.rs:147 — this is safe on all Rust-supported platforms (max 64-bit usize) and can be ignored.

Architecture

  • Clean crate layering: base-proof-contracts provides contract bindings, base-tee-prover-registrar owns orchestration logic, base-proof-tee-nitro-verifier handles attestation verification. No dependency direction violations.
  • lib.rs follows project conventions (minimal, include_str! doc, grouped mod/re-export).
  • Error types are well-structured with thiserror enums and appropriate From impls.
  • Cancellation handling via CancellationToken::run_until_cancelled is consistently applied across all async operations.
  • CRL checking follows a deliberate fail-open policy with host allowlisting — the security implications are documented and bounded by onchain expiry tracking.

No blocking issues found.

@github-actions

Copy link
Copy Markdown
Contributor

❌ base-std fork tests: 250 failed, 596 passed

base/base diverges from the base-std spec.

Dependency Ref Commit
base-std main fc13edf1
base-anvil 0092692587d8d064dd2c6923ce26a682c58f3694 00926925
Failing tests
  • test_cancelUIMultiplierUpdate_revert_matured(uint256): custom error 0x628e600f; counterexample: calldata=0xea4532b3000000000000000000000000000000000000000000000000000000000000ddb8 args=[56760 [5.676e4]]
  • test_cancelUIMultiplierUpdate_revert_unauthorized(address): custom error 0x628e600f; counterexample: calldata=0x22f9091c000000000000000000000000cb00000000000000000000000000000000000000 args=[0xCB00000000000000000000000000000000000000]
  • test_cancelUIMultiplierUpdate_success_clearsPending(uint256,uint256): custom error 0x628e600f; counterexample: calldata=0x8e8d7788000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000179b args=[26, 6043]
  • test_cancelUIMultiplierUpdate_success_emitsEvent(uint256,uint256): custom error 0x628e600f; counterexample: calldata=0xd24efe3300000000000000000000000000091ad1130bd6a0bd26c6c93af50dfaed48a8d300000000000000000093b2f59f76b2fd90bf053914b5ffe8412fc4a01eff1c8c args=[203042770552488206883510737971821723943217363 [2.03e44], 14146759466593007306711426957761186916604206662142598284 [1.414e55]]
  • test_cancelUIMultiplierUpdate_success_leavesCurrentUntouched(uint256): custom error 0x628e600f; counterexample: calldata=0xaf91437300000000000000000000000000000000000000000000000000000000000012da args=[4826]
  • test_childrenSlot_success_locatesChildArray(uint8): custom error 0x6fdd1491; counterexample: calldata=0x69fce77600000000000000000000000000000000000000000000000000000000000000b8 args=[184]
  • test_compositePolicyChildIds_success_emptyForMalformedId(uint64): custom error 0x7c40df74; counterexample: calldata=0x1ae49a5d0000000000000000000000000000000000000000000000000000000001e13380 args=[31536000 [3.153e7]]
  • test_compositePolicyChildIds_success_emptyForUncreated(uint64): custom error 0x7c40df74; counterexample: calldata=0x26541667000000000000000000000000000000000000000000000000000000004e487b71 args=[1313373041 [1.313e9]]
  • test_conversion_deprecated_stillDialable(uint256): custom error 0x3248d4ff; counterexample: calldata=0x5f1549560000000000000000000000000000000000000000000019161f44c3ce5f84aa4f args=[118467243582367465777743 [1.184e23]]
  • test_createCompositePolicy_revertOrder(uint8): custom error 0x6fdd1491; counterexample: calldata=0x5fafe4f70000000000000000000000000000000000000000000000000000000000000098 args=[152]
  • test_createCompositePolicy_revert_builtinChild(address,address,uint8): Error != expected error: custom error 0x6fdd1491 != InvalidChildPolicy(0); counterexample: calldata=0x87108a4b0000000000000000000000007a744ba1f6cca9b7197b2c1bc33bf11c2509367f00000000000000000000000092144147d497539740729591f6513242ba4c1c830000000000000000000000000000000000000000000000000000000000000000 args=[0x7A744bA1f6cca9b7197b2c1Bc33bf11c2509367F, 0x92144147d497539740729591f6513242bA4C1c83, 0]
  • test_createCompositePolicy_revert_childPoliciesOutsideOfRange(address,address,uint8,uint8): Error != expected error: custom error 0x6fdd1491 != ChildPoliciesOutsideOfRange(); counterexample: calldata=0xb84664360000000000000000000000004e57327ac63472a77ed13d6056b5ca4b067970d300000000000000000000000029003082981d48c5d2b84f0e35a0bf94d5f6622f000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000ac args=[0x4e57327ac63472A77ED13D6056b5cA4B067970d3, 0x29003082981D48C5D2b84F0E35a0bF94D5F6622f, 7, 172]
  • test_createCompositePolicy_revert_incompatiblePolicyType(address,address,uint8): Error != expected error: custom error 0x6fdd1491 != IncompatiblePolicyType(); counterexample: calldata=0x97326925000000000000000000000000521592955cde0cfa1b7fedca02cbed80ed99ea21000000000000000000000000a58bbd8913a13be91bc16c91b914226b5a463cc00000000000000000000000000000000000000000000000000000000000000000 args=[0x521592955cDE0cfa1B7FEdCA02cBEd80ed99EA21, 0xA58bBD8913A13BE91bC16C91B914226b5a463Cc0, 0]
  • test_createCompositePolicy_revert_invalidChildPolicy(address,address,uint8): custom error 0x6fdd1491; counterexample: calldata=0x7416f4590000000000000000000000000000000000000000000000000000000000002c5400000000000000000000000084530000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000009 args=[0x0000000000000000000000000000000000002c54, 0x8453000000000000000000000000000000000001, 9]
  • test_createCompositePolicy_revert_policyNotFound(address,address,uint8,uint64): Error != expected error: custom error 0x6fdd1491 != PolicyNotFound(); counterexample: calldata=0x1803f60500000000000000000000000000000000000000000000000000000000000009eb000000000000000000000000cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000098 args=[0x00000000000000000000000000000000000009eB, 0xCB00000000000000000000000000000000000000, 23, 152]
  • test_createCompositePolicy_revert_zeroAdmin(address,uint8): Error != expected error: custom error 0x6fdd1491 != ZeroAddress(); counterexample: calldata=0xb18b5cb10000000000000000000000007af7f4cf5a7b8121881c6af84c614b74fe69edd2000000000000000000000000000000000000000000000000000000000000000f args=[0x7aF7f4cf5A7b8121881C6AF84C614B74fe69Edd2, 15]
  • test_createCompositePolicy_success_advancesNextPolicyId(address,uint8,uint8): custom error 0x6fdd1491; counterexample: calldata=0xf9a1ca77000000000000000000000000b20f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000006e args=[0xB20f000000000000000000000000000000000000, 18, 110]
  • test_createCompositePolicy_success_atMaxChildren(address,address,uint8): custom error 0x6fdd1491; counterexample: calldata=0x296e3341000000000000000000000000d14a061348a3720978fe9a60446ca66b5175d909000000000000000000000000be5f71e0aed6cc17a67370bfc26d464bae1bb6ad0000000000000000000000000000000000000000000000000000000000000004 args=[0xd14A061348A3720978FE9a60446CA66b5175D909, 0xBe5F71e0AeD6CC17A67370bfc26d464Bae1Bb6AD, 4]
  • test_createCompositePolicy_success_emitsCompositePolicyUpdated(address,address,uint8): log != expected log; counterexample: calldata=0x1694cfe00000000000000000000000002b8939337efe629b0d451e5a2e0ed68dd71e37f700000000000000000000000098c800bdceef470bf94526557d2c44d9854301c2000000000000000000000000000000000000000000000000000000000000000d args=[0x2b8939337efe629B0d451e5a2E0ed68Dd71e37F7, 0x98C800bDcEef470BF94526557d2c44D9854301c2, 13]
  • test_createCompositePolicy_success_emitsInitialPolicyAdminUpdated(address,address,uint8): log != expected log; counterexample: calldata=0xd6a6c2b200000000000000000000000051699a682442d41ee68fc451598d0b765f52eb4b00000000000000000000000039de2096fe90bad40f18fe0d58201a9b2092727a00000000000000000000000000000000000000000000000000000000000000fd args=[0x51699a682442d41ee68fC451598d0B765f52eb4B, 0x39dE2096FE90bAd40F18FE0D58201a9B2092727a, 253]
  • test_createCompositePolicy_success_emitsPolicyCreated(address,address,uint8): log != expected log; counterexample: calldata=0x89031165000000000000000000000000cb00000000000000000000000000000000000000000000000000000000000000cb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 args=[0xCB00000000000000000000000000000000000000, 0xCB00000000000000000000000000000000000000, 4]
  • test_createCompositePolicy_success_intersect(address,address): custom error 0x6fdd1491; counterexample: calldata=0xccbe0bd4000000000000000000000000bdcbb2c4edff069dac69d63a771d857a1cef1ff00000000000000000000000009e3525ec51a24f73a3a5275639999a7ab59e5e27 args=[0xbDCBb2C4eDFF069dac69d63A771d857A1cEf1ff0, 0x9E3525eC51a24f73A3a5275639999A7Ab59e5e27]
  • test_createCompositePolicy_success_union(address,address): custom error 0x6fdd1491; counterexample: calldata=0xd748b1fe00000000000000000000000038344794c320490f33731eb50b1380109f8394be0000000000000000000000008d84aaf8a3b82d514a801e7673ba1fe9925a637f args=[0x38344794c320490F33731Eb50B1380109F8394bE, 0x8D84aaf8a3b82d514A801E7673bA1fe9925a637f]
  • test_createPolicyWithAccounts_revertOrder(address,address,uint8,uint8): Error != expected error: custom error 0xa2d3044f: type check failed for "(address,uint8,address[])" with data: 000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000470000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000000010020000000000000000000000000000000000000000000000000000000000001003000000000000000000000000000000000000000000000000000000000000100400000000000000000000000000000000000000000000000000000000000010050000000000000000000000000000000000000000000000000000000000001006000000000000000000000000000000000000000000000000000000000000100700000000000000000000000000000000000000000000000000000000000010080000000000000000000000000000000000000000000000000000000000001009000000000000000000000000000000000000000000000000000000000000100a000000000000000000000000000000000000000000000000000000000000100b000000000000000000000000000000000000000000000000000000000000100c000000000000000000000000000000000000000000000000000000000000100d000000000000000000000000000000000000000000000000000000000000100e000000000000000000000000000000000000000000000000000000000000100f0000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000101100000000000000000000000000000000000000000000000000000000000010120000000000000000000000000000000000000000000000000000000000001013000000000000000000000000000000000000000000000000000000000000101400000000000000000000000000000000000000000000000000000000000010150000000000000000000000000000000000000000000000000000000000001016000000000000000000000000000000000000000000000000000000000000101700000000000000000000000000000000000000000000000000000000000010180000000000000000000000000000000000000000000000000000000000001019000000000000000000000000000000000000000000000000000000000000101a000000000000000000000000000000000000000000000000000000000000101b000000000000000000000000000000000000000000000000000000000000101c000000000000000000000000000000000000000000000000000000000000101d000000000000000000000000000000000000000000000000000000000000101e000000000000000000000000000000000000000000000000000000000000101f0000000000000000000000000000000000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000102100000000000000000000000000000000000000000000000000000000000010220000000000000000000000000000000000000000000000000000000000001023000000000000000000000000000000000000000000000000000000000000102400000000000000000000000000000000000000000000000000000000000010250000000000000000000000000000000000000000000000000000000000001026000000000000000000000000000000000000000000000000000000000000102700000000000000000000000000000000000000000000000000000000000010280000000000000000000000000000000000000000000000000000000000001029000000000000000000000000000000000000000000000000000000000000102a000000000000000000000000000000000000000000000000000000000000102b000000000000000000000000000000000000000000000000000000000000102c000000000000000000000000000000000000000000000000000000000000102d000000000000000000000000000000000000000000000000000000000000102e000000000000000000000000000000000000000000000000000000000000102f0000000000000000000000000000000000000000000000000000000000001030000000000000000000000000000000000000000000000000000000000000103100000000000000000000000000000000000000000000000000000000000010320000000000000000000000000000000000000000000000000000000000001033000000000000000000000000000000000000000000000000000000000000103400000000000000000000000000000000000000000000000000000000000010350000000000000000000000000000000000000000000000000000000000001036000000000000000000000000000000000000000000000000000000000000103700000000000000000000000000000000000000000000000000000000000010380000000000000000000000000000000000000000000000000000000000001039000000000000000000000000000000000000000000000000000000000000103a000000000000000000000000000000000000000000000000000000000000103b000000000000000000000000000000000000000000000000000000000000103c000000000000000000000000000000000000000000000000000000000000103d000000000000000000000000000000000000000000000000000000000000103e000000000000000000000000000000000000000000000000000000000000103f0000000000000000000000000000000000000000000000000000000000001040000000000000000000000000000000000000000000000000000000000000104100000000000000000000000000000000000000000000000000000000000010420000000000000000000000000000000000000000000000000000000000001043000000000000000000000000000000000000000000000000000000000000104400000000000000000000000000000000000000000000000000000000000010450000000000000000000000000000000000000000000000000000000000001046 != ZeroAddress(); counterexample: calldata=0x50803f4c00000000000000000000000071b23371292ca8141beeaf05e61b57894ca1dd6e000000000000000000000000ca26866e8e8eb684432084a847947bd34e45a33500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006 args=[0x71b23371292cA8141bEeaf05E61b57894ca1DD6e, 0xcA26866E8E8eb684432084a847947bD34E45A335, 5, 6]
  • test_createPolicyWithAccounts_revert_incompatiblePolicyType(address,address,uint8,address[]): Error != expected error: custom error 0xa2d3044f: type check failed for "(address,uint8,address[])" with data: 000000000000000000000000000000000000000000000000000000000000002000000000000000000000000092afef20a1d4aa5ef77655d470258508ceede18b000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000 != IncompatiblePolicyType(); counterexample: calldata=0x845707ef0000000000000000000000002c4c867e343f9461d205939f93754564c8ca605200000000000000000000000092afef20a1d4aa5ef77655d470258508ceede18b00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000090ac701ec3b3969e277a9099d871d97904a9ae5900000000000000000000000029c6bc1c823ec10374f9d6495d82c04eda7f45c5000000000000000000000000a4fd4d87b60a886d66986562ac54edacc9d502410000000000000000000000002d3ea2ba39ad9aa601e4b8894e0591fee98ddaaf000000000000000000000000c2f6e13677563e8f3cfdf70e2658924ee2d82a30000000000000000000000000443a689c56df81e76e448a8b5f1951280d7739530000000000000000000000005572399eb161fa0f2c147afb7b485e9e7ba38209000000000000000000000000736aa7b1f9e4d4190c5020be98e1d40163b3ea86000000000000000000000000cd613753a68621b939bd3bc52a2f817cb2775650000000000000000000000000e2bbeddda4ed7d6a99eedd7166d74ce16e689170000000000000000000000000bb01796c5cc332f61234e104ce8083436a4fd802000000000000000000000000de5f29c16a4a72ed712d43d91c2d39c85b65b39f args=[0x2c4c867E343f9461D205939F93754564C8Ca6052, 0x92afeF20a1D4aa5ef77655D470258508cEEde18b, 4, [0x90AC701eC3B3969e277a9099D871D97904a9AE59, 0x29c6Bc1C823EC10374F9d6495d82C04EdA7F45C5, 0xA4FD4d87B60a886d66986562AC54EdacC9D50241, 0x2d3eA2ba39Ad9Aa601E4B8894e0591feE98DDaAf, 0xc2F6E13677563e8f3Cfdf70e2658924EE2D82a30, 0x443A689C56Df81e76e448A8B5F1951280d773953, 0x5572399Eb161Fa0F2C147aFb7b485e9E7bA38209, 0x736AA7b1f9E4D4190c5020BE98E1D40163B3EA86, 0xCd613753A68621B939BD3Bc52a2F817Cb2775650, 0xE2bBeDDDA4eD7d6A99EEdD7166D74Ce16e689170, 0xbb01796C5CC332F61234E104Ce8083436a4FD802, 0xDe5F29C16a4A72eD712D43d91c2d39c85B65b39F]]
  • test_createPolicy_revert_incompatiblePolicyType(address,address,uint8): Error != expected error: custom error 0xca5d55f6: type check failed for "(address,uint8)" with data: 00000000000000000000000038cd4d23dcc4ae01f8845ba8c54e71d48821fed70000000000000000000000000000000000000000000000000000000000000002 != IncompatiblePolicyType(); counterexample: calldata=0x1ade0d6f000000000000000000000000383ad28d127141e5f6810a305f80e7516e11da3900000000000000000000000038cd4d23dcc4ae01f8845ba8c54e71d48821fed7000000000000000000000000000000000000000000000000000000000000000e args=[0x383AD28D127141e5F6810a305f80e7516E11DA39, 0x38cD4d23dCC4aE01f8845ba8c54E71D48821FeD7, 14]
  • test_erc8056Surface_success_aliasesResolve(uint256): custom error 0xa60bf13d; counterexample: calldata=0x91648cee00000000000000000000000000000000000000000000000000000000000f4240 args=[1000000 [1e6]]
  • test_fromUIAmount_success_explicitZeroMultiplierFallsBackToWad(uint256): custom error 0x65cd9b3c; counterexample: calldata=0x2e5d48fc0000000000000000000000000000000000000000000007cbfbfed40caf758498 args=[36819412610949108303000 [3.681e22]]
  • test_fromUIAmount_success_identityOnWadDefault(uint256): custom error 0x65cd9b3c; counterexample: calldata=0x143250550000000000000000000000000000000000000000000000000000000001e13380 args=[31536000 [3.153e7]]
  • test_fromUIAmount_success_invertsByStoredMultiplier(uint256,uint256): custom error 0x65cd9b3c; counterexample: calldata=0xe11ab12f00000000000000000000000000000000000000000000000000000000006e07a60000000000000000000000000000000029d2055fc734c5ed6cddb915ed5f5791 args=[7210918 [7.21e6], 55588839167848637487499414635926214545 [5.558e37]]
  • test_fromUIAmount_success_roundTripExactOnWadDefault(uint256): custom error 0x3248d4ff; counterexample: calldata=0x76c2c36bc5044227cbcb9fa9ad8b0468dd202f4fad9ea05bde109a9aa47d2ad24f64e0d8 args=[89113155147321561376183768861454225891981745751299681506580837169600919822552 [8.911e76]]
  • test_fromUIAmount_success_roundTripFloors(uint256,uint256): custom error 0x3248d4ff; counterexample: calldata=0x3f088b7a00000000000013d6b4542c3bef0814593350bf366c4e116db756b64b287f71d80000001858a9728ce6eed3e63d5c95796035faf06c8700351ec98dac060a90ac args=[31879544261602795893057318399701169948568074247526190319366616 [3.187e61], 656375908321388955678257897567583902187826324346014594100066593181868 [6.563e68]]
  • test_fromUIAmount_success_zeroUIAmount(uint256): custom error 0x65cd9b3c; counterexample: calldata=0x1da8227300000000000000000000000000000000000000000000000000000000007573cf args=[7697359 [7.697e6]]
  • test_isAuthorized_success_composite_mixedChildTypes(address): custom error 0x6fdd1491; counterexample: calldata=0xca56e88d00000000000000000000000000000000000000000000000000000000000019f6 args=[0x00000000000000000000000000000000000019f6]
  • test_isAuthorized_success_composite_reflectsChildMembershipChange(address): custom error 0x6fdd1491; counterexample: calldata=0x9154ecaf0000000000000000000000008453000000000000000000000000000000000002 args=[0x8453000000000000000000000000000000000002]
  • test_isAuthorized_success_intersect_allChildrenAuthorize(address): custom error 0x6fdd1491; counterexample: calldata=0x12f37cef0000000000000000000000003fcc6e153d0182e2bfcdf390dab4d9f4a22c34b5 args=[0x3FcC6E153d0182E2bFCdF390dAB4D9f4A22C34B5]
  • test_isAuthorized_success_intersect_oneChildDenies(address): custom error 0x6fdd1491; counterexample: calldata=0x70fa07e600000000000000000000000000000000000000000000000000000000000002e0 args=[0x00000000000000000000000000000000000002e0]
  • test_isAuthorized_success_union_anyChildAuthorizes(address): custom error 0x6fdd1491; counterexample: calldata=0x1ab541130000000000000000000000000000000000000000000000000000000000001078 args=[0x0000000000000000000000000000000000001078]
  • test_isAuthorized_success_union_noChildAuthorizes(address): custom error 0x6fdd1491; counterexample: calldata=0x18ea2b87000000000000000000000000719d03f3521974b3247d0fb756425fe8998fbefb args=[0x719d03f3521974B3247d0FB756425fe8998FBEFb]
  • test_multiplier_success_renamedFromShareRatio(uint256): custom error 0x3248d4ff; counterexample: calldata=0x94be8dcc0000000000000000000000000000000030ebe8d72c6b7b50cb482ac22e00db77 args=[65027856126261911982761215915286649719 [6.502e37]]
  • test_newUIMultiplier_success_maturedMirrorsUiMultiplier(uint256): custom error 0x628e600f; counterexample: calldata=0x42f477220000000000000000000000000000000000000000000000004563918244f40000 args=[5000000000000000000 [5e18]]
  • test_newUIMultiplier_success_reportsLivePending(uint256,uint256): custom error 0xa60bf13d; counterexample: calldata=0xf706898000000000000000000000000000000000000000000000000000000000002ea7ea00000000000000009ac40dd6977c3a15a6ef9aa0d7fca8f7c412b4fd54d99506 args=[3057642 [3.057e6], 3794847260572784670247420358779314536231665336872286655750 [3.794e57]]
  • test_pendingSlot_success_decodesScheduledPending(uint256,uint256): custom error 0x628e600f; counterexample: calldata=0x24184370003f045f7e0a12b3294d6d195c3e2960d20f793fdc5edc9a0136f919d1d22d9900003685561b7351f6ee9ddbee08d9a74ec8586f7e17c16b73e10a58e6016f24 args=[111341546534851315459926838424844232156370518845879654117980551446780849561 [1.113e74], 376289043782973112538096658017144202740158730031159892855532097026223908 [3.762e71]]
  • test_policyId_success_reflectsUpdatePolicy(uint8,uint64): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xa21d943e00000000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000078 args=[255, 120]
  • test_policyId_success_zeroByDefault(uint8): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x11a5c8f400000000000000000000000000000000000000000000000000000000000000ff args=[255]
  • test_scheduledSetter_success_renamedFromSetUIMultiplier(uint256): custom error 0x628e600f; counterexample: calldata=0x1e36717a43ee1bbe25e988521cccd8b2c8fbd38c8287ebff8e074e825a70dfd3885cce00 args=[30725661930029958086500481344167492979928112173235486490783953953212866547200 [3.072e76]]
  • test_seizeWithMemo_revertOrder_blocked_beats_balance(address,address): Error != expected error: custom error 0xf916d81b != AccountNotSeizable(0x00000000000000000000000000000000000019f6); counterexample: calldata=0x8dcc06c200000000000000000000000000000000000000000000000000000000000019f600000000000000000000000000000000000000000000000000000000000004bb args=[0x00000000000000000000000000000000000019f6, 0x00000000000000000000000000000000000004bb]
  • test_seizeWithMemo_revertOrder_blocked_beats_receiver(address,address): UnsupportedPolicyType(0xbf15b19caf5c77422c038bc25f26b8b815c3a14f6d04c6616076b81bcfe07b3d); counterexample: calldata=0x95d54d9400000000000000000000000007edd85636344d1952d21251a12c3d5bff6d59e5000000000000000000000000d16301847d02e2e037bf108dddda65611f603808 args=[0x07edd85636344d1952d21251A12c3d5Bff6D59E5, 0xD16301847d02e2e037BF108DDDda65611f603808]
  • test_seizeWithMemo_revertOrder_pause_beats_blocked(address,address): custom error 0xa290249c: type check failed for "(uint8[])" with data: 0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003; counterexample: calldata=0xd8656555000000000000000000000000cdfd048798aac455dd339203541f93d0f3ad50ae000000000000000000000000955c2937c278557662f411a026f455c53e8d0db4 args=[0xCdfD048798AAc455dD339203541F93D0F3ad50Ae, 0x955C2937c278557662F411a026f455c53e8d0db4]
  • test_seizeWithMemo_revertOrder_pause_beats_role(address,address,address): custom error 0xa290249c: type check failed for "(uint8[])" with data: 0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003; counterexample: calldata=0xadeb3963000000000000000000000000a35434fad6feb36d3cd65176c91fb557b67cb2c20000000000000000000000003a446a1b4ca975efdecc6e5b681f2cfd8a7e0310000000000000000000000000789ea5151e7afcb83ed252a44b033e56acbf258b args=[0xA35434FAD6fEb36d3cD65176c91fb557b67cb2c2, 0x3A446A1B4Ca975eFDEcC6e5b681F2cFd8A7E0310, 0x789ea5151E7aFCb83ED252a44b033E56acbF258b]
  • test_seizeWithMemo_revertOrder_receiver_beats_balance(address,address): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xc375ac63000000000000000000000000aa0b19d87ea3daa2cc4abb6671206971f78db6f8000000000000000000000000fea3d03a8f13759e5a812f8937de37107ab8f406 args=[0xAA0B19D87ea3daA2cC4abB6671206971F78Db6f8, 0xfea3d03a8F13759E5A812F8937De37107AB8f406]
  • test_seizeWithMemo_revertOrder_role_beats_selfSeize(address,address): Error != expected error: custom error 0xf916d81b != AccessControlUnauthorizedAccount(0xEfA75f38FE94f8B76c316890C8f7caFD64658674, 0x3469b8b0d89e9604f8510ed143f74a8336d22955d4f83e23bf53d9414e27f432); counterexample: calldata=0x6af0841d000000000000000000000000efa75f38fe94f8b76c316890c8f7cafd6465867400000000000000000000000007384a92ca21fbbf503aa16d841432afde00cf00 args=[0xEfA75f38FE94f8B76c316890C8f7caFD64658674, 0x07384a92CA21fbBf503aA16D841432aFde00cf00]
  • test_seizeWithMemo_revertOrder_role_beats_zeroActors(address,address): Error != expected error: custom error 0xf916d81b != AccessControlUnauthorizedAccount(0x0000000000000000000000000000000000000763, 0x3469b8b0d89e9604f8510ed143f74a8336d22955d4f83e23bf53d9414e27f432); counterexample: calldata=0x36c308ae000000000000000000000000000000000000000000000000000000000000076300000000000000000000000000000000000000000000000000000000000007a2 args=[0x0000000000000000000000000000000000000763, 0x00000000000000000000000000000000000007A2]
  • test_seizeWithMemo_revertOrder_selfSeize_beats_blocked(address): Error != expected error: custom error 0xf916d81b != InvalidReceiver(0x55e8e99c6d03a9786bDFA1f52C91ff07FC27C457); counterexample: calldata=0xbff2d70b00000000000000000000000055e8e99c6d03a9786bdfa1f52c91ff07fc27c457 args=[0x55e8e99c6d03a9786bDFA1f52C91ff07FC27C457]
  • test_seizeWithMemo_revertOrder_zeroActors_beats_blocked(address): Error != expected error: custom error 0xf916d81b != InvalidReceiver(0x0000000000000000000000000000000000000000); counterexample: calldata=0x02c145c50000000000000000000000002a622a9b0c5543e39aae2de194f562fbc8294903 args=[0x2a622a9b0c5543E39aAE2de194F562fbc8294903]
  • test_seizeWithMemo_revertOrder_zeroSender_beats_blocked(address): Error != expected error: custom error 0xf916d81b != InvalidSender(0x0000000000000000000000000000000000000000); counterexample: calldata=0xfb590705000000000000000000000000cb00000000000000000000000000000000000000 args=[0xCB00000000000000000000000000000000000000]
  • test_seizeWithMemo_revert_accountNotBlocked(address,address,uint256): Error != expected error: custom error 0xf916d81b != AccountNotSeizable(0x547cd263ea2944B3e37AA5dd069486e53284e885); counterexample: calldata=0x41754db2000000000000000000000000547cd263ea2944b3e37aa5dd069486e53284e88500000000000000000000000064110a2c03129312720ea9c6b3bde417728e4412000000000000000000000000000000000000013e1fd557297399105ab9951c84 args=[0x547cd263ea2944B3e37AA5dd069486e53284e885, 0x64110A2c03129312720ea9c6b3Bde417728e4412, 25204407627650629191540527144068 [2.52e31]]
  • test_seizeWithMemo_revert_insufficientBalance(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x033c5005000000000000000000000000e7f9bcdbd65a5c5976d640e603147b6b9b475f7c00000000000000000000000042faf747c0c8c92536b5d0df4d2aee90cb62b88d000000000000000000000000000000000000000000000000000004667a46643c args=[0xE7F9BcDbD65A5C5976d640E603147B6b9B475f7C, 0x42FAf747C0c8C92536B5d0dF4D2AeE90cb62B88d, 4838184608828 [4.838e12]]
  • test_seizeWithMemo_revert_invalidReceiver(address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x92e9b3880000000000000000000000005358bd2c28c5065191ec0ec3ebd7e6b93a1730cb0c22867d50dd5aec676b2dffc9bf7f9475090d115065a553ccdb401fb8b9a1a6 args=[0x5358bd2c28c5065191EC0Ec3EBd7e6b93A1730cb, 5488755195721508625695595483623981955632041016835842801107418826454270058918 [5.488e75]]
  • test_seizeWithMemo_revert_receiverPolicyForbids(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x05a3631f000000000000000000000000e2a75c960d6c137069b21bbd81b45330abbedeb400000000000000000000000083adb2250df6f8aa7b673c36657e08d67d7788c40000000000000000000000000000000000000000000000000000000000000001 args=[0xe2A75C960D6C137069B21bBd81b45330AbbEDEB4, 0x83adB2250dF6F8aA7b673C36657E08D67D7788c4, 1]
  • test_seizeWithMemo_revert_selfSeize(address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xffbeec2200000000000000000000000021d6ca159df0e57c7aaddbf3c55c5538ee6ef8d600000000000000000000000000000000000000000000013ce958c09b40261b95 args=[0x21d6CA159DF0E57C7aaDDbF3C55c5538Ee6Ef8d6, 5845985528274034760597 [5.845e21]]
  • test_seizeWithMemo_revert_unauthorized(address,address,address,uint256): Error != expected error: custom error 0xf916d81b != AccessControlUnauthorizedAccount(0x0000000000000000000000000000000000000C3d, 0x3469b8b0d89e9604f8510ed143f74a8336d22955d4f83e23bf53d9414e27f432); counterexample: calldata=0x0334937c0000000000000000000000000000000000000000000000000000000000000c3d000000000000000000000000b20f00000000000000000000000000000000000000000000000000000000000084530000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000018160ddc args=[0x0000000000000000000000000000000000000C3d, 0xB20f000000000000000000000000000000000000, 0x8453000000000000000000000000000000000002, 404098524 [4.04e8]]
  • test_seizeWithMemo_revert_whenSeizePaused(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x83c47ba40000000000000000000000006bedfd8a3c33ca05ee7b8b6080061f4f5b1881ed0000000000000000000000009612bad3864501b35501c56c08ccba95dd017f5c0000000000000000000000000000000006c124ea838422e8506eeb0f98353622 args=[0x6bEdfD8a3c33CA05eE7b8B6080061f4F5b1881eD, 0x9612bAD3864501b35501C56c08CcBA95Dd017F5C, 8978230015244756108405693088796063266 [8.978e36]]
  • test_seizeWithMemo_revert_zeroFrom(address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xdf1bcb7a000000000000000000000000107010700f6369bacb932e250174d24c9445a5730000000000000000000000000000000000000000000000000000000000000002 args=[0x107010700f6369bACb932e250174D24c9445A573, 2]
  • test_seizeWithMemo_success_configuredReceiverPolicyAllows(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xd1038b0d000000000000000000000000c2078dd8e58673b7bdbb13156585ea582dc29a48000000000000000000000000e6c68f02a478bea3a7f4efc9d5ec20f92589d23c00000000000000000d1693ef82124dfd53f0943716fb959c6da74681e272b342 args=[0xC2078DD8E58673b7bdbb13156585ea582dc29a48, 0xe6c68F02a478BEA3A7f4EFc9d5Ec20F92589d23C, 320921603139879845812897547518654648919710275272925426498 [3.209e56]]
  • test_seizeWithMemo_success_emitsEvents(address,address,uint256,bytes32): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x984936cb000000000000000000000000000000000000000000000000000000000000094300000000000000000000000000000000000000000000000000000000000002e30000000000000000000000000000000000000000000000000000000000069780626173652e6232305f746f6b656e000000000000000000000000000000000000 args=[0x0000000000000000000000000000000000000943, 0x00000000000000000000000000000000000002E3, 432000 [4.32e5], 0x626173652e6232305f746f6b656e000000000000000000000000000000000000]
  • test_seizeWithMemo_success_ignoresReceiverPolicy(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x6358be6c000000000000000000000000b1ec48cc944429758e91bd2a7120c706f6b172860000000000000000000000003ef2f3c24878c9bad56531574c421ddc29b18d42000000000000000000000000003403cb7f6ac9b3c79ad59ae0a419e9530b3b95 args=[0xB1ec48cc944429758E91BD2A7120c706F6B17286, 0x3EF2f3C24878c9BAD56531574c421ddC29b18d42, 1159969333868302574243012165115754559046368149 [1.159e45]]
  • test_seizeWithMemo_success_movesBalance(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xc4ab022a000000000000000000000000d998006bc99179cc473d8e9683dc8dca40101978000000000000000000000000674c4c1c603a420a8382191e157ae0d404e2149600000001b34a8162dc14aa9a3d4a0b0df8682dcc0ed2064bb591f1fb6de89e4a args=[0xd998006BC99179cc473d8e9683Dc8dcA40101978, 0x674c4C1C603a420a8382191E157AE0d404e21496, 45841496625692861756260888328793554591602110846395830344102986686026 [4.584e67]]
  • test_seizeWithMemo_success_noAllowanceRequired(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xdc26e1f50000000000000000000000000401270ac4062baa04ab21b26f52f2a18e4a1636000000000000000000000000fcd42a2c85094a4879cc8de00bfbd4264002f5bf0000000005783719b0cccecec67cfb627b1c28f2591945b174f65ce7fe5d1c8c args=[0x0401270ac4062BAa04Ab21B26f52F2A18e4a1636, 0xFCD42a2C85094A4879cC8de00bfbD4264002F5bf, 576015137917523881063647162171176824844955904387660142131246079116 [5.76e65]]
  • test_seizeWithMemo_success_unsetReceiverPolicyAllowsAnyDestination(address,address,uint256): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x47ad42e20000000000000000000000004980d9dd52bbcb921ceb170a1bb7d0c9fc020b2d00000000000000000000000099a5f954f9157937d6b24893c1ed32a5a68993040000000000000000000000518bd70262c468aac7a06bfad2097e290193534b37 args=[0x4980D9dd52BbCB921CEb170A1BB7D0C9fC020b2d, 0x99a5f954f9157937d6B24893C1Ed32A5A6899304, 119179977208998650123987587576505297405131007150903 [1.191e50]]
  • test_supportsInterface_success_unknownFalse(bytes4): custom error 0x01ffc9a7; counterexample: calldata=0xf84ff4060000000000000000000000000000000000000000000000000000000000000000 args=[0x00000000]
  • test_toUIAmount_success_explicitZeroMultiplierFallsBackToWad(uint256): custom error 0x3248d4ff; counterexample: calldata=0x800dbd6f0000000000000000000000000000000000000000000000000000000000000000 args=[0]
  • test_toUIAmount_success_identityOnWadDefault(uint256): custom error 0x3248d4ff; counterexample: calldata=0x199e403a0000000000000000000000000000000000000000000000008b6262658434e875 args=[10043698307138906229 [1.004e19]]
  • test_toUIAmount_success_scalesByStoredMultiplier(uint256,uint256): custom error 0x3248d4ff; counterexample: calldata=0xa378d219000000000000000000000000000000000000000000000000000000000000009700000000f85050364cc10061bcd7d9c59491b61c75fdf232a1a404a1e573b16a args=[151, 26150487320837641300027953206248432693198801078155870336511955415402 [2.615e67]]
  • test_toUIAmount_success_zeroRawAmount(uint256): custom error 0x3248d4ff; counterexample: calldata=0x3f144b34000000000000000000000000000000000000000000000000000000000000116d args=[4461]
  • test_totalSupplyUI_success_scalesByMultiplier(uint256,uint256): custom error 0x9bea6429; counterexample: calldata=0x5c654382fdc6d4552d1286ade4d9facdbf0fb50d2ec9b89a90e104f26fd277585e374b000000000000000000000000000000000000000000000000000000000000000d73 args=[114786451876960176979876795944047381322681013115939815538730092428245559888640 [1.147e77], 3443]
  • test_totalSupplyUI_success_zeroWhenNoSupply(uint256): custom error 0x9bea6429; counterexample: calldata=0x605620a90000000000000000000000000000000000000000000000000000000001e13380 args=[31536000 [3.153e7]]
  • test_updateComposite_revertOrder(uint8): custom error 0x6fdd1491; counterexample: calldata=0x46b240f90000000000000000000000000000000000000000000000000000000000000007 args=[7]
  • test_updateComposite_revert_builtinChild(uint8): custom error 0x6fdd1491; counterexample: calldata=0x44e9729e0000000000000000000000000000000000000000000000000000000000000003 args=[3]
  • test_updateComposite_revert_childPoliciesOutsideOfRange(uint8,uint8): custom error 0x6fdd1491; counterexample: calldata=0x25c44760000000000000000000000000000000000000000000000000000000000000009a0000000000000000000000000000000000000000000000000000000000000062 args=[154, 98]
  • test_updateComposite_revert_incompatiblePolicyType(uint8): Error != expected error: custom error 0xbfe142c0 != IncompatiblePolicyType(); counterexample: calldata=0xbe9d9a400000000000000000000000000000000000000000000000000000000000000012 args=[18]
  • test_updateComposite_revert_invalidChildPolicy(uint8): custom error 0x6fdd1491; counterexample: calldata=0xfc6d02c600000000000000000000000000000000000000000000000000000000000000fd args=[253]
  • test_updateComposite_revert_policyNotFound(address,uint64): Error != expected error: custom error 0xbfe142c0 != PolicyNotFound(); counterexample: calldata=0xbc492f7a0000000000000000000000009d791d7d5172ca24d672ca4701a2bc28d311fb8e0000000000000000000000000000000000000000000000000016cf3270be5e3e args=[0x9D791D7d5172CA24d672CA4701A2BC28D311fB8E, 6420265034473022 [6.42e15]]
  • test_updateComposite_revert_policyNotFoundChild(uint8,uint64): custom error 0x6fdd1491; counterexample: calldata=0x5d96e02c000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000066d43c8d262 args=[14, 7066358436450 [7.066e12]]
  • test_updateComposite_revert_renouncedComposite(uint8): custom error 0x6fdd1491; counterexample: calldata=0x9c795a42000000000000000000000000000000000000000000000000000000000000005a args=[90]
  • test_updateComposite_revert_unauthorized(address,uint8): custom error 0x6fdd1491; counterexample: calldata=0x13f7deab000000000000000000000000a1e472cb7b266485e23bb95161deccb14e4ca8dc0000000000000000000000000000000000000000000000000000000000000001 args=[0xA1E472CB7B266485E23bB95161deCCB14E4CA8DC, 1]
  • test_updateComposite_success_atMaxChildren(uint8): custom error 0x6fdd1491; counterexample: calldata=0x9b8e060500000000000000000000000000000000000000000000000000000000000000db args=[219]
  • test_updateComposite_success_emitsCompositePolicyUpdated(uint8): custom error 0x6fdd1491; counterexample: calldata=0xc975d54c0000000000000000000000000000000000000000000000000000000000000060 args=[96]
  • test_updateComposite_success_replacesChildSet(address): custom error 0x6fdd1491; counterexample: calldata=0xbb1499330000000000000000000000000000000000000000000000000000000000000d3a args=[0x0000000000000000000000000000000000000D3A]
  • test_updateMultiplier_deprecated_stillDialable(uint256): deprecated updateMultiplier must emit the ERC-8056 UIMultiplierUpdated: -1 <= -1; counterexample: calldata=0x8e38ffd6000000000000000000000000000000000000000001ec79ea4f7b712627a6cfb6 args=[595367231860233788881031094 [5.953e26]]
  • test_updateMultiplier_revert_aboveUint128Ceiling(uint256): next call did not revert as expected; counterexample: calldata=0x2b852f560000000000000000000000000000000000000000000000000000000000000a41 args=[2625]
  • test_updateMultiplier_success_emitsEvent(uint256): log != expected log; counterexample: calldata=0xfda1a8f90000000000000000000000000000000000f9d4e13121173dba1dcd8d29de29bd args=[1297199630152481729494715850595117501 [1.297e36]]
  • test_updatePolicy_revert_policyNotFound(uint8,uint64): Error != expected error: UnsupportedPolicyType(0xbf15b19caf5c77422c038bc25f26b8b815c3a14f6d04c6616076b81bcfe07b3d) != PolicyNotFound(145264562683050878 [1.452e17]); counterexample: calldata=0x74fd7f390000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000041559a12cfb7c0e args=[40, 294239899441921038 [2.942e17]]
  • test_updatePolicy_success_builtinAllow(uint8): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0xde997e8b0000000000000000000000000000000000000000000000000000000000000003 args=[3]
  • test_updatePolicy_success_builtinReject(uint8): UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2); counterexample: calldata=0x56f5b9080000000000000000000000000000000000000000000000000000000000000003 args=[3]
  • test_updatePolicy_success_emitsPolicyUpdated(uint8,uint64): log != expected log; counterexample: calldata=0x59afa2fa000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000002081 args=[46, 8321]
  • test_updatePolicy_success_writesSlot(uint8,uint64): UnsupportedPolicyType(0xbf15b19caf5c77422c038bc25f26b8b815c3a14f6d04c6616076b81bcfe07b3d); counterexample: calldata=0x9746e8e1000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000003122f args=[10, 201263 [2.012e5]]
  • test_updateUIMultiplier_revert_aboveUint128Ceiling(uint256): Error != expected error: custom error 0x628e600f != InvalidMultiplier(); counterexample: calldata=0x83cbf42d000000000000000000000000000000000000000000000000392218e922b1d769 args=[4116880398958581609 [4.116e18]]
  • test_updateUIMultiplier_revert_effectiveAtInPast(uint256): Error != expected error: custom error 0x628e600f != EffectiveAtInPast(1129247495 [1.129e9]); counterexample: calldata=0x2e69d33200000000000000000000000000000000000000000000000000001810e787d93f args=[26460882983231 [2.646e13]]
  • test_updateUIMultiplier_revert_effectiveAtTooFar(uint256): Error != expected error: custom error 0x628e600f != EffectiveAtTooFar(26387355306578337821828 [2.638e22]); counterexample: calldata=0xfa43acdc000000000000000000000000000000000000000000000596761e2521fc9b7484 args=[26387355306578337821828 [2.638e22]]
  • test_updateUIMultiplier_revert_metadataRoleInsufficient(uint256): Error != expected error: custom error 0x628e600f != AccessControlUnauthorizedAccount(0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e, 0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929); counterexample: calldata=0x8e55eaf300000000000000000000000000000000000000000000000000000000000008cd args=[2253]
  • test_updateUIMultiplier_revert_pendingUpdateExists(uint256,uint256): custom error 0x628e600f; counterexample: calldata=0x118ebc9f000000006918137975e799eb1163513158c50b3ba43c4f1605506a75b5eb76ba0000000000000000000000000000000000000000000000000000000000ed4fd5 args=[11067694946785597386658409095863725865805228808040087844861839636154 [1.106e67], 15552469 [1.555e7]]
  • test_updateUIMultiplier_revert_unauthorized(address,uint256): Error != expected error: custom error 0x628e600f != AccessControlUnauthorizedAccount(0x98D9A110a2490a5AcB9182d2E6919Fd3Bc095B63, 0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929); counterexample: calldata=0x3b75c88400000000000000000000000098d9a110a2490a5acb9182d2e6919fd3bc095b630000000000000095059a7ed8c9ef56376e7c98c3cf4ac908bf1110b9cf65680c args=[0x98D9A110a2490a5AcB9182d2E6919Fd3Bc095B63, 935425555944499551043099573718425750796102004215014568060940 [9.354e59]]
  • test_updateUIMultiplier_success_emitsEvent(uint256,uint256): log != expected log; counterexample: calldata=0x6fb2ac3a00000000050c273bf7d4755888a489ec2685ff34af229f5b9dffd78b536e822f00000000000000000204a4b85740ea6392ad80f7fd0fb4bb41af4fa4a57662e6 args=[531561019024249887758709546513918733300093327954924415455691964975 [5.315e65], 49484610292097748108522030704816793511653646005643404006 [4.948e55]]
  • test_updateUIMultiplier_success_lazyFlipAtBoundary(uint256): custom error 0x628e600f; counterexample: calldata=0xd55bc7fe0000000000000000000000000000000000000000000000000000000000002b05 args=[11013 [1.101e4]]
    [FAIL: Error != expected error: InternalCallFailed(0x3248d4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) != panic: arithmetic underflow or overflow (0x11)] test_announce_innerPanic_propagatesRaw() (gas: 99348)
    [FAIL: Error != expected error: custom error 0x2c97a0f0 != UIMultiplierUpdateDoesNotExist()] test_cancelUIMultiplierUpdate_revert_noPending() (gas: 45690)
    [FAIL: Error != expected error: custom error 0x628e600f != InvalidMultiplier()] test_updateUIMultiplier_revert_zeroMultiplier() (gas: 45884)
    [FAIL: Error != expected error: custom error 0xf916d81b != InvalidReceiver(0x0000000000000000000000000000000000000000)] test_seizeWithMemo_revertOrder_zeroReceiver_beats_zeroSender() (gas: 44718)
    [FAIL: UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2)] test_b20Layout_success_populatedSnapshotMatchesAllSlots() (gas: 618346)
    [FAIL: UnsupportedPolicyType(0x1497ab2b67ebb0a75dd9cdd6aec9f0e64620e6b87e911af7a088ac12e58d9ef2)] test_seizePolicyIdsSlot_success_decodesSeizableLane() (gas: 12538)
    [FAIL: UnsupportedPolicyType(0xbf15b19caf5c77422c038bc25f26b8b815c3a14f6d04c6616076b81bcfe07b3d)] test_seizePolicyIdsSlot_success_decodesReceiverLane() (gas: 12548)
    [FAIL: custom error 0x01ffc9a7] test_supportsInterface_success_claimedIds() (gas: 5221)
    [FAIL: custom error 0x54309870] test_maxCompositeChildPolicies_success() (gas: 2586)
    [FAIL: custom error 0x628e600f] test_b20AssetLayout_success_populatedSnapshotMatchesAllSlots() (gas: 71310)
    [FAIL: custom error 0x628e600f] test_reorder_success_cancelThenScheduleInOneBracket() (gas: 45458)
    [FAIL: custom error 0x628e600f] test_updateMultiplier_success_clearsLivePending() (gas: 45462)
    [FAIL: custom error 0x628e600f] test_updateMultiplier_success_clearsMaturedPendingNoCancelEvent() (gas: 45463)
    [FAIL: custom error 0x628e600f] test_updateUIMultiplier_success_materializesMaturedPending() (gas: 45484)
    [FAIL: custom error 0x6fdd1491] test_compositePolicyChildIds_success_returnsCreationSet() (gas: 157901)
    [FAIL: custom error 0x6fdd1491] test_compositePolicyChildIds_success_tracksUpdateComposite() (gas: 184939)
    [FAIL: custom error 0x785c0cf0] test_maxUIMultiplier_success_equalsUint128Max() (gas: 5192)
    [FAIL: custom error 0x7c40df74] test_compositePolicyChildIds_success_emptyAfterFailedCreation() (gas: 133182)
    [FAIL: custom error 0xb3ae29f7] test_minCompositeChildPolicies_success() (gas: 2519)
    [FAIL: isPaused must still accept enum index 3 (SEIZE)] test_isPaused_revert_noFifthFeature() (gas: 9532)

@mw2000
mw2000 marked this pull request as draft August 21, 2026 18:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants