Protocol security

What is wired — and what is still a spec

ProveXAgent is a PulseChain-native agent layer. ProveX core addresses are pinned. Clearance fail-closes illegal settlements. RPC, wallets, and the buyer extension are still unbound.

Clearance-enforced

2

Live gates in this app

Simulated

6

Correct math, no bytecode

Unwired

6

RPC, wallet, adapter, $PXA

Circuit breaker

Closed

Local only

Quote only. This site does not send a transaction. Nothing is in escrow.

Real lock refused

A quote can be planned. USDC cannot be locked or released until every row below is closed. Audit is not closed. On-chain clearance is not deployed at the live addresses.

  • Payment proof

    Release stays closed. A hash in this browser is not an attestor signature, and the ProveX extension is not connected.

  • Live sellers

    Only DepositCreated logs on the Agent escrow count. A preview listing is not a counterparty.

    Deposit logs unread

  • Contract pause

    The pause button is local. It does not call setPaused. If the chain read fails, pause is unconfirmed.

    Contract pause unread

  • Audit

    The four live Agent contracts are unaudited. This interface will not ask a wallet to deposit into them.

  • Clearance on chain

    Floor, cap, and rail checks in the browser do not bind a direct call. The live bytecode has no clearance contract.

ProveX.com core — verified ABI

These are the only legal ProveX targets. Explorer is PulseChain scan via Pinata. Gating is an EOA. Proofs that name any other escrow fail closed.

PulseChain 369 · verified ProveX rails

  • ProveX core

    Escrowverified

    Seller createDeposit(). Only contract that may hold settlement funds.

    0x0B42…f11a
  • ProveX core

    Orchestratorverified

    signalIntent() / fulfillIntent(paymentProof). Adapter talks here; agents never hold keys.

    0x742d…b080
  • ProveX core

    Payment Verifier Registryverified

    getVerifier(paymentMethod). Unknown methods cannot release escrow.

    0x6a4f…597A
  • ProveX core

    Unified Payment Verifierverified

    verifyPayment(intentHash, paymentProof). Called inside fulfillIntent.

    0x0e73…81Db
  • Access

    Gating serviceEOA

    EOA stored as intentGatingService on deposits. Signs signalIntent. Not a contract.

    0x4Bd6…f9Cf
  • Tokens

    $PRVXverified

    ProveX settlement token. Core 2% + Agent extra 40 bps buy-and-burn target.

    0xF6f8…0b11
  • Tokens

    USDCverified

    PulseChain USDC (from Ethereum). Default on-ramp asset.

    0x15D3…1f07
  • Tokens

    WPLSverified

    Wrapped Pulse. PulseX pairs are WPLS, never native PLS.

    0xA107…9a27

Verified ABI · adapter call surface

  • Seller

    Escrow.createDeposit(CreateDepositParams)

    Lock inventory. Seller signs. Funds stay in Escrow, never an agent.

  • Buyer

    Orchestrator.signalIntent(SignalIntentParams)

    Bind a take. Params.escrow MUST be the pinned Escrow address.

  • Orchestrator

    UnifiedPaymentVerifier.verifyPayment(intentHash, paymentProof, data)

    On-chain payment-proof check. Returns success + releaseAmount.

  • Buyer / agent

    Orchestrator.fulfillIntent(paymentProof, intentHash, verificationData)

    Submit extension proof. Releases via Escrow.unlockAndTransferFunds.

  • Buyer

    Orchestrator.cancelIntent(intentHash)

    Abort a signaled take. Unlocks deposit liquidity.

Rail defense

ProveX.com can refuse agent-originated takes at the gating EOA, or pause their contracts. Primary stays the default. If it refuses, clearance may divert only to the published Agent-owned rail below — never an unpublished address.

Connection matrix

  • Off-chain orchestrator

    Natural-language orchestrator

    Connected

    Per-template tool allow-list + system prompt. Local parser + optional Grok narration.

    Keep prompts sanitized; never send keys or proofs to the LLM.

  • Client

    Pre-trade ticket

    Connected

    ProveX 2% + Agent 0.5/0.5 + you receive + seller lock + 2.4% PRVX pressure before confirm.

    Bind the same quote object to the adapter call so on-chain fees cannot drift.

  • Client

    Offer book + seller desk

    Simulated

    Preview listings are not inventory. The book counts DepositCreated logs only.

    Match only deposits read from the Agent escrow. Empty until a real lock exists.

  • Off-chain orchestrator

    Clearance

    Simulated

    Browser floor, cap, and rail checks. Live Agent bytecode does not call AgentClearance.

    Redeploy with AgentClearance. Until that address is published, this UI will not deposit.

  • Off-chain orchestrator

    Server attestation

    Not wired

    Release is refused. A browser hash is not an EIP-712 attestor signature.

    Accept only a signature from the published attestor, or a ProveX extension proof.

  • ProveXAgent contracts

    AgentRegistry.sol

    Simulated

    In-memory agents, permissions, pause. No contract address.

    Deploy proxy on PulseChain 369; registerAgent() from this UI.

  • ProveXAgent contracts

    StakeManager.sol / vePXA

    Simulated

    Local PXA balances and lock days. Voting power is a client formula.

    Wire ERC-20 approve + stake() / lock() against $PXA.

  • ProveXAgent contracts

    FeeRouter.sol

    Simulated

    ProveX 2% (PRVX burn) is separate. Agent 1% (0.5/0.5) splits 40/40/20 in clearance. No DEX buy-burn yet.

    collectFee() → PulseX market buy → burn PXA + PRVX.

  • ProveXAgent contracts

    CircuitBreaker.sol

    Simulated

    Local pause does not call setPaused. paused() is read from escrow and orchestrator.

    Owner must pause the contract. This button cannot.

  • ProveXAgent contracts

    ProveXEscrowAdapter.sol

    Not wired

    Lifecycle is modeled. Target escrow is now pinned. No adapter bytecode.

    Deploy adapter; only createDeposit / signalIntent / fulfillIntent against pinned targets.

  • ProveX core

    ProveX escrow

    Pinned

    Verified Escrow. createDeposit / lockFunds / unlockAndTransferFunds. Proofs fail if they target any other address.

    Seller wallet signs createDeposit. Still no eth_sendTransaction from this UI.

  • ProveX core

    ProveX orchestrator

    Pinned

    Verified Orchestrator. signalIntent → fulfillIntent(paymentProof). protocolFee() is the core 2% meter.

    Buyer/agent posts extension proof via fulfillIntent. Needs wallet + RPC.

  • ProveX core

    Payment verifiers

    Pinned

    Verified Registry + UnifiedPaymentVerifier.verifyPayment(intentHash, paymentProof).

    Replace clearance schema checks with the on-chain verifier result.

  • ProveX core

    Gating service

    Pinned

    EOA 0x4Bd6…f9Cf — intentGatingService on deposits, signs signalIntent. Not a contract.

    If this EOA refuses agent takes: fail closed, or divert only to a published secondary rail. Never an unpublished address.

  • Client

    Buyer ZK browser extension

    Not wired

    Clearance mints a structural Groth16-shaped proof bound to the pinned escrow.

    Install the ProveX extension; post real proof bytes through the adapter.

  • PulseChain / PulseX

    PulseChain RPC (chain id 369)

    Not wired

    Chain id and escrow address are enforced. No JSON-RPC session.

    Connect https://rpc.pulsechain.com (or a private node) + wallet.

  • Client

    Injected wallet / WalletConnect

    Not wired

    UI is read-only on balances. No eth_sendTransaction.

    Add PulseChain (369) provider; seller signs escrow lock.

  • PulseChain / PulseX

    PulseX DEX (WPLS pairs)

    Pinned

    Hero terminal links to pulsex.com. Pairs labeled PXA/WPLS, PRVX/WPLS. WPLS 0xA1077a29…

    Router address + buy-and-burn path from FeeRouter.

  • PulseChain / PulseX

    $PRVX / USDC / WPLS

    Pinned

    PRVX 0xF6f8Db0aBa00007681F8fAF16A0FDa1c9B030b11 · USDC 0x15D38573d2feeb82e7ad5187aB8c1D52810B1f07. $PXA unpublished.

    Publish $PXA. Verify burn events on PulseScan.

  • Identity

    EAS identity attestations

    Not wired

    Reputation scores live in local state only.

    Anchor ReputationAttestor to an EAS schema UID on PulseChain.

Clearance invariants (live)

  • Agents never take custody

    Enforced in clearance. No code path assigns balances to an agent.

  • Bound to PulseChain 369

    Settlements reject any other chain id.

  • Two meters: ProveX 2% + Agent 1% (0.5 / 0.5 · 40 / 40 / 20)

    ProveX 2% buys and burns $PRVX. Agent 1% is separate: 50 bps buyer, 50 bps seller, then 40/40/20. Integer cents.

  • ZK verifier is a schema simulator

    Proofs are bound to the pinned Escrow. UnifiedPaymentVerifier.verifyPayment is the live ABI; this clearance still only schema-checks.

  • ProveX core ABI pinned

    Escrow.createDeposit · Orchestrator.signalIntent/fulfillIntent · UnifiedPaymentVerifier.verifyPayment. Adapter, RPC, and $PXA still unpublished.

  • Registry + stake gates

    3 active agents.

  • Open settlements

    0 in-flight. Rate limiter caps 8/min.

Threat model — already gated

  • Custody theft. No path assigns user balances to an agent. Custody flag must stay 0 or the settlement is aborted.
  • Step skipping / replay. State machine only allows n → n+1. Nonces are unique; reused nonces fail.
  • Prompt injection / XSS. Instructions are stripped of HTML, control chars, and javascript: URIs, then capped at 500 chars. Chat renders as text, not HTML.
  • Fee drift. Two meters. ProveX 2% (PRVX burn) is separate. Agent 1% (0.5% buyer / 0.5% seller) splits 40/40/20 in integer cents. Remainder of the Agent take always treasury.
  • Dust / griefing / oversize. Notional must sit between $10 and $1,000,000, inside the agent’s max-spend, and under 8 settlements per minute.
  • Wrong chain / asset. Proofs and settlements bind PulseChain 369. Assets are allow-listed (WPLS not confused with native PLS pairs).
  • Low-reputation counterparties. A2A floor is 70. Agents refuse below it.

Still required before mainnet

  • PulseChain JSON-RPC + wallet. Addresses are pinned. Seller must still sign the lock; this demo cannot move real WPLS.
  • ProveXEscrowAdapter + $PXA. Agent-side bytecode is unpublished. It may only call createDeposit, signalIntent, fulfillIntent, and verifyPayment on the pinned verified targets.
  • Buyer ZK extension. Real fiat-payment proofs replace the clearance-minted Groth16-shaped placeholder and must verify at the Unified Payment Verifier.
  • FeeRouter → PulseX. Two meters stay separate on-chain: ProveX core 2% buy-and-burn $PRVX; Agent 1% (0.5/0.5) then 40/40/20 on WPLS pairs. Events on PulseScan.
  • EAS schema + upgrade timelock. Identity attestations and CircuitBreaker.propose/vote on-chain, not just the local pause.

Demo path: run a settlement in Console — clearance, nonce, proof hash, and receipt are attached to the rail.

Security event log

  1. CLEARANCE_ONLINEClearance online. Non-custodial invariant armed. PulseChain 369.—