States
Params
Module parameters stored as a singleton. Contains the platform administrator address.
message Params {
string platform_admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
- platform_admin: The address authorised to register new depositories
DepositoryCounter
A global sequence counter that auto-increments when new depositories are registered. Used to generate unique depository IDs.
Depositories
A mapping from depository ID to the Depository object:
message Depository {
string id = 1;
string owner = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"];
string pauser = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"];
string region = 4;
bool paused = 5;
}
- id: Unique identifier (auto-generated from counter)
- owner: Address that can manage the depository (authorise issuers, update params)
- pauser: Address that can pause/unpause the depository
- region: Geographic region identifier
- paused: Whether the depository is currently paused
AuthorizedIssuers
A mapping from (depository_id, spv_issuer) pair to boolean, tracking which SPV issuers are authorised for each
depository.
Key: (depository_id, spv_issuer) → Value: bool (true = authorised)
GlobalNotes
An indexed map storing Global Note data. Primary key is (isin, spv_issuer):
// Internal storage format
message InternalGlobalNote {
string depository_id = 1;
string global_note_hash = 2;
string pt_denom = 3;
}
The full GlobalNote is assembled from InternalGlobalNote combined with data from PTDenom:
message GlobalNote {
Payload payload = 1;
VersionMetadata metadata = 2;
}
message Payload {
string isin = 1;
string depository_id = 2;
string spv_issuer = 3;
string global_note_hash = 4;
string total_supply = 5 [(cosmos_proto.scalar) = "cosmos.Int"];
uint64 asset_type_id = 6;
string notarised_asset_id = 7;
}
Indexes:
- SPVIssuer: Reverse index allowing lookup of all Global Notes by SPV issuer address
PTDenom
A mapping from PT denom string to PTDenom metadata:
type PTDenom struct {
ISIN string
TotalSupply math.Int
}
The PT denom is compiled from asset information: pt/{asset_type_id}/{notarised_asset_id}
PTTransferability
A mapping from ISIN to transferability settings:
message PtTransferability {
bool paused = 1;
bool restrict_send = 2;
}
- paused: If true, all transfers of this PT denom are blocked
- restrict_send: Reserved for future use (send restrictions)
LatestPtHolders
Returned when a Global Note is surrendered, recording the final state of PT ownership:
message LatestPtHolders {
string isin = 1;
repeated PtHolder holders = 2;
}
message PtHolder {
string holder = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
string amount = 2 [(cosmos_proto.scalar) = "cosmos.Int"];
}
This data is returned in the MsgSurrenderGlobalNoteResponse and can be used for off-chain settlement processes.
State Relationships
Params
│
└── platform_admin ─────────────────────────────────────────┐
│
DepositoryCounter │
│ │
└── generates ──► Depository ◄── registered by ─────────────┘
│
├── owner ──► can authorise issuers
│
└── pauser ──► can pause/unpause
│
▼
AuthorisedIssuers
│
└── (depository_id, spv_issuer) → bool
│
▼
GlobalNotes
│
├── InternalGlobalNote
│ └── pt_denom ──► PTDenom
│ │
│ └── ISIN ──► PTTransferability
│
└── indexed by SPVIssuer
Storage Keys
| Prefix | Name | Description |
|---|---|---|
| 1 | KeyParams | Module parameters |
| 2 | KeyDepositories | Depository records |
| 3 | KeyGlobalNotes | Global Note records |
| 4 | KeyAuthorisedIssuers | Issuer authorisation mapping |
| 5 | KeyDepositoryCounter | Auto-increment counter |
| 6 | KeyPTTransferability | PT transfer controls |
| 7 | KeyPtDenom | PT denomination metadata |
| 8 | KeyGlobalNotesBySPVIssuer | Index: Global Notes by SPV |