RWA Protocol
T-REX Protocol on KiiChain
Note: This project is still under development and is not deployed on our current testnet. It is schedule for deployment on testnet version 3.
Overview
This document outlines the detailed implementation plan for the T-REX (Token for Regulated EXchanges) protocol using CosmWasm smart contracts on KiiChain. The T-REX protocol is designed for compliant issuance and management of security tokens on blockchain networks.
Important Links
Github Repo: Here
Rust SDK: Here
Contracts and Their Methods
1. CW20 T-REX Token
Extends the CW20 standard with T-REX functionalities and implements permissioned transfers.
Storage
token_info
: TokenInfobalances
: Map<Addr, Uint128>allowances
: Map<(Addr, Addr), AllowanceInfo>identity_registry
: Addrcompliance
: Addr
Execute
transfer(recipient: Addr, amount: Uint128) -> Result<Response>
Description: Transfers tokens to a recipient if they are verified and compliant.
Interaction: Calls
is_verified
on Identity Registry andcan_transfer
on Modular Compliance.
transfer_from(owner: Addr, recipient: Addr, amount: Uint128) -> Result<Response>
Description: Transfers tokens on behalf of the owner if the recipient is verified and compliant.
Interaction: Similar to
transfer
, but checks allowances first.
Query
balance(address: Addr) -> BalanceResponse
token_info() -> TokenInfoResponse
is_verified_transfer(from: Addr, to: Addr, amount: Uint128) -> IsVerifiedTransferResponse
Description: Checks if a transfer would be valid without executing it.
Interaction: Calls Identity Registry and Modular Compliance.
2. Identity Registry
Manages investor identities and eligibility.
Storage
identity_storage
: Addrtrusted_issuers_registry
: Addrclaim_topics_registry
: Addragents
: Vec
Execute
register_identity(address: Addr, identity: Addr) -> Result<Response>
Description: Registers a new identity for an address.
Interaction: Calls Identity Registry Storage to store the mapping.
update_identity(address: Addr, identity: Addr) -> Result<Response>
Description: Updates an existing identity for an address.
remove_identity(address: Addr) -> Result<Response>
Description: Removes an identity for an address.
Query
is_verified(address: Addr) -> IsVerifiedResponse
Description: Checks if an address is verified (has required claims).
Interaction: Queries Identity Registry Storage, Trusted Issuers Registry, and Claim Topics Registry.
3. Identity Registry Storage
Stores the mapping of wallet addresses to identity contracts.
Storage
identities
: Map<Addr, Addr>
Execute
add_identity(address: Addr, identity: Addr) -> Result<Response>
remove_identity(address: Addr) -> Result<Response>
Query
get_identity(address: Addr) -> GetIdentityResponse
4. Trusted Issuers Registry
Manages the list of trusted claim issuers.
Storage
trusted_issuers
: Map<Addr, TrustedIssuer>
Execute
add_trusted_issuer(issuer: Addr, claim_topics: Vec<u32>) -> Result<Response>
remove_trusted_issuer(issuer: Addr) -> Result<Response>
Query
is_trusted_issuer(issuer: Addr) -> IsTrustedIssuerResponse
get_trusted_issuers() -> GetTrustedIssuersResponse
5. Claim Topics Registry
Stores the required claim topics for token eligibility.
Storage
required_claim_topics
: Vec
Execute
add_claim_topic(topic: u32) -> Result<Response>
remove_claim_topic(topic: u32) -> Result<Response>
Query
get_required_claim_topics() -> GetRequiredClaimTopicsResponse
6. Modular Compliance
Implements transfer restriction rules.
Storage
modules
: Vecbound_tokens
: Vec
Execute
add_module(module: Addr) -> Result<Response>
remove_module(module: Addr) -> Result<Response>
bind_token(token: Addr) -> Result<Response>
Query
can_transfer(from: Addr, to: Addr, amount: Uint128) -> CanTransferResponse
Description: Checks if a transfer complies with all modules.
Interaction: Calls
check_transfer
on each compliance module.
7. ONCHAINID
Represents user identities (similar to ERC-734/735).
Storage
keys
: Map<bytes32, Key>claims
: Map<bytes32, Claim>
Execute
add_key(key: bytes32, purpose: u32, key_type: u32) -> Result<Response>
remove_key(key: bytes32) -> Result<Response>
add_claim(topic: u32, scheme: u32, issuer: Addr, signature: Vec<u8>, data: Vec<u8>, uri: String) -> Result<Response>
remove_claim(topic: u32) -> Result<Response>
Query
get_key(key: bytes32) -> GetKeyResponse
get_claim(topic: u32) -> GetClaimResponse
8. T-REX Factory
Deploys and configures T-REX token suites.
Storage
implementation_authority
: Addrdeployed_tokens
: Vec
Execute
deploy_token_suite(token_info: TokenInfo, compliance_info: ComplianceInfo, identity_info: IdentityInfo) -> Result<Response>
Description: Deploys a new T-REX token suite.
Interaction: Instantiates all necessary contracts and configures them.
Query
get_deployed_tokens() -> GetDeployedTokensResponse
9. Implementation Authority
Manages contract upgrades and versioning.
Storage
versions
: Map<String, ContractVersion>current_version
: String
Execute
add_version(name: String, contracts: Vec<(String, Addr)>) -> Result<Response>
set_current_version(name: String) -> Result<Response>
Query
get_current_version() -> GetCurrentVersionResponse
get_version(name: String) -> GetVersionResponse
Implementation Roadmap
Implement CW20 T-REX Token
Implement Identity Registry and Identity Registry Storage
Implement Trusted Issuers Registry and Claim Topics Registry
Implement Modular Compliance
Implement ONCHAINID
Implement T-REX Factory
Implement Implementation Authority
Integrate all contracts and perform thorough testing
Conduct security audit
Deploy to Kii-Chain testnet
Final testing and adjustments
Deploy to Kii-Chain mainnet
Testing Strategy
Implement unit tests for each contract function
Develop integration tests for contract interactions
Create end-to-end scenarios to test the entire T-REX suite
Perform fuzz testing to uncover edge cases
Conduct governance testing to ensure proper access control
Last updated