Skip to content

fix: include counterparty (zero address) as 3rd context row in addOrder/removeOrder - #2779

Open
thedavidmeister wants to merge 9 commits into
mainfrom
2026-06-17-issue-2619-counterparty-context
Open

fix: include counterparty (zero address) as 3rd context row in addOrder/removeOrder#2779
thedavidmeister wants to merge 9 commits into
mainfrom
2026-06-17-issue-2619-counterparty-context

Conversation

@thedavidmeister

@thedavidmeister thedavidmeister commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Summary

  • addOrder4 and removeOrder3 populate a post-hook entask context with two rows: orderHash and msg.sender. The spec requires a third row for the counterparty address; for order-management operations the counterparty is always address(0).
  • Fix: add bytes32(uint256(uint160(address(0)))) as the third row in the matrixFrom call for both functions.
  • Test: testAddOrderCounterpartyIsZeroAddress verifies the new third context slot is the zero address.
  • Pre-pins 0.1.7 deploy constants: RaindexV6 address changes (new bytecode), all other contracts (SubParser, RouteProcessor, arb contracts) are unchanged from 0.1.6.

REQUIRES redeploy at land — RaindexV6 bytecode changes, so testProdDeploy* will be red until it is deployed. testIsStartBlock* / testNetworksJson* / testSubgraphYamlAddress will also be red until script/build-start-blocks.sh is run against the new deployment address.

Closes #2619

Co-Authored-By: Claude noreply@anthropic.com

Summary by CodeRabbit

  • New Features

    • Post-action contexts now include a zero-address order counterparty for order creation and removal flows.
  • Bug Fixes

    • Corrected contract bytecode metadata for the Raindex V6 deployment fixture.
  • Chores

    • Incremented the package version to 0.1.14.
    • Added deployment reproducibility and runtime verification checks for Raindex V6 contracts.

QA

  • Discriminating tests: testAddOrderCounterpartyIsZeroAddress (RaindexV6.addOrder.entask.t.sol), testRemoveOrderContext (RaindexV6.removeOrder.entask.t.sol) — each fails on base. Verified in this checkout's own CI toolchain (nix develop github:rainlanguage/rainix/53e96a7d#sol-shell): restoring the pre-change 2-row arrayFrom in _doOrderPost and re-running forge script script/Build.sol makes add-order fail with panic: array out-of-bounds access (0x32) — the exact Audit (Protofire M02): order-counterparty() exposed in add/remove post-actions but its context row is never populated (reverts) #2619 symptom — and testRemoveOrderContext fail; with the third row restored both pass (19/19 across the two entask suites).
  • Mutations applied: src/concrete/raindex/RaindexV6.sol _doOrderPost → drop bytes32(uint256(uint160(address(0)))) from the arrayFrom call → killed by both tests above. IMPORTANT: the mutation only bites AFTER the pointer regen — RaindexV6ExternalRealTest etches RUNTIME_CODE out of src/generated/RaindexV6.pointers.sol via LibEtchRaindex, so a source-only mutation SURVIVES and is not evidence in this repo. Separately, LibRaindexDeployTaggedConstants.t.sol passes 88/88 including the new 0.1.14 pins, and a full regen (script/build-meta.shforge script script/Build.solforge buildforge fmt) leaves ZERO working-tree drift.
  • Oracle: issue Audit (Protofire M02): order-counterparty() exposed in add/remove post-actions but its context row is never populated (reverts) #2619 and the entask context spec — the order-management post-hook context must carry a third order-counterparty row, and an add/remove has no counterparty, so the expected value is address(0). Asserted through the rainlang word order-counterparty() inside the task, never recomputed from _doOrderPost itself.
  • Category check: issue asks for the missing counterparty row on both addOrder4 and removeOrder3; covered both, via the single shared _doOrderPost helper plus a discriminating test on each side. Closes Audit (Protofire M02): order-counterparty() exposed in add/remove post-actions but its context row is never populated (reverts) #2619.
  • Deploy posture (split release lifecycle, per the 2026-08-06 ruling): this PR does NOT wait on a deploy, and the "REQUIRES redeploy at land" paragraph in the summary above is SUPERSEDED — deploys never gate merges. The [package].version 0.1.13 → 0.1.14 bump and the frozen src/generated/0_1_14/ snapshot are not a pre-deploy pin: script/Build.sol's freezeSnapshot REVERTS on any bytecode change made without a version bump, so they are mechanically required by main's own build, and they are internally consistent (version ↔ snapshot ↔ pins, proven by the 88 tagged-constant tests and the zero-drift regen). Residual, and NOT fixable from this branch: src/lib/deploy/LibRaindexDeploy.sol still derives the prod deploy constants from the moving flat src/generated/*.pointers.sol, so testProdDeploy* / testIsStartBlock* / testNetworksJson* / testSubgraphYamlAddress (on rainix-sol / test, which is NOT a required check) stay red until 0.1.14 is deployed. Repointing them at the last released snapshot is a repo-wide migration — LibEtchRaindex and every *ExternalRealTest read the same flat pointers — and is out of scope here.

…er/removeOrder (#2619)

The entask post-context for addOrder4 and removeOrder3 only had two rows
(orderHash, msg.sender).  The spec requires a third row for the
counterparty address; because these are order-management operations (not
trades) the counterparty is always the zero address.  Add
`bytes32(uint256(uint160(address(0))))` as that third row and test it.
Pre-pins 0.1.7 deploy constants (RaindexV6 address changes, all other
contracts unchanged).

REQUIRES redeploy at land — testProdDeploy* and testIsStartBlock* /
testNetworksJson* will be red until the new RaindexV6 is deployed and
build-start-blocks.sh is run.

Co-Authored-By: Claude <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Jun 17, 2026
@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 0713c353-d690-4f96-bf4f-508d43cefc31

📥 Commits

Reviewing files that changed from the base of the PR and between 38368eb and bdbd491.

⛔ Files ignored due to path filters (10)
  • src/generated/0_1_14/GenericPoolRaindexV6ArbOrderTaker.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_14/GenericPoolRaindexV6FlashBorrower.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_14/RaindexV6.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_14/RaindexV6SubParser.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_14/RouteProcessor4.pointers.sol is excluded by !**/generated/**
  • src/generated/0_1_14/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol is excluded by !**/generated/**
  • src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol is excluded by !**/generated/**
  • src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol is excluded by !**/generated/**
  • src/generated/RaindexV6.pointers.sol is excluded by !**/generated/**
  • src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol is excluded by !**/generated/**
📒 Files selected for processing (5)
  • crates/test_fixtures/abis/RaindexV6.json
  • foundry.toml
  • src/concrete/raindex/RaindexV6.sol
  • test/concrete/raindex/RaindexV6.removeOrder.entask.t.sol
  • test/lib/deploy/LibRaindexDeployTaggedConstants.t.sol
🚧 Files skipped from review as they are similar to previous changes (2)
  • crates/test_fixtures/abis/RaindexV6.json
  • foundry.toml

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

RaindexV6 post-tasks now receive a zero-address order counterparty context. Add-order and remove-order tests validate this context. Release metadata, ABI bytecode, deployment pointers, and runtime-code checks are updated for version 0.1.14.

Changes

Raindex V6 context and release metadata

Layer / File(s) Summary
Post-action context and validation
src/concrete/raindex/RaindexV6.sol, test/concrete/raindex/RaindexV6.addOrder.entask.t.sol, test/concrete/raindex/RaindexV6.removeOrder.entask.t.sol
_doOrderPost passes the order hash, caller, and zero address to post-tasks. Add-order and remove-order tests validate order-counterparty() and execute removal post-tasks on a live order.
0.1.14 release artifacts
foundry.toml, crates/test_fixtures/abis/RaindexV6.json, test/lib/deploy/LibRaindexDeployTaggedConstants.t.sol
The package version and RaindexV6 bytecode fixture are updated to 0.1.14. Deployment pointers and runtime-code consistency tests are added for the RaindexV6 contract set.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to bdbd4

The change adds the required zero-address context row for order-management operations and includes passing coverage for both add and remove paths; no actionable merge-blocking risk remains beyond normal checks and review.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes adding a zero-address counterparty context row to addOrder and removeOrder post-actions.
Linked Issues check ✅ Passed The shared helper now adds the zero-address third context row, and tests cover both addOrder and removeOrder counterparty access.
Out of Scope Changes check ✅ Passed The version, ABI fixture, deployment constants, and tests support the stated fix and release consistency requirements.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 2026-06-17-issue-2619-counterparty-context

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

thedavidmeister and others added 3 commits June 17, 2026 17:30
Regenerate arb-contract pointer files and update 0.1.7 pre-pin constants.
RaindexV6 bytecode change causes arb contracts to deploy at new addresses
since they embed the new RaindexV6 address in their deployment parameters.
…ct-per-file static check

Merge origin/main (0.1.12) into branch. Resolves conflicts in:
- src/concrete/raindex/RaindexV6.sol: keep PR's 3-row context (orderHash,
  msg.sender, address(0)) for addOrder4/removeOrder3 post-hooks
- src/lib/deploy/LibRaindexDeploy.sol: take main's published 0.1.7-0.1.12
  constants, add 0.1.13 pre-pin for this PR's new RaindexV6 bytecode
- src/generated/*.pointers.sol + crates/test_fixtures/abis/: keep HEAD
  (new bytecode from this PR)
- foundry.toml: bump version to 0.1.13

The merge brings in main's one-contract-per-file fix (PR #2731/#2749) which
resolves the rainix-sol/static check failures.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

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.

🧹 Nitpick comments (2)
test/concrete/raindex/RaindexV6.addOrder.entask.t.sol (1)

205-225: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Mirror this regression on removeOrder3.

This PR fixes both order-management flows, but the new regression only exercises addOrder4. A matching remove-order entask test would keep the second call site from drifting back to the old 2-row context.

src/concrete/raindex/RaindexV6.sol (1)

379-386: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Deduplicate the 3-row post-context builder.

These two entrypoints now hardcode the same matrix while the shared helper still represents the old 2-row shape. Keeping the context contract in two places makes this easy to drift again.

♻️ Proposed refactor
-            LibRaindex.doPost(
-                LibBytes32Matrix.matrixFrom(
-                    LibBytes32Array.arrayFrom(
-                        orderHash, bytes32(uint256(uint160(msg.sender))), bytes32(uint256(uint160(address(0))))
-                    )
-                ),
-                post
-            );
+            _doOrderPost(orderHash, address(0), post);
...
-            LibRaindex.doPost(
-                LibBytes32Matrix.matrixFrom(
-                    LibBytes32Array.arrayFrom(
-                        orderHash, bytes32(uint256(uint160(msg.sender))), bytes32(uint256(uint160(address(0))))
-                    )
-                ),
-                post
-            );
+            _doOrderPost(orderHash, address(0), post);
function _doOrderPost(bytes32 orderHash, address counterparty, TaskV2[] calldata post) internal {
    LibRaindex.doPost(
        LibBytes32Matrix.matrixFrom(
            LibBytes32Array.arrayFrom(
                orderHash,
                bytes32(uint256(uint160(msg.sender))),
                bytes32(uint256(uint160(counterparty)))
            )
        ),
        post
    );
}

Also applies to: 407-414

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/concrete/raindex/RaindexV6.sol` around lines 379 - 386, The post-context
matrix is duplicated in the RaindexV6 entrypoints, while the shared helper still
reflects the old shape. Update RaindexV6 to centralize this 3-row context
construction in a single internal helper such as _doOrderPost, and have both
entrypoints call it with the appropriate counterparty so LibRaindex.doPost and
the LibBytes32Matrix/LibBytes32Array assembly stay in one place.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/concrete/raindex/RaindexV6.sol`:
- Around line 379-386: The post-context matrix is duplicated in the RaindexV6
entrypoints, while the shared helper still reflects the old shape. Update
RaindexV6 to centralize this 3-row context construction in a single internal
helper such as _doOrderPost, and have both entrypoints call it with the
appropriate counterparty so LibRaindex.doPost and the
LibBytes32Matrix/LibBytes32Array assembly stay in one place.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c693ebc8-03eb-4b9a-9e16-b4039564bdc2

📥 Commits

Reviewing files that changed from the base of the PR and between 32266db and 38368eb.

⛔ Files ignored due to path filters (4)
  • src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol is excluded by !**/generated/**
  • src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol is excluded by !**/generated/**
  • src/generated/RaindexV6.pointers.sol is excluded by !**/generated/**
  • src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol is excluded by !**/generated/**
📒 Files selected for processing (5)
  • crates/test_fixtures/abis/RaindexV6.json
  • foundry.toml
  • src/concrete/raindex/RaindexV6.sol
  • src/lib/deploy/LibRaindexDeploy.sol
  • test/concrete/raindex/RaindexV6.addOrder.entask.t.sol

…rom merged source

The merge-update (step 3d) pulled main's source back into the PR but did
not regenerate src/generated/RaindexV6.pointers.sol.  The generated file
still carried bytecode compiled from the PR's original source (which had
the OrderNoSources / OrderNoHandleIO source-count check removed to match
an older rainlang version).  After the merge the source has those checks
again, so the etched-bytecode mock tests now expect them to fire — but the
stale RUNTIME_CODE etched at RAINDEX_DEPLOYED_ADDRESS lacked them, causing
testAddOrderWithoutCalculationsReverts (and friends) to fail with "next
call did not revert as expected".

Fix: re-run script/build-meta.sh → forge script BuildPointers.sol →
forge build → script/build.sh → forge fmt to regenerate the pointers,
update the 0_1_13 pinned constants in LibRaindexDeploy to the new address
and codehash, and refresh crates/test_fixtures/abis/RaindexV6.json.
testProdDeploy* / testIsStartBlock* / testNetworksJson* remain red
(WAITING-DEPLOY): the new RaindexV6 must be deployed before they pass.

Co-Authored-By: Claude <noreply@anthropic.com>
@thedavidmeister

Copy link
Copy Markdown
Contributor Author

Producer note: HAND-OFF (three prior 3b attempts, latest 2026-07-04, checks still red). Three distinct causes: (1) copy-artifacts + 9 codehash/runtime-code test fails: the 2026-07-04 regen covered RaindexV6 pointers only — the arb-contract pointers (GenericPool*/RouteProcessor*) are still stale; fix is a FULL ./build.sh run with ALL regenerated artifacts staged. (2) 5 testProdDeploy* + 3 isStartBlock + networks.json/subgraph.yaml: WAITING-DEPLOY (bytecode-changing PR, routine pre-merge deploy). (3) rainix-sol static + rs-static: rainix's new no-ignored-tests gate bans vm.skip, and the flagged vm.skip lines exist on raindex MAIN too (test/lib/deploy/*.t.sol) — an org-level collision that will red main's own next static run; needs an org decision (allow-list or rework those skips), not a branch fix. Per one-attempt-per-check back-off I am not pushing again.

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

🤖 ai:producer
Producer note: 3b HAND-OFF. [3b-attempt] commits already targeted rainix-sol-static and rainix-sol-test here; still red, so per back-off no further pushes. Current state (run 28707744726/57): static + rs-static + part of test are MAIN-STATE reds (rainix no-vm.skip gate vs five test/lib/deploy files with vm.skip on main; missing 0.1.13 soldeer-tag deploy constants) — not fixable from this branch. copy-artifacts remains this PR's own red (artifact regen vs committed, after the RaindexV6 pointer regen attempt) — parked for a human in the CI-identical env.

@thedavidmeister thedavidmeister added the ai:ready AI vetter: passes review, ready for human decision label Jul 6, 2026
@thedavidmeister

thedavidmeister commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

🤖 ai:vetter
Reviewed bb9fa95: ready — both addOrder4 and removeOrder3 now pass 3-element context row including address(0) counterparty; te
cost 200 — addOrder+removeOrder context-row fix with end-to-end test

@thedavidmeister thedavidmeister added ai:needs-work Needs rework — the producer's inbox (vetter verdict or human ruling) and removed ai:ready AI vetter: passes review, ready for human decision labels Jul 9, 2026
@thedavidmeister

Copy link
Copy Markdown
Contributor Author

🤖 ai:vetter
Reviewed 4b78f01: reject — closes #2619 — right fix wrong shape: (1) inlines 3-row context at both call sites instead of editing main's _doOrderPost helper, duplicating construction; (2) leaves _doOrderPost DEAD at head with stale 2-row body and now-false doc comment (regression trap); (3) removeOrder3 third row unpinned — testRemoveOrderContext asserts order-hash/order-owner only, no order-counterparty() test in remove context, so reverting the remove hunk survives the suite; rework: 1-line edit to _doOrderPost + remove-side counterparty test
cost 618 — settlement context change, deploy pins, merge fallout

thedavidmeister and others added 2 commits July 16, 2026 09:22
…-counterparty-context

# Conflicts:
#	src/lib/deploy/LibRaindexDeploy.sol
…rk [3b-attempt]

Merge current main (frozen snapshot-dir redesign) into the branch. The one
conflict, src/lib/deploy/LibRaindexDeploy.sol, resolves to main's deletion of
the flat per-tag constants: the branch's added 0.1.13 flat block is the old
machinery that main moved into src/generated/<tag>/ snapshots.

Vetter rework: the 3-element context row (order hash, caller, zero-address
counterparty) is built once in _doOrderPost; both addOrder4 and removeOrder3
call the helper again instead of inlining the construction, and the helper's
doc comment describes the 3-row context. testRemoveOrderContext now adds the
order then removes it so the post tasks actually run in the remove path, and
pins the third row with an order-counterparty() == address(0) assertion
alongside the raindex/order-hash/order-owner rows.

foundry.toml [package].version bumps 0.1.13 -> 0.1.14: the bytecode change
would otherwise mutate the frozen 0_1_13 snapshot (Build.sol rejects that).
Build.sol freezes the new src/generated/0_1_14/ snapshot and the
tagged-constants test gains the matching 0_1_14 block.

Full canonical regen with all artifacts staged: script/build-meta.sh, forge
script script/Build.sol run to its fixed point (the arb contracts embed
RAINDEX_DEPLOYED_ADDRESS at compile time, so the first pass leaves their
pointers one iteration stale; a second pass converges and a third pass is a
verified no-op), forge build, script/build.sh, forge fmt.

testProdDeploy*, testIsStartBlock*, testNetworksJsonAddresses and
testSubgraphYamlAddress stay red until the new deterministic addresses are
deployed and the start-block bookkeeping is refreshed (deploy-before-merge
flow).

Co-Authored-By: Claude <noreply@anthropic.com>
@thedavidmeister

Copy link
Copy Markdown
Contributor Author

🤖 ai:vetter
Reviewed 90b1e5e: reject — closes #2619 — code rework verified correct at this head (_doOrderPost 3-row edit, add+remove counterparty tests both present); reject is missing/stale QA evidence: no QA-GUIDE §8 block, and the body misdescribes the shipped fix (claims inlined matrixFrom at both call sites, omits the remove-side test, names 0.1.7 pins vs actual 0_1_14) — update body + QA block and re-push
cost 575 — settlement context change, deploy pins regen

@thedavidmeister thedavidmeister added ai:blocked-deploy and removed ai:needs-work Needs rework — the producer's inbox (vetter verdict or human ruling) labels Jul 17, 2026
@thedavidmeister

Copy link
Copy Markdown
Contributor Author

🤖 ai:producer
Blocked-deploy: manual-sol-artifacts run 29613976254 (suite=raindex, head 90b1e5e) failed at the forge Deploy broadcast step: all chain simulations passed, then the FIRST live send (Chain 14 / Flare) died on eth_estimateGas after 4 attempts with 'error code 3: execution reverted, data: 0x' (the Zoltu factory's dataless CREATE2-failure revert shape surfaced by the RPC). No tx was broadcast — chain state is untouched and still deployable. This is the IDENTICAL signature to rain.math.float#253's blocked deploy on 2026-07-16 (same estimateGas/dataless-revert on the large-calldata Zoltu deploy tx), so the CI_DEPLOY_*_RPC_URL backend (Flare first in --slow order) looks like a sustained deploy-path outage, not a branch problem. Needs human retry, possibly with a swapped RPC backend; single-attempt rule honored, not re-dispatched.

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

👤 human
Ruled 90b1e5e: reject — executing the 2026-08-06 ruling in rainlanguage/issue-pr-cron#221 — the retired ai:blocked-deploy residue (#162) migrates to ai:reject for rework to the split release lifecycle

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

Rework note @90b1e5ecaf2a47cc41ee75d4ae7cd737382a18da: rework the PR to fit the split release lifecycle — deploys never gate merges (the deploy-before-merge choreography is superseded); remove or restructure anything in the PR that waits on a deploy; where deploy constants/pins are involved, follow the *.deploy repo convention (audited code only; version ↔ snapshot ↔ pins internally consistent; tag-release lifecycle). Whatever states follow the rework (including a typed blocked-on the repo's migration if one is genuinely needed) are the producer's ordinary transitions. Executes the 2026-08-06 ruling: rainlanguage/issue-pr-cron#221

@thedavidmeister thedavidmeister added ai:needs-work Needs rework — the producer's inbox (vetter verdict or human ruling) and removed ai:blocked-deploy labels Aug 6, 2026
@thedavidmeister

Copy link
Copy Markdown
Contributor Author

🤖 ai:producer
QA-block repair: appended QA-GUIDE section 8's evidence block in the PR body via pr-review-report repair-qa-block. Every byte outside the ## QA section is unchanged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai:needs-work Needs rework — the producer's inbox (vetter verdict or human ruling)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Audit (Protofire M02): order-counterparty() exposed in add/remove post-actions but its context row is never populated (reverts)

1 participant