Represents keys in the cache of precompiled ErgoTrees for repeated evaluation.
A family of hints which are about a correspondence between a public image of a secret image and prover's commitment to randomness ("a" in a sigma protocol).
Operation descriptor based on ValueCompanion.
User-defined variables to be put into context.
User-defined variables to be put into context.
Each variable is identified by id: Byte
and can be accessed from a script
using getVar[T](id)
operation.
The value of the variable is represented by sigmastate.Values.Constant instance,
which contains both data value and SType descriptor. The descriptor is checked
against the type T
expected in the script operation. If the types don't match,
exception is thrown and the box spending (protected by the script) fails.
internal container of the key-value pairs
Implements finite state machine with stack of graph blocks (scopes), which correspond to lambdas and thunks.
Implements finite state machine with stack of graph blocks (scopes),
which correspond to lambdas and thunks.
It accepts messages: startScope(), endScope(), add(), reset()
At any time totalCost
is the currently accumulated cost.
Encapsulate simple monotonic (add only) counter with reset.
Abstract representation of cost results obtained during evaluation.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation.
Implements a simple and fast direct-style interpreter of ErgoTrees.
Implements a simple and fast direct-style interpreter of ErgoTrees.
### Motivation ErgoTree is a simple declarative intermediate representation for Ergo contracts. It is designed to be compact in serialized form and directly executable, i.e. no additional transformation is necessary before it can be efficiently executed.
This class implements a big-step recursive interpreter that works directly with ErgoTree HOAS. Because of this the evaluator is very simple and follows denotational semantics of ErgoTree (see https://ergoplatform.org/docs/ErgoTree.pdf). Or, the other way around, this implementation of ErgoTreeEvaluator is purely functional with immutable data structures and can be used as definition of ErgoTree's semantics.
### Implementation ErgoTreeEvaluator takes ErgoTree directly as it is deserialized as part of a transaction. No additional transformation is performed. ErgoTree is interpreted directly and all the intermediate data is stored in the runtime types. The runtime types are such types as special.collection.Coll, special.sigma.SigmaProp, special.sigma.AvlTree, BigInt, etc. It also use immutable Map to keep current DataEnv of computed ValDefs, as result only addition is used from the map, and deletion is essentially a garbage collection.
### Performance Since this interpreter directly works with SigmaDsl types (Coll, BigInt, SigmaProp etc), it turns out to be very fast. Since it also does JIT style costing instead of AOT style, it is 5-6x faster than existing implementation.
Configuration parameters of the evaluation run.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation. Represents cost of simple operation. Used for debugging, testing and profiling of costing.
descriptor of the ErgoTree operation
kind of the cost to be added to accumulator
Result of cost evaluation represented using simple given value.
Result of cost evaluation represented using simple given value. Used to represent cost of AOT costing.
the given value of the total cost
measured time of execution (if some)
A hint for a prover which helps the prover to prove a statement.
A hint for a prover which helps the prover to prove a statement. For example, if the statement is "pk1 && pk2", and the prover knows only a secret for the public key pk1, the prover fails on proving without a hint. But if the prover knows that pk2 is known to another party, the prover may prove the statement (with an empty proof for "pk2").
Collection of hints to be used by a prover
Collection of hints to be used by a prover
- hints stored in the bag
Base class of the context passed to verifier and prover.
Base class of the context passed to verifier and prover.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation. Represents cost of MethodCall operation. Used for debugging, testing and profiling of costing.
cost details obtained as part of MethodCall evaluation
Operation descriptor based on SMethod.
Operation descriptor based on name.
Operation costing descriptors combined together.
Each costable operation is described in one of the following ways: 1) using ValueCompanion - operation with separate node class 2) using SMethod - operation represented as method.
Each costable operation is described in one of the following ways: 1) using ValueCompanion - operation with separate node class 2) using SMethod - operation represented as method. 3) using string name - intermediate sub-operation present in cost model, but which is not a separate operation of ErgoTree.
A hint which a commitment to randomness associated with a public image of a secret, as well as randomness itself.
A hint which a commitment to randomness associated with a public image of a secret, as well as randomness itself. Please note that this randomness should be kept in secret by the prover.
- image of a secret
- randomness
- commitment to randomness used while proving knowledge of the secret
Script processor which holds pre-compiled reducers for the given scripts.
Script processor which holds pre-compiled reducers for the given scripts. This class is thread-safe.
This class implements optimized reduction of the given pre-compiled script.
This class implements optimized reduction of the given pre-compiled script. Pre-compilation of the necessary graphs is performed as part of constructor and the graphs are stored in the given IR instance.
The code make the following assumptions: 1) the given script doesn't contain both sigmastate.utxo.DeserializeContext and sigmastate.utxo.DeserializeRegister
The code should correspond to reduceToCrypto method, but some operations may be optimized due to assumptions above.
Statistics of ScriptProcessor operations.
Statistics of ScriptProcessor operations.
cache statistics such as hits and misses
one hit counter for each predefined script
Interpreter with enhanced functionality to prove statements.
Proof of correctness of tx spending
A hint which contains a commitment to randomness associated with a public image of a secret.
A hint which contains a commitment to randomness associated with a public image of a secret.
- image of a secret
- commitment to randomness used while proving knowledge of the secret
A hint which contains a proof-of-knowledge for a secret associated with its public image "image", with also the mark that the proof is real.
Settings to configure script processor.
Settings to configure script processor.
collection of scripts to ALWAYS pre-compile (each given by ErgoTree bytes)
maximum number of entries in the cache
if true, then cache statistics is recorded
number of cache load operations between two reporting events
A reducer which represents precompiled script reduction function.
A reducer which represents precompiled script reduction function. The function takes script execution context and produces the ReductionResult, which contains both sigma proposition and the approximation of the cost taken by the reduction.
A hint which is indicating that a secret associated with its public image "image" is already proven.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation. Represents cost of a sequence of operation. Used for debugging, testing and profiling of costing.
descriptor of the ErgoTree operation
descriptor of the cost added to accumulator
number of items in the sequence
A hint which contains a commitment to randomness associated with a public image of a secret.
A hint which contains a commitment to randomness associated with a public image of a secret.
- image of a secret
- commitment to randomness used while proving knowledge of the secret
A hint which contains a proof-of-knowledge for a secret associated with its public image "image", with also the mark that the proof is real.
Detailed results of cost evaluation represented by trace.
Detailed results of cost evaluation represented by trace.
NOTE: the trace
is obtained during execution of ErgoTree operations.
accumulated trace of all cost items (empty for AOT costing)
measured time of execution (if some)
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation.
An item in the cost accumulation trace of a sigmastate.Values.ErgoTree evaluation. Represents cost of an operation which depends on type (e.g. type of arguments). Used for debugging, testing and profiling of costing.
descriptor of the ErgoTree operation
type based cost descriptor added to accumulator
concrete type on this the operation is executed
Used as a fallback reducer when precompilation failed due to soft-fork condition.
Represents keys in the cache of precompiled ErgoTrees for repeated evaluation. Note, SigmaValidationSettings are part of the key, which is important, because the output of compilation depends on validation settings.
serialized bytes of ErgoTree instance (returned by ErgoTreeSerializer)
validation settings which where used for soft-forkable compilation.