Unleash the Power of Decentralized Oracles with Orally!

Transform your dApps with real-world data, automated smart contracts, and more. Join the revolution today!

Supported networks

000

executed transactions

Avalanche
zkSync
Ethereum
Optimism
Linea
Bitfinity
Bnbchain
Aurora
Near
Arbitrum
Gnosis
Polygon
Q
Taiko

Products

Sibyl

Decentralized data fetcher
Efficient on-demand deliverywith verifiable data
Enables custom data feeds

Pythia

On-chain automation tool
Random Number Generator (RNG)
Provides Data from Sybil

Apollo

EVM request-based data delivery
Random Number Generator (RNG)
Provides Data from Sybil

Cassandra

Decentralised authentication to Gmail,
Twitter, etc. for dApps

Delphos

Decentralised Data Preprocessing
Custom preprocessing algorithms for Data Streams

Hermes

Cross-Chain Communication

Code integration

                            
                        // fetch price feed
const fetchData = async () => {
  const response = await fetch("https://wth3l-tiaaa-aaaap-aa5uq-cai.icp0.io/get_asset_data_with_proof?pair_id=ICP/USD");
  const data = await response.json();
  console.log(data);
}

fetchData();
                            
// response example                            
{
    "symbol": "ICP/USD",
    "rate": 4902941764,
    "timestamp": 1685442778,
    "decimals": 9,
    "signature": "5d4368547f194ff784d904cc9052108894044bba7588d2447bd13f070128ef6d690e12094b5e3c6c304187587cd6ff8b4d35dfc3ea4b7165f79d2e881b446dd31c"
}
                        
                    
                            
                        // verify price feed in your smart contract logic

import "path-to/IOrallyVerifierOracle.sol";

contract MyContract {
    IOrallyVerifierOracle public orallyVerifier;

    constructor(address _orallyVerifierAddress) {
        orallyVerifier = IOrallyVerifierOracle(_orallyVerifierAddress);
    }

    function executeTransaction(
        string memory _pairId,
        uint256 _price,
        uint256 _decimals,
        uint256 _timestamp,
        bytes memory _signature
    ) public {
        require(
            orallyVerifier.verifyUnpacked(_pairId, _price, _decimals, _timestamp, _signature),
            "Data verification failed"
        );

        // Execute your business logic here...
    }
}
                        
                    
                            
                        // only Pythia's executor could update value

import {OrallyPythiaConsumer} from "../consumers/OrallyPythiaConsumer.sol";

contract PythiaExecutionExample is OrallyPythiaConsumer {
    uint256 public value;

    constructor(
        address _pythiaRegistry
    ) OrallyPythiaConsumer(_pythiaRegistry) {}

    function updateValue(uint256 _value) external onlyExecutor {
        value = _value;
    }
}
                    
                            
                        // Pythia triggers `pickWinner` with random number

import {OrallyPythiaConsumer} from  "../consumers/OrallyPythiaConsumer.sol";

contract RaffleExample is OrallyPythiaConsumer {
    uint256 maxNumberOfTickets;
    uint256 ticketPrice;
    address[] entries;

    constructor(
        address _pythiaRegistry,
        uint256 _maxNumberOfTickets,
        uint256 _ticketPrice
    ) OrallyPythiaConsumer(_pythiaRegistry) {
        maxNumberOfTickets = _maxNumberOfTickets;
        ticketPrice = _ticketPrice;
    }

    function enterRaffle() external payable {
        require(
            entries.length < maxNumberOfTickets,
            "RaffleExample: Raffle is full"
        );
        require(
            msg.value == ticketPrice,
            "RaffleExample: Ticket price is not correct"
        );
        entries.push(msg.sender);
    }

    function pickWinner(uint256 _randomNumber) external onlyExecutor {
        require(
            entries.length == maxNumberOfTickets,
            "RaffleExample: Raffle is not full"
        );
        uint256 winnerIndex = _randomNumber % entries.length;
        payable(entries[winnerIndex]).call{value: address(this).balance}("");
    }
}
                        
                    
                            
                        // price feed contract which Pythia regularly updates by Sybil price feed

import {OrallyPythiaConsumer} from "../consumers/OrallyPythiaConsumer.sol";

interface IFxPriceFeedExample {
    function pair() external view returns (string memory);

    function baseTokenAddr() external view returns (address);

    function decimalPlaces() external view returns (uint256);
}

contract FxPriceFeedExample is OrallyPythiaConsumer, IFxPriceFeedExample {
    uint256 public rate;
    uint256 public lastUpdate;
    string public pair;
    address public baseTokenAddr;
    uint256 public decimalPlaces;

    constructor(
        address _pythiaRegistry,
        string memory _pair,
        address _baseTokenAddr,
        uint256 _decimalPlaces
    ) OrallyPythiaConsumer(_pythiaRegistry) {
        pair = _pair;
        baseTokenAddr = _baseTokenAddr;
        decimalPlaces = _decimalPlaces;
    }

    function updateRate(
        string memory _pairId,
        uint256 _rate,
        uint256 _decimals,
        uint256 _timestamp
    ) external onlyExecutor {
        rate = (_rate * (10 ** decimalPlaces)) / (10 ** _decimals); // normalise rate
        lastUpdate = _timestamp;
    }

    function updateTime() external view returns (uint256) {
        return lastUpdate;
    }

    function exchangeRate() external view returns (uint256) {
        return rate;
    }
}
                        
                    
  • Fetch Price Feed
  • Verify Price Feed
  • Basic automation
  • Randomness (Raffle)
  • Price Feed Contract

Benefits

Unbeatable Cost Efficiency

Harness the power of ICP to access real-world data with minimal overhead and a groundbreaking approach that delivers data feeds at incredibly low costs.

Fully Decentralized
& Trustless

Orally leverages advanced features of ICP, such as HTTP Outcalls, ECDSA threshold signatures and random tape, to provide secure and reliable data feeds.

Cross—Chain
Compatibility

Seamlessly integrate Orally into various blockchains, expanding the possibilities for decentralized applications.

Custom Data Feed

Access tailored data feeds for diverse dApp needs, from market trends to real-world events, enhancing reliability and relevance.

Modular & Compositional approach

Benefit from a flexible, scalable architecture, allowing easy adaptation and evolution to meet the changing demands of blockchain applications.

How It Works

Step 1

Choose your desired Orally
product (Sibyl or Pythia) and
integrate it into your DApp.

Step 2

Subscribe to the oracle service and configure settings such as data sources, frequency, and custom assets (if applicable).

Step 3

Orally fetches and processes real-world data, leveraging the power of ICP and special data flow for maximum efficiency and security.

Step 4

Data is securely transferred directly to DApp by end user or automative transactions! allowing developers to access and utilize it in their decentralized applications.

Use cases

Decentralized Finance

Decentralized Finance - Access real-time price feeds for various assets, enabling accurate pricing and market analysis.

Gaming & NFTs

Gaming & NFTs - Implement randomness and automation to create dynamic, unpredictable,
and fair gaming experiences.

Supply Chain Management

Supply Chain Management - Track and verify the movement of goods with secure and reliable data from multiple sources.

Partners

Get Started with Orally

Orally is your key to unlock real-world data on multiple blockchain networks.

rocket