Dynamic Js Execution
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 both watchTowerAddress and sourceCode within your contract:
watchTowerAddress:
0xEcd0EeD24Ed6a54d05a07125c4ccb809b3A09868sourceCode: "
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.encodeSpecify 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:
function(uint256)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 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
// 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
)4. Handling The Callback
When the execution is finished, your will receive the result within the callbackTask.
function callbackTask(
bytes calldata resultData,
string[] memory transcripts,
uint256 wtExecutionId,
uint8 status,
string memory callbackMessageDetails
) external override onlywatchTower {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
Last updated
Was this helpful?