This Dynamic Oracle implementation allows your smart contract to execute a predefined JavaScript function on the Truebit network, providing off-chain computation with on-chain guarantees.
1. Inherit From BaseTBContract
Import BaseTBContract.sol contract and extend from it.
2. Constructor
When deploying the contract, ensure you set the correct values for watchTowerAddress,sourceCode within your contract:
sourceCode: "Place your JS code here inside quotes".
3. Submitting a Request
In your contract, to execute JS code on Truebit, call the _requestExecution function. This will trigger the task execution on the Truebit platform.
To call the _requestExecution , you must:
Define the method signature string.
Encode all parameters using abi.encode.
Specify the execution type as: DOTypes.ExecutionType.EMBEDDED_FUNCTION.
Method Signature
The method signature must follow a strict format. It begins with the method name (in this case, "function"), followed by parentheses containing the parameter definitions, separated by commas.
Example:
Filling The Payload
Once the method signature is defined, you must fill the payload with the values for the parameter defined on the signature, and encode it by using abi.encode(...).
Call _requestExecution
Finally, you call _requestExecution() with:
The method signature (string).
The encoded payload (bytes).
The execution type: DOTypes.ExecutionType.EMBEDDED_FUNCTION .
4. Handling The Callback
When the execution is finished, your will receive the result within the callbackTask.
resultData: The encoded result data from the execution.
transcripts: Array of execution transcripts for verification.
wtExecutionId: The execution identifier.
status: Execution status (0 = success, >0 = error).
callbackMessageDetails: Additional details about the execution.
// Prepare the payload for the function execution
bytes memory payload = abi.encode(
input // The input parameter for fibonacci calculation
);
// Submit the execution request to the Truebit network
uint256 wtExecutionId = _requestExecution(
"function(uint256)",
payload,
DOTypes.ExecutionType.EMBEDDED_FUNCTION
)