5. Compile and try the request¶
This article is part of the beginner tutorial on creating a totally decentralized Bitcoin price feed on Ethereum with Solidity and Witnet.
Compile you data request¶
Compiling the request could not be easier:
npm run compile:requests
yarn compile:requests
The compile:requests
npm task will:
- Analyze your requests for syntactic and semantic errors.
- Warn you of any security issues and broken incentives.
- Try to compile the requests into Witnet bytecode.
- Put the bytecode into auxiliary Solidity contracts that you can import into your own contracts.
- Write migration files with default constructor arguments that you can later customize.
If you now take a look in the contracts/requests
folder, you will notice a
new file called BitcoinPrice.sol
. It will contain something like this:
pragma solidity >=0.7.0 <0.9.0;
import "witnet-ethereum-bridge/contracts/requests/WitnetRequest.sol";
// The bytecode of the BitcoinPrice request that will be sent to Witnet
contract BitcoinPriceRequest is WitnetRequest {
constructor () WitnetRequest(hex"0abf0108f3b5988906123b122468747470733a2f2f7777772e6269747374616d702e6e65742f6170692f7469636b65722f1a13841877821864646c6173748218571903e8185b125c123168747470733a2f2f6170692e636f696e6465736b2e636f6d2f76312f6270692f63757272656e7470726963652e6a736f6e1a2786187782186663627069821866635553448218646a726174655f666c6f61748218571903e8185b1a0d0a0908051205fa3fc000001003220d0a0908051205fa3fc000001003100a186420012846308094ebdc03") { }
}
As you can see, the contract contains the byte code for the request you just wrote, exported as a Solidity contract that you can then import and instantiate from your own contracts.
Try your data request¶
Data requests can be easily tried and debugged locally using the
try
npm task:
npm run try
yarn try
The first time you invoke the try
npm task, it will tell you that it
needs to download a native witnet_toolkit
binary. Just press Enter and
it will do it for you.
A few seconds later, you should be presented with a "Witnet data request local execution report". If you go to the latest part — the "Tally stage" — you can see what the result of your data request would be if executed right now:
╔════════════════════════════════════════════╗
║ Witnet data request local execution report ║
║ BitcoinPrice.sol ║
╚╤═══════════════════════════════════════════╝
<multiple lines ommitted>
│ ┌────────────────────────────────────────────────┐
└──┤ Tally stage │
├────────────────────────────────────────────────┤
│ Execution time: 0.00123 ms │
│ Result is Integer: 47742275 │
└────────────────────────────────────────────────┘
Now that you have compiled and tried your data request, the next step is to write your main consumer contract.