0
0
Blockchain / Solidityprogramming~20 mins

Oracle integration (Chainlink) in Blockchain / Solidity - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Chainlink Oracle Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this Chainlink oracle request event?
Consider the following Solidity event emitted after a Chainlink oracle request is sent. What will be the output in the transaction logs when the request is made?
Blockchain / Solidity
event ChainlinkRequested(bytes32 indexed requestId);

function requestData() public returns (bytes32 requestId) {
    requestId = sendChainlinkRequestTo(oracle, jobId, payment);
    emit ChainlinkRequested(requestId);
}
ANo event is emitted because events need to be declared outside functions
BAn event with the requestId value logged in the transaction logs
CA compilation error due to missing event parameters
DThe function returns void and no logs are created
Attempts:
2 left
💡 Hint
Remember that events declared outside functions can be emitted inside functions.
🧠 Conceptual
intermediate
1:30remaining
Which Chainlink component is responsible for fetching off-chain data?
In the Chainlink architecture, which component actually retrieves data from outside the blockchain?
AChainlink Aggregator Contract
BSmart Contract on Ethereum
CChainlink Token (LINK)
DChainlink Oracle Node
Attempts:
2 left
💡 Hint
Think about which part connects to the real world outside the blockchain.
🔧 Debug
advanced
2:30remaining
Why does this Chainlink callback function fail to update the state?
Given the following Solidity code snippet, why does the state variable not update after the oracle response?
Blockchain / Solidity
bytes32 public data;

function fulfill(bytes32 _requestId, bytes32 _data) external recordChainlinkFulfillment(_requestId) {
    data = _data;
}

function requestData() public {
    Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
    sendChainlinkRequestTo(oracle, req, payment);
}
AThe data variable is not declared as public, so it cannot be updated
BThe recordChainlinkFulfillment modifier is missing, causing the function to revert
CThe fulfill function is not marked as external, so it cannot be called by the oracle
DThe fulfill function does not emit an event, so the update is invisible
Attempts:
2 left
💡 Hint
Oracle calls to fulfill functions require a specific visibility.
📝 Syntax
advanced
2:00remaining
Which option correctly initializes a Chainlink.Request struct?
Select the correct way to initialize a Chainlink.Request struct in Solidity for a job with jobId and callback function fulfill.
AChainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
BChainlink.Request req = new Chainlink.Request(jobId, address(this), this.fulfill);
CChainlink.Request req = Chainlink.Request(jobId, address(this), fulfill);
DChainlink.Request memory req = Chainlink.Request(jobId, this, fulfill.selector);
Attempts:
2 left
💡 Hint
Look for the correct use of memory keyword and selector syntax.
🚀 Application
expert
3:00remaining
What is the final value of `result` after this Chainlink oracle response?
Given the following Solidity contract snippet, what will be the value of the public variable `result` after the oracle calls fulfill with _data = 42?
Blockchain / Solidity
uint256 public result;

function requestData() public returns (bytes32 requestId) {
    Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
    requestId = sendChainlinkRequestTo(oracle, req, payment);
}

function fulfill(bytes32 _requestId, uint256 _data) public recordChainlinkFulfillment(_requestId) {
    result = _data * 2;
}
A84
B42
C0
DThe contract will revert and result remains unchanged
Attempts:
2 left
💡 Hint
Check how the fulfill function processes the _data parameter.