PowerOracle in a nutshell: how it works and how to use it?

PowerPool
PowerPool
Published in
4 min readOct 31, 2020

In this article, we share the most recent information on PowerOracle system design and instructions for oracle users, price reporters, and Fishermen

PowerOracle was released one week ago in Ethereum mainnet. Since its launch, it has provided more than 570 price reports for 12 trading pairs in total. In this article we will discuss:

  1. Mechanism of Oracle operation, incentives, and rewards
  2. How your Dapp can use this price oracle right now
  3. How to become a Price Reporter or Fishermen

The PowerOracle in a nutshell

The definition of PowerOracle is presented below:

PowerOracle is a decentralized cross-chain price oracle, using Uniswap V2 as a primary data source of time-weighted average prices (TWAPs).

It autonomously operates by applying economic incentives for independent price reporters.

So, let’s read it step-by-step.
1. It is a cross-chain oracle. It means that this oracle provides price feeds not only to Ethereum mainnet, but also to other networks (for example, xDAI and Matic) as well.
2. It is a truly decentralized oracle. It means that there is no single point of failure in the system: the price is pulled from a decentralized exchange (Uniswap), which is more liquid than Coinbase. Oracle is permissionless so everyone can be a Price Reporter (unlike, for example, Chainlink).
3. Oracle operates using built-in incentives for independent price reporters. Basically, Price Reporter is highly incentified by rewards, as well as Fishermen (agents, controlling the correct operation of Price Reporters).

Incentive scheme for price reporters
System of pseudo-anonymous agents cannot operate correctly without certain skin in the game coupled with rewards for honest behavior. Due to it, we implemented CVP staking for Price Reporters and Fishermen.

Price Reporter — an agent, pulling the contract to calculate and supply price feed to all recipient chains.
Note, that the price reporter doesn’t calculate the price himself — he only pulls the contract and pays gas for that. So, the only type of misbehavior here is to not pull the contract on time.

Fishermen — an agent, controlling price reporters. Fishermen control if the price reporter sent his transaction on time and in case of missing the reporting point he signs the transaction. For this transaction, Fishermen receives a reward and part of Price Reporter’s stake.

The reward scheme was implemented according to several goals:

  1. Attract as high a CVP stake from Price Reporter as possible and establish serious competition for Price Reporter’s job. The higher stake of Price Reporter correlates with the security of the oracle. Higher stake = more secure oracle. Taking into account that this oracle is aimed to service dApps on several chains, it is a critically important part of Oracle’s infrastructure.
  2. Attract as many Fishermen as possible, and high CVP stakes as well. It also contributes to overall oracle security

Price Reporter is rewarded for correct operation. The reward is divided into two parts:

  1. Gas compensation. It is paid in CVP tokens by recalculation according to gas spent and the current CVP price.
  2. Profit (or “income”) reward. Price Reporter receives profit as APY on his stake. Currently, APY is set as 50% (it can be changed by the community via proposal).

It means, that Price Reporter in case of honest operation can receive 50% APY in CVP

Note, that in the current operation scheme there can be only one price reporter. It is a person with the highest CVP stake.

Fishermen are also rewarded in CVP for their job. There are two types of rewards for Fishermen:

  1. The reward for activity (being online). This reward is paid according to uptime and is based on signing special transactions proofing that Fishermen is constantly online and ready to slash Price Reporter. Currently, this reward is set as 20% APY in CVP.
  2. Slashing reward. If Price Reporter fails and Fishermen pulls the contract instead of Price Reporter, he slashes a 5% Price Reporter stake (and an additional 5% goes to the community pool). In this case Price Reporter loses 10% of his stake. Additionally, he receives a reward for successful price reporting transactions based on the initial Price Reporter’s stake.

IMPORTANT NOTICE: currently slashing is 0% as Oracle is still in testing (security audit pending). After receiving audit results it will be set at 10%.

It means, that Fishermen in case of honest operation can receive 20% APY just for staking his CVP and running a special script

How can your dApp use this oracle right now?

Yes, and it is incredibly easy:

  1. 0x019e14DA4538ae1BF0BCd8608ab8595c6c6181FB (proxy contract)
  2. 0xa394922a1a45786583e5383cf4485a6f325d8807 (implementation contract)

You need to import IPowerOracle.sol to your smart contract and add a proxy contract address for this interface.

Use the following methods to request prices in USDC with 6 decimals:

function getPriceBySymbol(string calldata symbol_) external view override returns (uint256)function getPriceBySymbolHash(bytes32 symbolHash_) external view override returns (uint256)

Use the following method to request prices in USDC with 18 decimals:

function assetPrices(address token_) external view override returns (uint256)

For more details check out the PowerOracle source code.

How to become a Price Reporter or Fishermen

The algorithm for creating a Price Reporter or Fishermen is presented below. Note please, that actions are the same. If your stake is not the highest one, you will automatically become a Fishermen.

  1. You need to stake your CVP at the Oracle Page.
  2. Access https://github.com/powerpool-finance/power-oracle-reporter and clone git repository
  3. Run the script with proper parameters. The “reporter private key” is a key to your Ethereum address. The private key is used only for transaction signing (as in the case of any Ethereum transaction)
MAINNET=1 REPORTER_PRIVATE_KEY=<Reporter private key e.g. 0x7700fa638003ef53c10485c0535353e9cf7e773cf64b3cfc7942662f8218e88b> 
npm start
  1. The script in the console will notify your operation of your Price Reporter/Fisherman successfully started
  2. Run our notifier telegram bot for tracking operation of your Price Reporter/Fishermen

--

--

PowerPool
PowerPool

DePIN layer powering AI Agents and DeFi automation in multichain universe.