[v1] On-chain price feeds

Intro

In order to simulate the order book from centralized exchanges without sacrificing capital efficiency, WOOFi created a custom on-chain price fee which works along side with the sPMM algorithm. This price feed considers multiple parameters including mid-price pp, spread ss, and liquidity coefficient kk.

WOOFi's on-chain price feeds are deployed on multiple blockchains. Users can call price to get priceNow and feasible of token. If feasible is false, do not use priceNow value. All prices are USDT/USDC-based, and the decimal of priceNow is 18 - base_decimal + quote_decimal.

Code Example

Contract ABI

[
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "base",
                "type": "address"
            }
        ],
        "name": "price",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "priceNow",
                "type": "uint256"
            },
            {
                "internalType": "bool",
                "name": "feasible",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    }
]

Python Example (python 3.8)

  • Query price

import web3
import json

web3_provider = f'your-web3-provider'

w3 = web3.Web3(web3.Web3.HTTPProvider(web3_provider))
abi_str = '[{"inputs": [{"internalType": "address","name": "base","type": "address"}],"name": "price","outputs": [{"internalType": "uint256","name": "priceNow","type": "uint256"},{"internalType": "bool","name": "feasible","type": "bool"}],"stateMutability": "view","type": "function"}]'
abi = json.loads(abi_str)
oracle_addr = '0x6b6fBEc7934b104e81b2046D24A990e03e17afDC'
contract = w3.eth.contract(address=oracle_addr, abi=abi)

# query WOO/USDT pair quoting price 
woo_addr = '0x4691937a7508860F876c9c0a2a617E7d9E945D4B'
contract.functions.price(woo_addr).call()
  • Response

# return [priceNow, feasible]
>> [841915000000000000, True]

Last updated

Was this helpful?