Crate ovmi[−][src]
Expand description
ovmi
This library allows Predicate to be loaded in binary format and their functions invoked.
Introduction
Predicate is a DSL for resolving Layer 2 dispute logic, and the Optimistic Virtual Machine gives simulated environment by Predicate.
There are several types of Predicate, each of which has an interface that looks like this.
Atomic Predicate
- decideTrue
- decide
CompiledPredicate
- payoutContractAddress
- isValidChallenge
- getChild
- decide
- decideTrue
- decideWithWitness
DecidablePredicate
- decideWithWitness
LogicalConnective
- isValidChallenge
Each of these definitions can be imported and exported.
OVM does not manage the state, but it can be called externally.
Loading and Validation
Before execution, a module must be validated. This process checks that the module is well-formed and makes only allowed operations.
You can get the binary of predicate from json. The json format is refer to: https://github.com/cryptoeconomicslab/wakkanay/blob/master/packages/ovm-transpiler/src/CompiledPredicate.ts
use ovmi::prepare; let compiled_predicate = prepare::compile_from_json("<compiled_predicate_json>").unwrap(); let binary_predicate = compiled_predicate::encode(); if let Err(err) = prepare::validate(binary_predicate) { panic!(err); }
Set external environments and.
Example) Compiled Predicate Execute
use ovmi::prepare; type AccountId = u64; // Setting External environment. struct MockExternalCall{..}; impl ExternalCall for MockExternalCall { ... } fn call_execute(inputs: Vec<Vec<u8>>, inputs: PredicateCallInputs<AccountId>) -> ExecResult<AccountId> { let compiled_predicate = prepare::compile_from_json("<compiled_predicate_json>").unwrap(); let (payout, address_input, bytes_inputs) = prepare::parse_inputs(inputs); let ext = MockExternalCall{..}; let executable = prepare::executable_from_compiled( &mut ext, code: compiled_predicate, payout, address_inputs, bytes_inputs, ); // execute and return value. CompiledExecutor::execute(&executable, inputs) }
Example) Logical Connective Predicate Execute
use ovmi::prepare; type AccountId = u64; // Setting External environment. struct MockExternalCall{..}; impl ExternalCall for MockExternalCall { ... } fn call_execute(address: AccountId, inputs: PredicateCallInputs<AccountId>) -> ExecResult<AccountId> { let ext = MockExternalCall{..}; let executable = prepare::logical_connective_executable_from_address( &mut ext, address, ); // execute and return value. LogicalConnectiveExecutor::execute(&executable, inputs) }
Re-exports
pub extern crate alloc; | |
pub use compiled_predicates::CompiledPredicate; | |
pub use prepare::compile_from_json; |
Modules
compiled_predicates | |
executor | |
predicates | Executable Predicates. |
prepare |
Macros
require | |
require_with_message |
Structs
AccountId | An opaque 32-byte cryptographic identifier. |
Range | An opaque Range(u128, u128). |