Below is an example of a minimal smart contract that runs vanilla inference:
ArbInference.sol
pragma solidity >=0.4.21 <0.9.0;
/// @title Infer Call
/// @notice This contract is used to run on-chain inference.
/// This custom contract will set on 0x000000000000000000000000000000000000011a since we set it in precompile.go.
interface ArbInference {
function inferCall(bytes memory model, bytes memory input) external returns (bytes memory);
function inferCallZK(bytes memory model, bytes memory input) external returns (bytes memory);
}
VanillaInference.sol
pragma solidity ^0.8.18;
import "contracts/ArbInference.sol";
contract VanillaInference {
string value;
function infer(
string calldata modelName,
string calldata inputData
) public {
value = string(abi.encodePacked(ArbInference(address(0x11a)).inferCall(abi.encodePacked(modelName), abi.encodePacked(inputData))));
}
function getValue() public view returns (string memory) {
return value;
}
}