Example: Off-Chain Computation Request Handling
Example
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IOffChainCompute {
function requestComputation(string memory data) external returns (bytes32 requestId);
function getResult(bytes32 requestId) external view returns (string memory result, bool isReady);
}
contract OffChainComputationHandler {
IOffChainCompute offChainCompute;
mapping(bytes32 => bool) public requestProcessed;
mapping(bytes32 => string) public computationResults;
event ComputationRequested(bytes32 indexed requestId);
event ComputationCompleted(bytes32 indexed requestId, string result);
constructor(address computeAddress) {
offChainCompute = IOffChainCompute(computeAddress);
}
function requestOffChainComputation(string memory data) public {
bytes32 requestId = offChainCompute.requestComputation(data);
requestProcessed[requestId] = false;
emit ComputationRequested(requestId);
}
function handleComputationResult(bytes32 requestId) public {
require(!requestProcessed[requestId], "Request already processed.");
(string memory result, bool isReady) = offChainCompute.getResult(requestId);
require(isReady, "Computation results not ready yet.");
requestProcessed[requestId] = true;
computationResults[requestId] = result;
emit ComputationCompleted(requestId, result);
}
}Explanation
Example of Usage
Explanation:
Key Concepts:
Last updated