---
# System prepended metadata

title: 'Provenance Blockchain Modules Overview - Asset, Ledger, Registry, '

---

# Provenance Blockchain Modules Presentation
## x/asset, x/ledger, and x/registry

---

## Overview

The Provenance blockchain provides three core modules that work together to create a comprehensive digital asset management and financial tracking system:

1. **x/asset** - Digital asset creation and management
2. **x/ledger** - Financial tracking and accounting for assets
3. **x/registry** - Role-based access control and permissions

These modules form the foundation for creating, managing, and tracking digital assets with full financial transparency and controlled access.

---

## Module 1: x/asset

### Purpose
The Asset module provides functionality for creating and managing digital assets on the Provenance blockchain. It leverages the Cosmos SDK's NFT module to represent assets as non-fungible tokens while adding additional features like asset classes, pools, tokenizations, and securitizations.

### How It Works
- **Asset Classes**: Define schemas and classifications for digital assets with JSON schema validation
- **Assets**: Create individual digital assets within asset classes with data validation
- **Pools**: Bundle multiple NFTs into tradeable marker tokens
- **Tokenizations**: Fractionalize individual NFTs into tradeable tokens
- **Securitizations**: Create structured financial products with multiple tranches

### Key Messages/Actions

#### MsgCreateAssetClass
Creates a new asset class that defines the classification and schema for digital assets.
```protobuf
message MsgCreateAssetClass {
    AssetClass asset_class = 1;
    string ledger_class = 2;
    string from_address = 3;
}
```

#### MsgCreateAsset
Creates a new digital asset within an existing asset class.
```protobuf
message MsgCreateAsset {
    Asset asset = 1;
    string from_address = 2;
}
```

#### MsgCreatePool
Creates a pool of NFTs represented by a marker token.
```protobuf
message MsgCreatePool {
    Coin pool = 1;
    repeated Nft nfts = 2;
    string from_address = 3;
}
```

#### MsgCreateTokenization
Creates a tokenization marker representing fractional ownership of an individual NFT.
```protobuf
message MsgCreateTokenization {
    Coin denom = 1;
    Nft nft = 2;
    string from_address = 3;
}
```

#### MsgCreateSecuritization
Creates a securitization with multiple pools and tranches.
```protobuf
message MsgCreateSecuritization {
    string id = 1;
    repeated string pools = 2;
    repeated Coin tranches = 3;
    string from_address = 4;
}
```

---

## Module 2: x/ledger

### Purpose
The Ledger module provides a comprehensive financial tracking system for NFTs, allowing for detailed accounting of transactions, disbursements, payments, and fees associated with NFT ownership. It maintains a chronological record of all financial activities and their impact on principal, interest, and other balances.

### How It Works
- **Ledger Classes**: Define configuration for specific classes of assets
- **Ledgers**: Track financial activities for specific NFTs or scopes
- **Ledger Entries**: Represent individual financial transactions or activities
- **Balance Buckets**: Maintain balances in different categories (Principal, Interest, Other)
- **Entry Types**: Support various transaction types (Disbursements, Payments, Fees, etc.)

### Key Messages/Actions

#### MsgCreateLedgerClass
Creates a new ledger class configuration.
```protobuf
message MsgCreateLedgerClass {
    LedgerClass ledger_class = 1;
    string authority = 2;
}
```

#### MsgCreateLedger
Creates a new ledger for an asset.
```protobuf
message MsgCreateLedger {
    Ledger ledger = 1;
    string authority = 2;
}
```

#### MsgAppendLedgerEntry
Adds one or more new entries to an existing ledger.
```protobuf
message MsgAppendLedgerEntry {
    string nft_id = 1;
    string asset_class_id = 2;
    repeated LedgerEntry entries = 3;
    string authority = 4;
}
```

#### MsgDestroyLedger
Removes a ledger and all associated data.
```protobuf
message MsgDestroyLedger {
    string nft_id = 1;
    string asset_class_id = 2;
    string authority = 3;
}
```

---

## Module 3: x/registry

### Purpose
The Registry module provides role-based access control and permissions management for digital assets. It defines who can perform specific actions on assets through a system of roles and addresses.

### How It Works
- **Registry Keys**: Unique identifiers linking registry entries to specific NFT assets
- **Registry Entries**: Contain roles and addresses that can perform those roles
- **Roles**: Define different types of permissions (Servicer, Controller, Custodian, etc.)
- **Addresses**: Blockchain addresses assigned to specific roles

### Key Messages/Actions

#### MsgRegisterNFT
Registers a new NFT in the registry with specified roles and addresses.
```protobuf
message MsgRegisterNFT {
    string authority = 1;
    RegistryKey key = 2;
    repeated RolesEntry roles = 3;
}
```

#### MsgGrantRole
Grants a role to one or more addresses.
```protobuf
message MsgGrantRole {
    string authority = 1;
    RegistryKey key = 2;
    RegistryRole role = 3;
    repeated string addresses = 4;
}
```

#### MsgRevokeRole
Revokes a role from one or more addresses.
```protobuf
message MsgRevokeRole {
    string authority = 1;
    RegistryKey key = 2;
    RegistryRole role = 3;
    repeated string addresses = 4;
}
```

#### MsgUnregisterNFT
Unregisters an NFT from the registry.
```protobuf
message MsgUnregisterNFT {
    string authority = 1;
    RegistryKey key = 2;
}
```

### Registry Roles
- **REGISTRY_ROLE_SERVICER**: Maintains and services underlying assets
- **REGISTRY_ROLE_SUBSERVICER**: Assists servicers with limited administrative capabilities
- **REGISTRY_ROLE_CONTROLLER**: Has administrative control over registry entries
- **REGISTRY_ROLE_CUSTODIAN**: Holds and safeguards underlying assets
- **REGISTRY_ROLE_BORROWER**: Can borrow against underlying assets
- **REGISTRY_ROLE_ORIGINATOR**: Creates and originates underlying assets

---

## Use Case: Loan and Payments

### Scenario
A borrower wants to take out a loan using their commercial real estate as collateral. The loan will be tracked on the blockchain with full transparency and automated payment processing.

### Step-by-Step Process

The complete loan workflow involves the following steps:

1. **Asset Creation (x/asset)** - Create asset class and property asset
2. **Registry Setup (x/registry)** - Register property with appropriate roles
3. **Ledger Creation (x/ledger)** - Create ledger for loan tracking
4. **Loan Disbursement** - Record initial loan amount
5. **Monthly Payment Processing** - Record regular payments
6. **Interest Accrual** - Track interest charges

A complete demo script with all CLI commands is available in `demo_loan_workflow.sh`. This script demonstrates the entire workflow with proper error handling, colored output, and configuration options.

To run the demo:
```bash
# Make the script executable
chmod +x demo_loan_workflow.sh

# Run the demo (commands are commented out by default)
./demo_loan_workflow.sh

# To run actual commands, uncomment the 'eval' line in the script
# and replace demo addresses with real addresses
```

### Benefits of This System

1. **Transparency**: All loan activities are recorded on-chain and publicly verifiable
2. **Automation**: Payments and accruals can be automated through smart contracts
3. **Auditability**: Complete audit trail of all financial transactions
4. **Access Control**: Role-based permissions ensure only authorized parties can perform actions
5. **Compliance**: Regulatory requirements can be built into the asset classes and ledger configurations
6. **Liquidity**: Assets can be tokenized or securitized for secondary market trading

### Integration Benefits

- **Asset Module**: Provides the underlying asset representation and management
- **Ledger Module**: Tracks all financial activities and maintains balances
- **Registry Module**: Controls who can perform specific actions on the assets
- **Marker Module**: Enables creation of fungible tokens for asset-backed securities
- **Exchange Module**: Allows trading of asset-backed tokens

This integrated system provides a complete solution for digital asset management, financial tracking, and regulatory compliance in the blockchain ecosystem. 