Skip to content

Create new production release#1150

Merged
ebma merged 98 commits into
mainfrom
staging
May 20, 2026
Merged

Create new production release#1150
ebma merged 98 commits into
mainfrom
staging

Conversation

@ebma
Copy link
Copy Markdown
Member

@ebma ebma commented May 20, 2026

No description provided.

gianfra-t and others added 27 commits May 18, 2026 16:36
User-wallet phases (moneriumOnrampMint, SELL squidRouterApprove/Swap,
squidRouterNoPermit{Approve,Swap,Transfer}) previously fell through
validatePresignedTxs via 'continue', which allowed a malicious client to
attach an unrelated presigned tx labeled with one of these phase names
without any content validation. Flip the skip to a BAD_REQUEST reject and
direct integrators to submit only the on-chain tx hash via additionalData.

Add verifyUserSubmittedTxByHash helper that resolves the receipt and
transaction by hash, then binds receipt.from, tx.to, tx.input, tx.value to
the server-issued unsigned payload (blueprint.signer + blueprint.txData).
Refactor squidrouter-permit-execution-handler.waitForUserHash to delegate
to the helper, and add verifyUserSubmittedSquidHashes at the top of
FundEphemeralPhaseHandler.executePhase so SELL standard EVM offramps
verify squidRouterApprove + squidRouterSwap on-chain before any ephemeral
funding occurs. This closes the F-041 gap where SELL squid hashes were
neither validated as presigned txs nor verified at runtime.

Update validation.test.ts: replace 3 skip-tests with 5 reject-tests
covering each user-wallet phase, plus a positive test confirming BUY
squidRouterSwap still validates as ephemeral-signed. All 50 validation
tests pass.

Update docs/security-spec/03-ramp-engine/transaction-validation.md to
document the two-layer model (reject + by-hash verification), mark F-041
as MITIGATED, and add a threat row for user-wallet phase presigned-tx
smuggling.
The literal-string override widened verifyingContract from EvmAddress
(`0x${string}`) back to plain string, breaking TypedDataDomain
assignability. Narrow the literal to the branded hex type, which is the
canonical pattern for hex-string types in viem/ethers (already used a few
lines below for sig.r / sig.s).
Server-issued unsigned txs with maxPriorityFeePerGas:'0' (or other zero
minimums) were rejected when the signer produced a legacy/type-0 tx with
only gasPrice, blocking BRL->USDT onramp updateRamp. A zero minimum means
'no constraint', so a missing field is acceptable; only reject if a
concrete value is strictly below the minimum. Non-zero minimums still
require the field to be present and meet the bound.
…UntilTrue timeout, SSL cert validation, seed phrase, cleanup phase label

Agent-Logs-Url: https://github.com/pendulum-chain/vortex/sessions/57d9c30a-ecbd-4c12-b598-95ed6c21e347

Co-authored-by: ebma <6690623+ebma@users.noreply.github.com>
@netlify
Copy link
Copy Markdown

netlify Bot commented May 20, 2026

Deploy Preview for vortex-sandbox ready!

Name Link
🔨 Latest commit 995cbb4
🔍 Latest deploy log https://app.netlify.com/projects/vortex-sandbox/deploys/6a0d83971e7a1800088d3283
😎 Deploy Preview https://deploy-preview-1150--vortex-sandbox.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify
Copy link
Copy Markdown

netlify Bot commented May 20, 2026

Deploy Preview for vortexfi ready!

Name Link
🔨 Latest commit 995cbb4
🔍 Latest deploy log https://app.netlify.com/projects/vortexfi/deploys/6a0d83977a20ec0008030c2f
😎 Deploy Preview https://deploy-preview-1150--vortexfi.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@ebma ebma merged commit 3732593 into main May 20, 2026
8 of 9 checks passed
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.

4 participants