Skip to main content

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

PrefixNameDescription
1KeyParamsModule parameters
2KeyDepositoriesDepository records
3KeyGlobalNotesGlobal Note records
4KeyAuthorisedIssuersIssuer authorisation mapping
5KeyDepositoryCounterAuto-increment counter
6KeyPTTransferabilityPT transfer controls
7KeyPtDenomPT denomination metadata
8KeyGlobalNotesBySPVIssuerIndex: Global Notes by SPV