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…f11aProveX core
Orchestratorverified
signalIntent() / fulfillIntent(paymentProof). Adapter talks here; agents never hold keys.
0x742d…b080ProveX core
Payment Verifier Registryverified
getVerifier(paymentMethod). Unknown methods cannot release escrow.
0x6a4f…597AProveX core
Unified Payment Verifierverified
verifyPayment(intentHash, paymentProof). Called inside fulfillIntent.
0x0e73…81DbAccess
Gating serviceEOA
EOA stored as intentGatingService on deposits. Signs signalIntent. Not a contract.
0x4Bd6…f9CfTokens
$PRVXverified
ProveX settlement token. Core 2% + Agent extra 40 bps buy-and-burn target.
0xF6f8…0b11Tokens
USDCverified
PulseChain USDC (from Ethereum). Default on-ramp asset.
0x15D3…1f07Tokens
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.
ProveX primary
Published
Escrow 0x0B42…f11a
Agent-owned rail
Published
Escrow 0xd848…0C3e
Connection matrix
- Connected
Off-chain orchestrator
Natural-language orchestrator
Per-template tool allow-list + system prompt. Local parser + optional Grok narration.
Keep prompts sanitized; never send keys or proofs to the LLM.
- Connected
Client
Pre-trade ticket
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.
- Simulated
Client
Offer book + seller desk
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.
- Simulated
Off-chain orchestrator
Clearance
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.
- Not wired
Off-chain orchestrator
Server attestation
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.
- Simulated
ProveXAgent contracts
AgentRegistry.sol
In-memory agents, permissions, pause. No contract address.
Deploy proxy on PulseChain 369; registerAgent() from this UI.
- Simulated
ProveXAgent contracts
StakeManager.sol / vePXA
Local PXA balances and lock days. Voting power is a client formula.
Wire ERC-20 approve + stake() / lock() against $PXA.
- Simulated
ProveXAgent contracts
FeeRouter.sol
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.
- Simulated
ProveXAgent contracts
CircuitBreaker.sol
Local pause does not call setPaused. paused() is read from escrow and orchestrator.
Owner must pause the contract. This button cannot.
- Not wired
ProveXAgent contracts
ProveXEscrowAdapter.sol
Lifecycle is modeled. Target escrow is now pinned. No adapter bytecode.
Deploy adapter; only createDeposit / signalIntent / fulfillIntent against pinned targets.
- Pinned
ProveX core
ProveX escrow
Verified Escrow. createDeposit / lockFunds / unlockAndTransferFunds. Proofs fail if they target any other address.
Seller wallet signs createDeposit. Still no eth_sendTransaction from this UI.
- Pinned
ProveX core
ProveX orchestrator
Verified Orchestrator. signalIntent → fulfillIntent(paymentProof). protocolFee() is the core 2% meter.
Buyer/agent posts extension proof via fulfillIntent. Needs wallet + RPC.
- Pinned
ProveX core
Payment verifiers
Verified Registry + UnifiedPaymentVerifier.verifyPayment(intentHash, paymentProof).
Replace clearance schema checks with the on-chain verifier result.
- Pinned
ProveX core
Gating service
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.
- Not wired
Client
Buyer ZK browser extension
Clearance mints a structural Groth16-shaped proof bound to the pinned escrow.
Install the ProveX extension; post real proof bytes through the adapter.
- Not wired
PulseChain / PulseX
PulseChain RPC (chain id 369)
Chain id and escrow address are enforced. No JSON-RPC session.
Connect https://rpc.pulsechain.com (or a private node) + wallet.
- Not wired
Client
Injected wallet / WalletConnect
UI is read-only on balances. No eth_sendTransaction.
Add PulseChain (369) provider; seller signs escrow lock.
- Pinned
PulseChain / PulseX
PulseX DEX (WPLS pairs)
Hero terminal links to pulsex.com. Pairs labeled PXA/WPLS, PRVX/WPLS. WPLS 0xA1077a29…
Router address + buy-and-burn path from FeeRouter.
- Pinned
PulseChain / PulseX
$PRVX / USDC / WPLS
PRVX 0xF6f8Db0aBa00007681F8fAF16A0FDa1c9B030b11 · USDC 0x15D38573d2feeb82e7ad5187aB8c1D52810B1f07. $PXA unpublished.
Publish $PXA. Verify burn events on PulseScan.
- Not wired
Identity
EAS identity attestations
Reputation scores live in local state only.
Anchor ReputationAttestor to an EAS schema UID on PulseChain.
| Layer | Component | Status | Bound to | Still needed |
|---|---|---|---|---|
| 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
- CLEARANCE_ONLINEClearance online. Non-custodial invariant armed. PulseChain 369.—

