[][src]Crate casperlabs_contract_ffi

A Rust library for writing smart contracts on the CasperLabs Platform.

Example

The following example contains session code which persists an integer value under an unforgeable reference. It then stores the unforgeable reference under a name in context-local storage.

use casperlabs_contract_ffi::contract_api::{storage, runtime, Error, TURef};
use casperlabs_contract_ffi::key::Key;
use casperlabs_contract_ffi::unwrap_or_revert::UnwrapOrRevert;
use casperlabs_contract_ffi::uref::URef;

const KEY: &str = "special_value";

fn store(value: i32) {
    // Store `value` under a new unforgeable reference.
    let value_ref: TURef<i32> = storage::new_turef(value);

    // Wrap the unforgeable reference in a value of type `Key`.
    let value_key: Key = value_ref.into();

    // Store this key under the name "special_value" in context-local storage.
    runtime::put_key(KEY, value_key);
}

// All session code must have a `call` entrypoint.
#[no_mangle]
pub extern "C" fn call() {
    // Get the optional first argument supplied to the argument.
    let value: i32 = runtime::get_arg(0)
        // Unwrap the `Option`, returning an error if there was no argument supplied.
        .unwrap_or_revert_with(Error::MissingArgument)
        // Unwrap the `Result` containing the deserialized argument or return an error
        // if there was a deserialization error.
        .unwrap_or_revert_with(Error::InvalidArgument);

    store(value);
}

Writing Smart Contracts

Support for writing smart contracts are contained in the contract_api module and its submodules.

Modules

args_parser

Home of ArgsParser, a trait used for parsing contract arguments from n-ary tuples.

block_time

Home of BlockTime, an internal type used in the execution of contracts.

bytesrepr

Contains serialization and deserialization code for types used throughout the system.

contract_api

Contains support for writing smart contracts.

execution

Home of Phase, which represents the phase in which a given contract is executing.

ext_ffi

Contains low-level bindings for host-side ("external") functions.

handlers

Contains definitions for panic and allocation error handlers, along with other #[no_std] support code.

key

Home of Key, the type for indexing all data stored on the CasperLabs Platform.

system_contracts

Contains support for implementing system contracts.

unwrap_or_revert

Home of UnwrapOrRevert, a convenience trait for unwrapping values.

uref

Home of URef, which represents an unforgeable reference.

value

Home of CLValue, the type representing data stored and manipulated on the CasperLabs Platform.

Statics

ALLOC