Sight AI
  • 👋Overview
    • đŸĨFHE
    • 🍍The Problem
  • 🍇Sight Oracle
    • 💡Concepts
      • 🍉Architecture
      • 📔Contract
      • 🟠Decentralized Oracle Node Network
      • 📠FHE Compute Execution Virtual Machine
      • 📃RequestBuilder
    • ⏊Supported Networks
  • Sight Contracts
    • Getting Started
    • Understanding Request Model
  • SIGHT.JS
    • Getting Started
    • Make an encrypt value - CLI
    • Make an encrypt value - Frontend
  • â„šī¸Tutorial
    • Environment Setup
      • Prerequisite
      • Setup Local Development Environment
      • Fund Local Wallet
    • 👷Create Your First dAPP using Hardhat
    • đŸ› ī¸Create Your First dAPP using Foundry
    • 🎲Create a Crypto Pusher Game
      • Contract
      • Interface
    • 📄Remix FHE Demo Local Deployment Tutorial- Preparation
    • 📄Remix FHE Demo Local Deployment Tutorial- Deploying Contracts Using Remix
    • 📄Remix FHE Demo Local Deployment Tutorial- Contracts Explanation&Interaction
  • 🔎Research
    • ✅Verifiable FHE
    • 🌟SPARC
    • 📅Research Updates
  • 🍓Innovative Use Cases and dApps
    • đŸĨĨFHE On-Chain Game
    • A Fairer Prediction Markets with Sight Oracle
  • đŸģRoadmap
  • 🎨Community
    • Website
    • Twitter
    • Telegram
    • Github
  • Sight Incentive Plan - Season 1
  • Sight Incentive Plan - Season 2
Powered by GitBook
On this page
  1. Tutorial

Single Step FHE Request

In this example, we show how to make a simple request to Sight Oracle and get the response.

Example Contract

// SPDX-License-Identifier: BSD-3-Clause-Clear

pragma solidity ^0.8.20;

import "@sight-oracle/contracts/Oracle/Types.sol";
import "@sight-oracle/contracts/Oracle/Oracle.sol";
import "@sight-oracle/contracts/Oracle/RequestBuilder.sol";
import "@sight-oracle/contracts/Oracle/ResponseResolver.sol";

contract Example {

    // Use Sight Oracle's RequestBuilder and ResponseResolver to interact with Sight Oracle
    using RequestBuilder for RequestBuilder.Request;
    using ResponseResolver for CapsulatedValue;

    Oracle public oracle;
    CapsulatedValue private _target;

    constructor(address oracle_) payable {
        oracle = Oracle(payable(oracle_));
    }

    function makeRequest() public payable {
        // Initialize new FHE computation request of a single step.
        RequestBuilder.Request memory r = RequestBuilder.newRequest(
            msg.sender,
            1,
            address(this),
            this.callback.selector, // specify the callback for Oracle
            ''
        );

        // Generate a random encrypted value and store in Sight Network
        r.rand();

        // Call request.complete() to complete build process
        r.complete();

        // Send the request via Sight FHE Oracle
        oracle.send(r);
    }

    // only Oracle can call this
    function callback(bytes32 /** requestId **/, CapsulatedValue[] memory values) public onlyOracle {
        // Decode value from Oracle callback
        CapsulatedValue memory result = values[0];

        // Keep this encrypted target value
        _target = result;
    }

    modifier onlyOracle() {
        require(msg.sender == address(oracle), "Only Oracle Can Do This");
        _;
    }

}

Explanation

  1. Contract Initialization:

    • The Example contract imports the necessary modules from the Sight Oracle package.

    • The contract uses the RequestBuilder library to construct requests and the ResponseResolver library to interpret the responses.

  2. Constructor:

    • The constructor initializes the contract with the address of the Sight Oracle. This address is used to send requests and handle callbacks.

  3. makeRequest Function:

    • This function initiates a new request to the Sight Oracle.

    • A new request is created using RequestBuilder.newRequest, specifying the sender, the number of steps in the computation, the address to which the callback should be sent, and the callback function.

    • The rand function is called to generate a random encrypted value and store it in the Sight Network.

    • The complete function finalizes the request build process.

    • The send function sends the request to the Sight Oracle.

  4. callback Function:

    • This function is called by the Sight Oracle once the computation is complete.

    • It decodes the returned value using the ResponseResolver and stores the encrypted target value in the _target variable.

  5. Modifiers:

    • onlyOracle: Ensures that only the Sight Oracle can call the callback function.

By following this guide, you can easily make a request to the Sight Oracle and handle the response securely and efficiently.

Last updated 6 months ago

â„šī¸
📄