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

Testing

How to test, if my bridge can communicate with plugin and start sharing the data

In your, remix IDE open a new file and name it as PluginClient.sol and copy and paste the code contents.

Override your oracle address & job id in below client contract and deploy it in a remix by overriding the PLI mainnet address like below (Line numbers 21 & 22) in the smart contract to be replaced with your oracle contract address & job-id from the previous steps

// SPDX-License-Identifier: MIT
pragma solidity ^0.4.24;
import "https://github.com/GoPlugin/contracts/blob/main/src/v0.4/PluginClient.sol";
import "https://github.com/GoPlugin/contracts/blob/main/src/v0.4/vendor/Ownable.sol";
contract AlarmClockSample is PluginClient, Ownable {
    using Plugin for Plugin.Request;
    
    bool public alarmDone;
    address private oracle;
    bytes32 private jobId;
    uint256 private fee;
    
    /**
     * Network: Mainnet
     * Oracle: Plugin - 0xf180e56bb575806aefaf2a7616622a9fc180b51c
     * Job ID: Plugin - bcbac9232272445294102fdd1ee97c98
     * Fee: 0.1 PLI
     */
    constructor(address _pli) public Ownable() {
        setPluginToken(_pli);
        oracle = 0xf180e56bb575806aefaf2a7616622a9fc180b51c;
        jobId = "982105d690504c5e9ce374d040c08654";
        fee = 0.1 * 10 ** 18; // 0.1 PLI
        alarmDone = false;
    }
    
    /* Create a Plugin request to start an alarm and after the time in seconds is up, return throught the fulfillAlarm function */
    function requestAlarmClock(uint256 durationInSeconds) public returns (bytes32 requestId) 
    {
        Plugin.Request memory request = buildPluginRequest(jobId, address(this), this.fulfillAlarm.selector);
        // This will return in 90 seconds
        request.addUint("until", block.timestamp + durationInSeconds);
        return sendPluginRequestTo(oracle, request, fee);
    }
    
    /**
     * Receive the response in the form of uint256
     */ 
    function fulfillAlarm(bytes32 _requestId, uint256 _volume) public recordPluginFulfillment(_requestId)
    {
        alarmDone = true;
    }
function withdrawPli() public onlyOwner() { 
        PliTokenInterface pliToken = PliTokenInterface(pluginTokenAddress());
        require(pliToken.transfer(msg.sender, pliToken.balanceOf(address(this))), "Unable to transfer");
    }
}

After deployment, you will receive a contract address- In this case here it is -> xdc3017a414bf657a42fc183143e90d378f05ff0004

Fund your contract address with PLI ( let’s say 1 PLI) before you trigger the sleep task like below

Once you submit the “requestAlarm”, a job will be triggered in your PLUGIN Node like below.

After a couple of seconds, you should see the job is getting completed successfully

Last updated