basic-storage
Contract interface
This page shows the spec for the wasm built from this repo (stellar contract info interface --output json-formatted). TypeScript bindings live in frontend/lib/basic-storage-bindings/ (stellar contract bindings typescript). Refresh both with make contract-bindings. Testnet txs use whatever contract id is in NEXT_PUBLIC_CONTRACT_ID after you run make deploy.
Spec captured
May 14, 2026, 4:32 PM
From basic-storage-interface.meta.json (written by make contract-interface-json).
Full interface JSON
[
{
"event_v0": {
"doc": "",
"lib": "",
"name": "I64Set",
"prefix_topics": [
"i64_set"
],
"params": [
{
"doc": "",
"name": "v",
"type_": "i64",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "",
"lib": "",
"name": "TagSet",
"prefix_topics": [
"tag_set"
],
"params": [
{
"doc": "",
"name": "label",
"type_": "string",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"udt_union_v0": {
"doc": "",
"lib": "",
"name": "DataKey",
"cases": [
{
"void_v0": {
"doc": "",
"name": "Value"
}
},
{
"void_v0": {
"doc": "",
"name": "Signed"
}
},
{
"void_v0": {
"doc": "",
"name": "Tag"
}
},
{
"void_v0": {
"doc": "",
"name": "Counter"
}
},
{
"void_v0": {
"doc": "Boolean toggle (e.g. feature flag).",
"name": "Flag"
}
},
{
"void_v0": {
"doc": "64-bit signed integer.",
"name": "WideI"
}
},
{
"void_v0": {
"doc": "Small opaque blob (capped length).",
"name": "Blob"
}
},
{
"void_v0": {
"doc": "128-bit unsigned integer.",
"name": "WideU"
}
},
{
"void_v0": {
"doc": "Short interned label (Stellar `Symbol`, max 32 chars).",
"name": "Code"
}
},
{
"void_v0": {
"doc": "Optional Stellar account / contract address.",
"name": "Pointer"
}
},
{
"void_v0": {
"doc": "128-bit signed integer.",
"name": "WideI128"
}
},
{
"void_v0": {
"doc": "Bounded `Vec<u32>` (coverage for `Vec`).",
"name": "U32List"
}
},
{
"void_v0": {
"doc": "Bounded `Map<String, u32>` (coverage for `Map`).",
"name": "Scores"
}
},
{
"void_v0": {
"doc": "Non-optional `Address` (distinct from `Option<Address>` on the pointer slot).",
"name": "PlainAddr"
}
},
{
"void_v0": {
"doc": "Nested struct slot.",
"name": "Nested"
}
},
{
"void_v0": {
"doc": "Enum slot.",
"name": "Widget"
}
}
]
}
},
{
"event_v0": {
"doc": "Emits the same `Bytes` passed to `set_blob` (capped by `MAX_BLOB_LEN`) for indexer / EVM-style parity.",
"lib": "",
"name": "BlobSet",
"prefix_topics": [
"blob_set"
],
"params": [
{
"doc": "",
"name": "data",
"type_": "bytes",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "Same UTF-8 string input as `set_symbol` (before interning as `Symbol` in storage).",
"lib": "",
"name": "CodeSet",
"prefix_topics": [
"code_set"
],
"params": [
{
"doc": "",
"name": "label",
"type_": "string",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "",
"lib": "",
"name": "FlagSet",
"prefix_topics": [
"flag_set"
],
"params": [
{
"doc": "",
"name": "on",
"type_": "bool",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "",
"lib": "",
"name": "ValueSet",
"prefix_topics": [
"value_set"
],
"params": [
{
"doc": "",
"name": "value",
"type_": "u32",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"udt_struct_v0": {
"doc": "",
"lib": "",
"name": "InnerBits",
"fields": [
{
"doc": "",
"name": "x",
"type_": "u32"
}
]
}
},
{
"udt_struct_v0": {
"doc": "Nested `#[contracttype]` struct (coverage for composite UDT graphs).",
"lib": "",
"name": "OuterBits",
"fields": [
{
"doc": "",
"name": "inner",
"type_": {
"udt": {
"name": "InnerBits"
}
}
},
{
"doc": "",
"name": "stamp",
"type_": "u64"
}
]
}
},
{
"event_v0": {
"doc": "Same `OuterBits` as `set_nested`.",
"lib": "",
"name": "NestedSet",
"prefix_topics": [
"nested_set"
],
"params": [
{
"doc": "",
"name": "outer",
"type_": {
"udt": {
"name": "OuterBits"
}
},
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "Same `Map<String, u32>` as `set_scores`.",
"lib": "",
"name": "ScoresSet",
"prefix_topics": [
"scores_set"
],
"params": [
{
"doc": "",
"name": "scores",
"type_": {
"map": {
"key_type": "string",
"value_type": "u32"
}
},
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "",
"lib": "",
"name": "SignedSet",
"prefix_topics": [
"signed_set"
],
"params": [
{
"doc": "",
"name": "v",
"type_": "i32",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "Same `Vec<u32>` as `set_vec_u32`.",
"lib": "",
"name": "VecU32Set",
"prefix_topics": [
"vec_u32_set"
],
"params": [
{
"doc": "",
"name": "items",
"type_": {
"vec": {
"element_type": "u32"
}
},
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "Same `DemoWidget` as `set_widget`.",
"lib": "",
"name": "WidgetSet",
"prefix_topics": [
"widget_set"
],
"params": [
{
"doc": "",
"name": "w",
"type_": {
"udt": {
"name": "DemoWidget"
}
},
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"udt_union_v0": {
"doc": "Small user enum stored on-chain (coverage for `#[contracttype]` enums).",
"lib": "",
"name": "DemoWidget",
"cases": [
{
"void_v0": {
"doc": "",
"name": "Off"
}
},
{
"void_v0": {
"doc": "",
"name": "On"
}
},
{
"tuple_v0": {
"doc": "",
"name": "Pair",
"type_": [
"u32",
"u32"
]
}
}
]
}
},
{
"event_v0": {
"doc": "",
"lib": "",
"name": "CounterSet",
"prefix_topics": [
"counter_set"
],
"params": [
{
"doc": "",
"name": "n",
"type_": "u64",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "Same `Option<Address>` as `set_pointer` so event payload matches invocation.",
"lib": "",
"name": "PointerSet",
"prefix_topics": [
"pointer_set"
],
"params": [
{
"doc": "",
"name": "who",
"type_": {
"option": {
"value_type": "address"
}
},
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "",
"lib": "",
"name": "WideI128Set",
"prefix_topics": [
"wide_i128_set"
],
"params": [
{
"doc": "",
"name": "v",
"type_": "i128",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "",
"lib": "",
"name": "WideU128Set",
"prefix_topics": [
"wide_u128_set"
],
"params": [
{
"doc": "",
"name": "v",
"type_": "u128",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"event_v0": {
"doc": "Same `Address` as `set_plain_addr`.",
"lib": "",
"name": "PlainAddrSet",
"prefix_topics": [
"plain_addr_set"
],
"params": [
{
"doc": "",
"name": "who",
"type_": "address",
"location": "data"
}
],
"data_format": "single_value"
}
},
{
"function_v0": {
"doc": "",
"name": "get",
"inputs": [],
"outputs": [
"u32"
]
}
},
{
"function_v0": {
"doc": "",
"name": "set",
"inputs": [
{
"doc": "",
"name": "value",
"type_": "u32"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "get_i64",
"inputs": [],
"outputs": [
"i64"
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_tag",
"inputs": [],
"outputs": [
"string"
]
}
},
{
"function_v0": {
"doc": "",
"name": "set_i64",
"inputs": [
{
"doc": "",
"name": "v",
"type_": "i64"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "Stores a short text label and emits `TagSet` (string payload for indexers).",
"name": "set_tag",
"inputs": [
{
"doc": "",
"name": "label",
"type_": "string"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "get_blob",
"inputs": [],
"outputs": [
"bytes"
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_flag",
"inputs": [],
"outputs": [
"bool"
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_i128",
"inputs": [],
"outputs": [
"i128"
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_u128",
"inputs": [],
"outputs": [
"u128"
]
}
},
{
"function_v0": {
"doc": "",
"name": "set_blob",
"inputs": [
{
"doc": "",
"name": "data",
"type_": "bytes"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "set_flag",
"inputs": [
{
"doc": "",
"name": "on",
"type_": "bool"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "set_i128",
"inputs": [
{
"doc": "",
"name": "v",
"type_": "i128"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "set_u128",
"inputs": [
{
"doc": "",
"name": "v",
"type_": "u128"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "get_nested",
"inputs": [],
"outputs": [
{
"udt": {
"name": "OuterBits"
}
}
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_scores",
"inputs": [],
"outputs": [
{
"map": {
"key_type": "string",
"value_type": "u32"
}
}
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_signed",
"inputs": [],
"outputs": [
"i32"
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_symbol",
"inputs": [],
"outputs": [
"symbol"
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_widget",
"inputs": [],
"outputs": [
{
"udt": {
"name": "DemoWidget"
}
}
]
}
},
{
"function_v0": {
"doc": "",
"name": "set_nested",
"inputs": [
{
"doc": "",
"name": "outer",
"type_": {
"udt": {
"name": "OuterBits"
}
}
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "Stores a bounded string-keyed map (coverage for `Map` + `String` keys).",
"name": "set_scores",
"inputs": [
{
"doc": "",
"name": "scores",
"type_": {
"map": {
"key_type": "string",
"value_type": "u32"
}
}
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "Stores a signed integer and emits `SignedSet`.",
"name": "set_signed",
"inputs": [
{
"doc": "",
"name": "v",
"type_": "i32"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "Stores a short `Symbol` (interned id; pass UTF-8 bytes that match Symbol rules: `a-zA-Z0-9_`, 1\\xe2\\x80\\x9332 chars).",
"name": "set_symbol",
"inputs": [
{
"doc": "",
"name": "label",
"type_": "string"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "set_widget",
"inputs": [
{
"doc": "",
"name": "w",
"type_": {
"udt": {
"name": "DemoWidget"
}
}
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "get_counter",
"inputs": [],
"outputs": [
"u64"
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_pointer",
"inputs": [],
"outputs": [
{
"option": {
"value_type": "address"
}
}
]
}
},
{
"function_v0": {
"doc": "",
"name": "get_vec_u32",
"inputs": [],
"outputs": [
{
"vec": {
"element_type": "u32"
}
}
]
}
},
{
"function_v0": {
"doc": "Stores a u64 counter and emits `CounterSet`.",
"name": "set_counter",
"inputs": [
{
"doc": "",
"name": "n",
"type_": "u64"
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "Stores an optional Stellar address (account or contract).",
"name": "set_pointer",
"inputs": [
{
"doc": "",
"name": "who",
"type_": {
"option": {
"value_type": "address"
}
}
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "Stores a bounded `Vec<u32>` (empty allowed).",
"name": "set_vec_u32",
"inputs": [
{
"doc": "",
"name": "items",
"type_": {
"vec": {
"element_type": "u32"
}
}
}
],
"outputs": []
}
},
{
"function_v0": {
"doc": "",
"name": "get_plain_addr",
"inputs": [],
"outputs": [
"address"
]
}
},
{
"function_v0": {
"doc": "Non-optional `Address` (default read is the burned account when unset).",
"name": "set_plain_addr",
"inputs": [
{
"doc": "",
"name": "who",
"type_": "address"
}
],
"outputs": []
}
}
]get()
- Inputs
- (none)
- Returns
- u32
get_blob()
- Inputs
- (none)
- Returns
- bytes
get_counter()
- Inputs
- (none)
- Returns
- u64
get_flag()
- Inputs
- (none)
- Returns
- bool
get_i128()
- Inputs
- (none)
- Returns
- i128
get_i64()
- Inputs
- (none)
- Returns
- i64
get_nested()
- Inputs
- (none)
- Returns
- {"udt":{"name":"OuterBits"}}
get_plain_addr()
- Inputs
- (none)
- Returns
- address
get_pointer()
- Inputs
- (none)
- Returns
- Option<address>
get_scores()
- Inputs
- (none)
- Returns
- Map<string, u32>
get_signed()
- Inputs
- (none)
- Returns
- i32
get_symbol()
- Inputs
- (none)
- Returns
- symbol
get_tag()
- Inputs
- (none)
- Returns
- string
get_u128()
- Inputs
- (none)
- Returns
- u128
get_vec_u32()
- Inputs
- (none)
- Returns
- Vec<u32>
get_widget()
- Inputs
- (none)
- Returns
- {"udt":{"name":"DemoWidget"}}
set()
- Inputs
- value: u32
- Returns
- ()
set_blob()
- Inputs
- data: bytes
- Returns
- ()
set_counter()
Stores a u64 counter and emits `CounterSet`.
- Inputs
- n: u64
- Returns
- ()
set_flag()
- Inputs
- on: bool
- Returns
- ()
set_i128()
- Inputs
- v: i128
- Returns
- ()
set_i64()
- Inputs
- v: i64
- Returns
- ()
set_nested()
- Inputs
- outer: {"udt":{"name":"OuterBits"}}
- Returns
- ()
set_plain_addr()
Non-optional `Address` (default read is the burned account when unset).
- Inputs
- who: address
- Returns
- ()
set_pointer()
Stores an optional Stellar address (account or contract).
- Inputs
- who: Option<address>
- Returns
- ()
set_scores()
Stores a bounded string-keyed map (coverage for `Map` + `String` keys).
- Inputs
- scores: Map<string, u32>
- Returns
- ()
set_signed()
Stores a signed integer and emits `SignedSet`.
- Inputs
- v: i32
- Returns
- ()
set_symbol()
Stores a short `Symbol` (interned id; pass UTF-8 bytes that match Symbol rules: `a-zA-Z0-9_`, 1\xe2\x80\x9332 chars).
- Inputs
- label: string
- Returns
- ()
set_tag()
Stores a short text label and emits `TagSet` (string payload for indexers).
- Inputs
- label: string
- Returns
- ()
set_u128()
- Inputs
- v: u128
- Returns
- ()
set_vec_u32()
Stores a bounded `Vec<u32>` (empty allowed).
- Inputs
- items: Vec<u32>
- Returns
- ()
set_widget()
- Inputs
- w: {"udt":{"name":"DemoWidget"}}
- Returns
- ()
BlobSet
topics: "blob_set"
- Payload
- data (data): bytes
- Data format
- single_value
CodeSet
topics: "code_set"
- Payload
- label (data): string
- Data format
- single_value
CounterSet
topics: "counter_set"
- Payload
- n (data): u64
- Data format
- single_value
FlagSet
topics: "flag_set"
- Payload
- on (data): bool
- Data format
- single_value
I64Set
topics: "i64_set"
- Payload
- v (data): i64
- Data format
- single_value
NestedSet
topics: "nested_set"
- Payload
- outer (data): {"udt":{"name":"OuterBits"}}
- Data format
- single_value
PlainAddrSet
topics: "plain_addr_set"
- Payload
- who (data): address
- Data format
- single_value
PointerSet
topics: "pointer_set"
- Payload
- who (data): Option<address>
- Data format
- single_value
ScoresSet
topics: "scores_set"
- Payload
- scores (data): Map<string, u32>
- Data format
- single_value
SignedSet
topics: "signed_set"
- Payload
- v (data): i32
- Data format
- single_value
TagSet
topics: "tag_set"
- Payload
- label (data): string
- Data format
- single_value
ValueSet
topics: "value_set"
- Payload
- value (data): u32
- Data format
- single_value
VecU32Set
topics: "vec_u32_set"
- Payload
- items (data): Vec<u32>
- Data format
- single_value
WideI128Set
topics: "wide_i128_set"
- Payload
- v (data): i128
- Data format
- single_value
WideU128Set
topics: "wide_u128_set"
- Payload
- v (data): u128
- Data format
- single_value
WidgetSet
topics: "widget_set"
- Payload
- w (data): {"udt":{"name":"DemoWidget"}}
- Data format
- single_value