Crate casper_contract[][src]

Expand description

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

no_std

The library is no_std, but uses the core and alloc crates.

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.

Writing Smart Contracts

#![no_std]
#![no_main]

use casper_contract::contract_api::{runtime, storage};
use casper_types::{Key, URef};

const KEY: &str = "special_value";
const ARG_VALUE: &str = "value";

fn store(value: i32) {
    // Store `value` under a new unforgeable reference.
    let value_ref: URef = storage::new_uref(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_named_arg(ARG_VALUE);
    store(value);
}

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

Modules

Contains support for writing smart contracts.

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

Home of UnwrapOrRevert, a convenience trait for unwrapping values.

Statics

An instance of WeeAlloc which allows contracts built as no_std to avoid having to provide a global allocator themselves.