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,
}