For the complete documentation index, see llms.txt. This page is also available as Markdown.

Tabi Link Oracle

Introduction

Tabi Link includes Oracle and VRF, where Oracle represents an oracle that enables smart contracts to retrieve data from the outside world. VRF, also known as a verifiable random function, is a provably fair and verifiable random number generator (RNG) that enables smart contracts to access random values without affecting security or availability.

I. Oracle

Working principle:

Consumer Address: 0xdD325193a3195b4654b12EaCFE0fE548C7761590

Oracle address: 0x590311669252DCF34bfbF3981747D13Cf09ec19A

Existing jobs are as follows:

Get > Uint256 - (TOML) : 5b507ee5e7af477ebf31d4efaa5ba85b

Get > Int256 - (TOML) : bcb8bc009e6042dd96727b61f4bd0238

Get > Bool - (TOML) : ecacc544321640c399ddec5e99d6197f

Get > String : a109c25f143d4adf9a5258628ad88bb2

Get > Bytes : 264423c8ec534be6af0bb24ec8b1fdfa

multi-word (TOML) : c7116b94377d41cb94b4fe9ea38e1d3a

Consumer contracts are as follows:

// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;


import {Chainlink, ChainlinkClient} from "./ChainlinkClient.sol";
import {ConfirmedOwner} from "../shared/access/ConfirmedOwner.sol";

/**
 * THIS IS AN EXAMPLE CONTRACT THAT USES UN-AUDITED CODE.
 * DO NOT USE THIS CODE IN PRODUCTION.
 */

contract ATestnetConsumer is ChainlinkClient, ConfirmedOwner {
    using Chainlink for Chainlink.Request;

    uint256 public currentPrice;

    event RequestEthereumPriceFulfilled(
        bytes32 indexed requestId,
        uint256 indexed price
    );

    constructor() ConfirmedOwner(msg.sender) { }

    function requestEthereumPrice(
        address _oracle,
        string memory _jobId
    ) public onlyOwner {
        Chainlink.Request memory req = buildChainlinkRequest(
            stringToBytes32(_jobId),
            address(this),
            this.fulfillEthereumPrice.selector
        );
        req.add(
            "get",
            "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD"
        );
        req.add("path", "USD");
        req.addInt("times", 100);
        sendChainlinkRequestTo(_oracle, req, 0);
    }

    function fulfillEthereumPrice(
        bytes32 _requestId,
        uint256 _price
    ) public recordChainlinkFulfillment(_requestId) {
        emit RequestEthereumPriceFulfilled(_requestId, _price);
        currentPrice = _price;
    }

    function cancelRequest(
        bytes32 _requestId,
        uint256 _payment,
        bytes4 _callbackFunctionId,
        uint256 _expiration
    ) public onlyOwner {
        cancelChainlinkRequest(
            _requestId,
            _payment,
            _callbackFunctionId,
            _expiration
        );
    }

    function stringToBytes32(
        string memory source
    ) private pure returns (bytes32 result) {
        bytes memory tempEmptyStringTest = bytes(source);
        if (tempEmptyStringTest.length == 0) {
            return 0x0;
        }

        assembly {
        // solhint-disable-line no-inline-assembly
            result := mload(add(source, 32))
        }
    }
}

Request code:

The results are as follows:

Detailed code can be found in tabi-oracle\

II. VRF

The specific process is shown in the figure.

VRF Consumer Address: 0xb484B5F803F912C074Ac204dC66114F06aBc2100

VRF Coordinator Address: 0x9492b270EdA7d4046D6aa5e3F15c24deD2c8BD25

The contract code for VRFConsumer.sol is as follows:

VRFConsumerBase.sol contract:

The request code is as follows:

See VRF Example

Last updated