pub trait CoreFunctionHelper {
    // Required method
    fn pop_value_impl(&mut self) -> Option<Value>;
    // Provided methods
    fn pop_value(&mut self) -> Result<Value> { ... }
    fn set_block_height(&mut self, _height: u32) { ... }
    fn set_signer(&mut self, _private_key: String) -> Result<()> { ... }
    fn lookup_mapping(
        &self,
        _program: Option<Symbol>,
        _name: Symbol,
    ) -> Option<&HashMap<Value, Value>> { ... }
    fn lookup_mapping_mut(
        &mut self,
        _program: Option<Symbol>,
        _name: Symbol,
    ) -> Option<&mut HashMap<Value, Value>> { ... }
    fn mapping_get(
        &self,
        program: Option<Symbol>,
        name: Symbol,
        key: &Value,
    ) -> Option<Value> { ... }
    fn mapping_set(
        &mut self,
        program: Option<Symbol>,
        name: Symbol,
        key: Value,
        value: Value,
    ) -> Option<()> { ... }
    fn mapping_remove(
        &mut self,
        program: Option<Symbol>,
        name: Symbol,
        key: &Value,
    ) -> Option<()> { ... }
    fn rng(&mut self) -> Option<&mut ChaCha20Rng> { ... }
}Expand description
A context in which we can evaluate core functions.
This is intended to be implemented by Cursor, which will be used during
execution of the interpreter, and by Vec<Value>, which will be used
during compile time evaluation for constant folding.
The default implementations for rng, set_block_height, and mapping lookup
do nothing, as those features will not be available during compile time
evaluation.