---
# System prepended metadata

title: Cosmwasm notes

---

# Cosmwasm notes

## Top level interface

- `init`
- `execute`
- `query`


## Execute

### Input

- the message
- block information
- Storage, Queries, Bulitin APIs

### Output

- sub calls
- sub cosmos msgs
- attributes (Events)
  - attribute `contract_address` is inserted automatically

## Storage plus

Encapulate cosmos-sdk storage apis (leveldb), flush is handled by host.

The underlying storage api supports get/set/iterate_with_prefix.

### Abstractions

- `Item`, a singleton key.
- `Map`, `(prefix, pkey) -> value`.
- `Prefix`, iterate key value subset which shares common prefix.
- `IndexedMap`, `Map` with secondary indexes.
  - `trait Index/IndexList` secondary indexes.
  - When update, a) update primary map, b) remove old and insert new secondary indexes.

#### Indexes

- `UniqueIndex`, unique index, value is cloned.
  `(namespace, index_name, idx_value) -> {key, value}`
- `MultiIndex`, support multiple values under same index key.
  `(namespace, index_name, idx_value, pk) -> b"pk_len"`
  
## Misc

- Use `HumanAddr` in messages, use `CanonicalAddr` in storage.