Skip to content

Commit 8afca19

Browse files
committed
updated readme cw20-ics20-msg package
1 parent 092d7c5 commit 8afca19

File tree

1 file changed

+1
-58
lines changed

1 file changed

+1
-58
lines changed

packages/cw20-ics20-msg/README.md

+1-58
Original file line numberDiff line numberDiff line change
@@ -1,58 +1 @@
1-
# CW2 Spec: Contract Info
2-
3-
Most of the CW* specs are focused on the *public interfaces*
4-
of the contract. The APIs used for `ExecuteMsg` or `QueryMsg`.
5-
However, when we wish to migrate or inspect smart contract info,
6-
we need some form of smart contract information embedded on state.
7-
8-
This is where CW2 comes in. It specifies a special Item to
9-
be stored on disk by all contracts on `instantiate`.
10-
11-
`ContractInfo` must be stored under the `"contract_info"` key which translates
12-
to `"636F6E74726163745F696E666F"` in hex format.
13-
Since the state is well defined, we do not need to support any "smart queries".
14-
We do provide a helper to construct a "raw query" to read the ContractInfo
15-
of any CW2-compliant contract.
16-
17-
You can query using:
18-
```shell
19-
wasmd query wasm contract-state raw [contract_addr] 636F6E74726163745F696E666F --node $RPC
20-
```
21-
22-
When the `migrate` function is called, then the new contract
23-
can read that data andsee if this is an expected contract we can
24-
migrate from. And also contain extra version information if we
25-
support multiple migrate paths.
26-
27-
### Data structures
28-
29-
**Required**
30-
31-
All CW2-compliant contracts must store the following data:
32-
33-
* key: `contract_info`
34-
* data: Json-serialized `ContractVersion`
35-
36-
```rust
37-
pub struct ContractVersion {
38-
/// contract is a globally unique identifier for the contract.
39-
/// it should build off standard namespacing for whichever language it is in,
40-
/// and prefix it with the registry we use.
41-
/// For rust we prefix with `crates.io:`, to give us eg. `crates.io:cw20-base`
42-
pub contract: String,
43-
/// version is any string that this implementation knows. It may be simple counter "1", "2".
44-
/// or semantic version on release tags "v0.7.0", or some custom feature flag list.
45-
/// the only code that needs to understand the version parsing is code that knows how to
46-
/// migrate from the given contract (and is tied to it's implementation somehow)
47-
pub version: String,
48-
}
49-
```
50-
51-
Thus, an serialized example may looks like:
52-
53-
```json
54-
{
55-
"contract": "crates.io:cw20-base",
56-
"version": "v0.1.0"
57-
}
58-
```
1+
# Cw20-Ics20-Msg

0 commit comments

Comments
 (0)