linera-sdk 0.9.0

Library to support developping Linera applications in Rust.
initialize: func(context: operation-context, argument: list<u8>) -> result<execution-outcome, string>

execute-operation: func(
    context: operation-context,
    operation: list<u8>,
) -> result<execution-outcome, string>

execute-message: func(
    context: message-context,
    message: list<u8>,
) -> result<execution-outcome, string>

handle-application-call: func(
    context: callee-context,
    argument: list<u8>,
    forwarded-sessions: list<session-id>,
) -> result<application-call-outcome, string>

handle-session-call: func(
    context: callee-context,
    state: session-state,
    argument: list<u8>,
    forwarded-sessions: list<session-id>,
) -> result<session-call-outcome, string>

record operation-context {
    chain-id: chain-id,
    authenticated-signer: option<owner>,
    height: block-height,
    index: u32,
}

record message-context {
    chain-id: chain-id,
    is-bouncing: bool,
    authenticated-signer: option<owner>,
    height: block-height,
    message-id: message-id,
}

record message-id {
    chain-id: chain-id,
    height: block-height,
    index: u32,
}

record callee-context {
    chain-id: chain-id,
    authenticated-signer: option<owner>,
    authenticated-caller-id: option<application-id>,
}

record application-id {
    bytecode-id: bytecode-id,
    creation: message-id,
}

type chain-id = crypto-hash
type owner = crypto-hash
type block-height = u64
type bytecode-id = message-id

record application-call-outcome {
    value: list<u8>,
    execution-outcome: execution-outcome,
    create-sessions: list<session-state>,
}

record session-id {
    application-id: application-id,
    index: u64,
}

record session-call-outcome {
    inner: application-call-outcome,
    new-state: option<session-state>,
}

record outgoing-message {
    destination: destination,
    authenticated: bool,
    is-tracked: bool,
    resources: resources,
    message: list<u8>,
}

record resources {
    fuel: u64,
    read-operations: u32,
    write-operations: u32,
    bytes-to-read: u32,
    bytes-to-write: u32,
    messages: u32,
    message-size: u32,
    storage-size-delta: u32,
}

record execution-outcome {
    messages: list<outgoing-message>,
    subscribe: list<tuple<channel-name, chain-id>>,
    unsubscribe: list<tuple<channel-name, chain-id>>,
}

variant destination {
    recipient(chain-id),
    subscribers(channel-name),
}

record channel-name {
    name: list<u8>,
}

type session-state = list<u8>

record crypto-hash {
    part1: u64,
    part2: u64,
    part3: u64,
    part4: u64,
}