RWA Protocol
T-REX Protocol on KiiChain
Note: This project is still under development so future changes will be made.
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
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