zkML inference represents running inference on an AI or ML model in Vanna's decentralized filestore, where a ZK-SNARK will also be generated and validated by the nodes on the Vanna Network. The proof will be available on the data availability layer, which can be queried through our inference transaction explorer.
In order to run zkML inference, you need to implement the ArbInference interface for inferCallZK.
model - The IPFS CID for the model
input - The input parameters to the inference request
Below is an example of a minimal smart contract that runs zkML inference:
ArbInference.sol
pragmasolidity >=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 {functioninferCall(bytesmemory model,bytesmemory input) externalreturns (bytesmemory);functioninferCallZK(bytesmemory model,bytesmemory input) externalreturns (bytesmemory);}
zkMLInference.sol
pragmasolidity ^0.8.18;import"contracts/ArbInference.sol";contract zkMLInference {string value;functionzkInfer(stringcalldata modelName,stringcalldata inputData ) public { value =string(abi.encodePacked(ArbInference(address(0x11a)).inferCallZK(abi.encodePacked(modelName), abi.encodePacked(inputData)))); }functiongetValue() publicviewreturns (stringmemory) {return value; }}