Price Oracle
Last updated: October 6, 2026
Every core operation in ParyonUSD depends on the BCH/USD price: how much PUSD you can borrow, when a loan can be liquidated, how much BCH a redemption pays out, and how much BCH covers a loan’s interest. This page explains where that price comes from and how it gets on-chain.
The General Protocols oracle
ParyonUSD uses the USD/BCH price oracle operated by General Protocols. It is the same oracle infrastructure used by AnyHedge and BCH Bull, the largest DeFi applications on Bitcoin Cash, and it has been in production use for years.
A few properties make it a good fit:
- Neutral third party: General Protocols operates independently from ParyonUSD. The price does not come from the ParyonUSD team.
- Aggregated from multiple sources: the price is the median of several independently operated sources (currently Bitpay, Coinbase, and Kraken). No price is published if too few sources are available or if the central prices disagree.
- Cryptographically signed: every price message is signed with the oracle’s key, so the contracts accept only prices that General Protocols actually published.
- Published policies: the oracle works under a public Price Source Policy and Price Oracle Policy. Each version is identified by its hash, so any change to the published policies is visible.
- Not based on on-chain liquidity: because the price comes from large exchanges rather than a BCH DEX, it is not exposed to manipulation of thin on-chain liquidity, and using the median means no single exchange sets the price.
The oracle is actively maintained. Version 1.1.0 of the Price Source Policy (May 2026) added Kraken as a source, raised the minimum number of sources required to publish, and requires low deviation between the central prices. USD/BCH is one of the feeds General Protocols prioritizes for ongoing support.
The oracle’s price history and status are public: you can follow the USD/BCH feed on oracles.cash.
General Protocols commits to operating the oracle until a set date, currently April 15, 2027 (shown on oracles.cash as the commitment end). In normal operations this commitment rolls over before it ends, and we continuously monitor it. If the oracle ever stopped being available, the price contract could be migrated to a new source (see Upgradability).
How the price gets on-chain
The oracle publishes a signed price roughly every minute. ParyonUSD stores the BCH/USD price in a set of price contracts, which every other contract reads from when it needs a price.
The price contract accepts a new price when either:
- the message is a heartbeat, which is every 10th oracle price (about every 10 minutes), or
- the price has moved 0.5% or more from the stored price. In that case any of the 1-minute messages is accepted, so large moves can reach the contracts within about a minute.
Storing only heartbeats and significant moves keeps the market closely tracked without updating every minute. Fewer updates mean lower on-chain volume and fees, and less contention: every borrow, loan change, interest payment, liquidation, and redemption spends a price contract output to read the price, so constant updates would be racing against user transactions for the same outputs.
Before updating, the contract checks that:
- the message carries a valid oracle signature,
- it is newer than the stored price, so an old price cannot be replayed, and
- the price is valid, meaning it is in the expected format and above zero.
In practice, the ParyonUSD transaction service watches the oracle and submits these updates automatically. Updating is also permissionless: the signed oracle messages are publicly broadcast, and anyone can submit the latest one to the price contracts in a transaction, so updates never have to depend on the ParyonUSD service.
You can verify the oracle public key the contracts are deployed with, 02d09db0…fd2818, on the Contract Verification page.
Where the price is used
The contracts use the price currently stored on-chain:
- Borrowing: sets the maximum PUSD you can mint against your collateral (minimum 110% collateral ratio) and converts the borrowing fee to BCH.
- Managing a loan: any change that keeps the loan open (repaying, adding or withdrawing collateral) must leave it at or above 110% at the stored price. This is what limits how much collateral you can withdraw.
- Interest: converts each period’s interest from PUSD to BCH, paid from the loan’s collateral.
- Liquidation: a loan becomes liquidatable once its collateral ratio, measured at the stored price, falls below 110%.
- Redemptions: the price is locked in when a redemption starts, at 0.5% above the stored price, so the redeemer receives 0.5% less BCH than at the oracle rate.
Prices change between updates, so the stored price can differ slightly from the live market price. The design accounts for this. Because a 0.5% move makes any 1-minute oracle message eligible, and the transaction service submits these automatically, the stored price normally stays within about 0.5% of the oracle price. The 0.5% redemption premium offsets the drift a redeemer could otherwise capture. Liquidations and redemptions are always priced from the signed oracle price, never from a price set by a trader or a DEX.
Upgradability
The price contract is the only upgradable part of ParyonUSD. All other contracts (borrowing, loans, the stability pool, redemptions) are immutable.
The price contract can be migrated to new contract code using a dedicated oracle migration key NFT. This lets the protocol move to a different or more decentralized oracle if one becomes available on Bitcoin Cash, or adjust how prices are updated. The migration key adds a trust assumption, but it is scoped to the one component that already relies on external data.
The migration key’s token ID is listed on the Contract Verification page.