Contract Verification

Last updated: May 4, 2026

ParyonUSD is built from a set of immutable CashScript contracts on Bitcoin Cash mainnet. Anyone can independently verify that the live deployment is wired up correctly using the open-source verify_contract_deployment tool. This page lists the values you need to verify against, and walks through what the tool checks.

What you are verifying#

A ParyonUSD deployment is a configuration object containing:

  • 5 token IDs: paryonTokenId (PUSD), poolTokenId, redeemerTokenId, loanKeyFactoryTokenId, and oracleMigrationKeyTokenId. These are the genesis category IDs of the protocol’s smart contracts.
  • Contract parameters: the General Protocols oracle public key, the protocol-fee locking bytecode, the deployment start block height, the period length, and the redemption time-lock.

The verification tool confirms that these token IDs were created in genesis transactions that set up the contracts at the addresses reconstructed from the audited @paryonusd/contracts artifacts (see the audit report and summary), with the correct NFT capabilities, commitments, and fungible-token data.

Important: the tool verifies that a deployment configuration is internally consistent on-chain. You must still cross-reference the token IDs it reports against what the ParyonUSD dApp and your wallet show, to confirm you are verifying the deployment you intended.

Mainnet deployment values#

The values below are the canonical mainnet-v1 deployment configuration as published in @paryonusd/library. Cross-reference these with what your wallet, a DEX, or the dApp shows before sending or trading.

Token IDs#

  • ParyonUSD (PUSD): 2469acc5afa4b10cb5b5c04afb89c3a3ffd61c5da9c01e26d00951cae2a02544
  • Stability Pool: 7708645a7f30e97003573d9322202960a560a87527bef3666a30044a0dfdfa81
  • Redeemer: 649b2d862f01a904addf9095ae64860a59071544ee4a3695f14cbbc75571f930
  • Loan Key Factory: f07165f2c3448ced3bf0b33f9048ceb7567a2c07adb60d8f11b301c42db97405
  • Oracle Migration Key: 7776202e8f4eca51d5e634799c66c6a87076cc6efcc64c1322e7e880c71f6d30

Contract parameters#

  • Oracle public key: 02d09db08af1ff4e8453919cc866a4be427d7bfe18f2c05e5444c196fcf6fd2818. Verify this against the General Protocols oracle listing at oracles.cash.
  • Protocol fee locking bytecode: aa207c7a248c794af2cdf1b1a66a2311347c45b177fcb3aad730a7823c9e32fc754087
  • Start block height: 948406
  • Period length: 144 blocks
  • Redemption time-lock: 12 blocks

Genesis transaction IDs#

The Electrum protocol cannot look up a genesis transaction from a token ID alone, so the verification tool needs the genesis txids to fetch and inspect the transactions that created each token. The published mainnet-v1 genesis txids are:

  • paryonToken: 9c938f53eb97e089c72c47e9e5cf5f68ad23fd5eb4cb579c5266f04bba4b4d62
  • poolToken: 6a9eb371b2f9379568dad9ed0d4757859f2aa1db33207b6b885135ed8db31c2f
  • redeemerToken: 693c322cf1f0012bd17e765ffb5fa46602c1a37af21f6a8a69447e0a511895ea
  • loanKeyFactoryToken: 9d432d0f13842ced1f37d03dc3d31faf628c24146292a4c69b09c1a6758a79ff
  • oracleMigrationKeyToken: 68180fe720cfd1240e8fc571843522a7fe151ddc6405d6c5d93f3543906051de

All five genesis transactions descend from a single setup transaction. Pasting the parent setup txid into cashflow.dev/graph shows the full chain from the parent through the five vout0-creation transactions and onward to the genesis transactions.

What the verification tool checks#

For each of the five token IDs, verify_contract_deployment verifies:

  • The provided genesis transaction matches the deployment token IDs you are verifying.
  • The outputs land at the expected contract addresses, reconstructed locally from the audited contract artifacts and deployment parameters.
  • The outputs carry NFTs with the correct capability and commitment data.
  • No unexpected NFTs or fungible tokens are minted to other outputs (other than the contract addresses).
  • For the paryonTokenId, fungible PUSD tokens only appear on the Paryon borrowing contract addresses, with the expected total supply.

It also verifies that the deployment’s oraclePublicKey matches the known General Protocols USD/BCH oracle key.

If anything is off the script fails loudly and tells you which check did not pass; if everything matches you have end-to-end assurance that the contract addresses your wallet interacts with are the contracts you think they are.

Running the verification#

git clone https://github.com/ParyonUSD/verify_contract_deployment
cd verify_contract_deployment
pnpm install
pnpm verifySetup

The repository’s config.ts is preconfigured with the published mainnet-v1 deployment and genesis txids, so the default run verifies the live deployment. To verify a different deployment, edit config.ts to point at the deployment configuration and the corresponding genesis txids before running pnpm verifySetup.