linera-execution 0.4.1

Persistent data and the corresponding logics used by the Linera protocol for runtime and execution of smart contracts / applications.
Documentation
resource initialize {
    static new: func(
        context: operation-context,
        argument: list<u8>,
    ) -> initialize

    poll: func() -> poll-execution-result
}

resource execute-operation {
    static new: func(
        context: operation-context,
        operation: list<u8>,
    ) -> execute-operation

    poll: func() -> poll-execution-result
}

resource execute-message {
    static new: func(
        context: message-context,
        message: list<u8>,
    ) -> execute-message

    poll: func() -> poll-execution-result
}

resource handle-application-call {
    static new: func(
        context: callee-context,
        argument: list<u8>,
        forwarded-sessions: list<session-id>,
    ) -> handle-application-call

    poll: func() -> poll-call-application
}

resource handle-session-call {
    static new: func(
        context: callee-context,
        state: session-state,
        argument: list<u8>,
        forwarded-sessions: list<session-id>,
    ) -> handle-session-call

    poll: func() -> poll-call-session
}

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

record message-context {
    chain-id: chain-id,
    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

variant poll-execution-result {
    pending,
    ready(result<execution-result, string>),
}

variant poll-call-application {
    pending,
    ready(result<application-call-result, string>),
}

variant poll-call-session {
    pending,
    ready(result<session-call-result, string>),
}

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

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

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

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

record execution-result {
    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,
}