Skip to content

kalamkhan114/Kii-RWA-Protocol

 
 

Repository files navigation

kii-chain-logo

CW3643 - T-REX PROTOCOL On Kii-Chain

Overview

This document outlines the detailed implementation plan for the T-REX (Token for Regulated EXchanges) protocol using CosmWasm smart contracts on Kii-Chain. The T-REX protocol is designed for compliant issuance and management of security tokens on blockchain networks.

Contracts and Their Methods

1. CW20 T-REX Token

Extends the CW20 standard with T-REX functionalities and implements permissioned transfers.

Storage

  • token_info: TokenInfo
    • Name, symbol, decimals, supply and minter(opt)
    • Minter has an addr and can have a cap
  • balances: Map<Addr, Uint128>
  • allowances: Map<(Addr, Addr), AllowanceInfo>
    • uint with an expiration date
  • identity_registry: Addr
  • compliance: 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 and can_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.
  • send(contract: Addr, amount: Uint128, msg: Binary) -> Result<Response>

    • Msg is weird Binary::from(r#"{"some":123}"#.as_bytes());
  • burn(amount: Uint128) -> Result<Response>

  • mint(contract: Addr, amount: Uint128) -> Result<Response>

  • Increase/Decrease Allowance

    • Can also change expiration

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: Addr
  • trusted_issuers_registry: Addr
  • claim_topics_registry: Addr
  • agents: 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. OwnerRole::IssuersRegistryManager can change trusted 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. It is used for compliance. Only those with role OwnerRole::ClaimRegistryManager can change this.

Storage

  • token_claim_topics: Vec
    • Token addresses are mapped to claims
    • Claim is defined by a topic uint128 and an active bool

Execute

  • add_claim_topic(topic: u32) -> Result<Response>
  • remove_claim_topic(topic: u32) -> Result<Response>

Query

  • get_claims_for_token() -> StdResult<Vec<Uint128>>

6. Modular Compliance

Implements transfer restriction rules. Only OwnerRole::ComplianceManager can execute changes. For now country compliance and claims compliance are the ones in use.

Storage

  • modules: Vec
  • bound_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: Addr
  • deployed_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

  1. Implement CW20 T-REX Token
  2. Implement Identity Registry and Identity Registry Storage
  3. Implement Trusted Issuers Registry and Claim Topics Registry
  4. Implement Modular Compliance
  5. Implement ONCHAINID
  6. Implement T-REX Factory
  7. Implement Implementation Authority
  8. Integrate all contracts and perform thorough testing
  9. Conduct security audit
  10. Deploy to Kii-Chain testnet
  11. Final testing and adjustments
  12. 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

About

Fully compliant and interoperable protocol for tokenization of real world assets.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Rust 91.5%
  • JavaScript 7.8%
  • Shell 0.7%