# What Is the poscan-assets Module in 3DPass? A Complete Technical Guide

> Discover the poscan-assets module in 3DPass. Learn how this core Substrate runtime module handles the creation, management, and transfer of your fungible and non-fungible tokenized assets.

- Repository: [3Dpass/3dp](https://github.com/3dpass/3dp)
- Tags: deep-dive
- Published: 2026-02-23

---

**The poscan-assets pallet is the core Substrate runtime module that enables the creation, management, and transfer of both fungible and non-fungible tokenized assets on the 3DPass blockchain.**

The **poscan-assets** module serves as the foundational asset management layer in the 3DPass ecosystem, extending Substrate's standard Assets pallet with specialized capabilities for real-world asset (RWA) tokenization. Located in the `pallets/poscan-assets` directory of the 3dpass/3dp repository, this pallet provides the on-chain data model and extrinsics that power 3DPass's unique tokenization model for physical objects authenticated through the PoScan consensus layer.

## Core Asset Management Capabilities

The poscan-assets pallet implements a comprehensive asset lifecycle management system. According to the source code in [`pallets/poscan-assets/src/lib.rs`](https://github.com/3dpass/3dp/blob/main/pallets/poscan-assets/src/lib.rs), it provides privileged role-based operations alongside standard token functionality.

### Asset Issuance and Minting

The pallet enables privileged accounts designated as **Issuers** to create new asset classes and allocate initial supply. The `create` function establishes the asset with designated admin, issuer, and freezer accounts, while `mint` increases the total issuance.

```rust
// Origin must be signed by the issuer
Pallet::<T>::create(
    Origin::signed(issuer.clone()),
    asset_id,                // u32 asset identifier
    admin.clone(),          // admin account
    issuer.clone(),         // issuer account
    freezer.clone(),        // freezer account
    deposit,                // required deposit
)?;
Pallet::<T>::mint(
    Origin::signed(issuer),
    asset_id,
    beneficiary,
    amount,
)?;

```

Relevant source: `create` and `mint` definitions in **pallets/poscan-assets/src/lib.rs**.

### Transfer and Delegated Operations

Standard token transfers use the `transfer` and `transfer_keep_alive` functions. Additionally, the pallet implements an approval API similar to ERC-20, allowing accounts to delegate spending authority through `approve_transfer` and `transfer_approved`.

```rust
// Direct transfer
Pallet::<T>::transfer(
    Origin::signed(sender),
    asset_id,
    recipient,
    amount,
)?;

// Delegated transfer
Pallet::<T>::approve_transfer(
    Origin::signed(owner),
    asset_id,
    delegate,
    amount,
)?;
Pallet::<T>::transfer_approved(
    Origin::signed(delegate),
    asset_id,
    owner,
    beneficiary,
    amount,
)?;

```

### Administrative Controls

The pallet implements role-based access control with distinct permissions:

- **Freezer**: Can call `freeze` to halt an account's ability to transfer specific assets, and `thaw` to restore it
- **Admin**: Can `burn` (destroy) tokens, `force_transfer` between accounts, or `force_set_metadata` bypassing standard checks
- **Issuer**: Can `mint` additional supply

```rust
// Freeze an account's balance
Pallet::<T>::freeze(
    Origin::signed(freezer),
    asset_id,
    target_account,
)?;

```

Relevant source: Administrative functions in **pallets/poscan-assets/src/lib.rs** lines 88-100.

### Metadata Management

Asset owners can attach descriptive data using `set_metadata` and `clear_metadata`, defining properties such as name, symbol, decimals, and custom information required for the 3DPass tokenization standard.

## Integration with PoScan Consensus for RWA Tokenization

The distinguishing feature of poscan-assets is its integration with the **PoScan** (Proof of Scan) consensus module. As implemented in the 3DPass runtime, asset issuance can be tethered to real-world objects that have been authenticated by the PoScan consensus, enforcing the **3DPRC-2** tokenization rules.

This integration enables:

- **Physical object tokenization**: Representing shares, weight, area, or other measurable properties of scanned objects
- **Authenticated minting**: Ensuring asset creation is backed by verified 3D scans or object recognitions
- **Real-world asset compliance**: Enforcing that digital tokens maintain verifiable links to their physical counterparts

The runtime includes the pallet as a standard dependency in [`runtime/Cargo.toml`](https://github.com/3dpass/3dp/blob/main/runtime/Cargo.toml):

```toml
pallet-poscan-assets = { path = "../pallets/poscan-assets", default-features = false }

```

## Runtime Architecture and Source Files

The poscan-assets module is organized across several specialized files within the repository:

| File | Purpose |
|------|---------|
| [`pallets/poscan-assets/src/lib.rs`](https://github.com/3dpass/3dp/blob/main/pallets/poscan-assets/src/lib.rs) | Core pallet implementation containing extrinsics, storage definitions, and dispatchable functions |
| [`pallets/poscan-assets/src/types.rs`](https://github.com/3dpass/3dp/blob/main/pallets/poscan-assets/src/types.rs) | Public structs and enums including `AssetId`, `Balance`, and custom asset metadata types |
| [`pallets/poscan-assets/src/functions.rs`](https://github.com/3dpass/3dp/blob/main/pallets/poscan-assets/src/functions.rs) | Helper functions for asset operations and state transitions |
| [`pallets/poscan-assets/src/weights.rs`](https://github.com/3dpass/3dp/blob/main/pallets/poscan-assets/src/weights.rs) | Weight definitions and benchmarking results for runtime fee calculation |
| [`runtime/Cargo.toml`](https://github.com/3dpass/3dp/blob/main/runtime/Cargo.toml) | Runtime integration manifest declaring the pallet dependency |

## Summary

- The **poscan-assets** pallet provides the core asset management infrastructure for the 3DPass blockchain, handling fungible and non-fungible tokens.
- It extends standard Substrate Assets functionality with **role-based permissions** (Issuer, Admin, Freezer) and **privileged operations** for governance-controlled asset management.
- The module integrates with **PoScan consensus** to enable 3DPRC-2 compliant tokenization of real-world objects.
- Key functions include `create`, `mint`, `transfer`, `approve_transfer`, `freeze`, and `burn`, defined in [`pallets/poscan-assets/src/lib.rs`](https://github.com/3dpass/3dp/blob/main/pallets/poscan-assets/src/lib.rs).
- The pallet supports **delegated transfers** via approval mechanisms and **comprehensive metadata** management for asset description.

## Frequently Asked Questions

### What is the relationship between poscan-assets and the standard Substrate Assets pallet?

The poscan-assets pallet extends Substrate's standard Assets pallet with additional capabilities required for 3DPass's tokenization model, specifically the integration with PoScan consensus for real-world asset backing and the implementation of 3DPRC-2 tokenization rules. While it maintains compatibility with standard asset operations like transfer and mint, it adds specialized functions for tethering assets to authenticated physical objects.

### Who can create new assets using the poscan-assets module?

New asset classes can be created by accounts with **Issuer** privileges, either through standard governance approval or via the `force_create` function executed by runtime administrators. The `create` function in [`lib.rs`](https://github.com/3dpass/3dp/blob/main/lib.rs) requires the origin to be signed by the issuer and specifies separate accounts for admin, issuer, and freezer roles to enable distributed asset management.

### How does poscan-assets support delegated spending?

The pallet implements an approval API similar to Ethereum's ERC-20 standard through the `approve_transfer` and `transfer_approved` functions. An asset owner can approve a specific delegate to spend a defined amount on their behalf, enabling third-party operations, escrow services, and automated trading without requiring the owner to sign every transaction directly.

### Can asset transfers be frozen or restricted?

Yes, accounts designated as **Freezers** can call the `freeze` function to prevent specific accounts from transferring particular asset classes, effectively placing a hold on those funds. The corresponding **Admin** can later call `thaw` to restore transfer capabilities. This mechanism supports compliance requirements, dispute resolution, and regulatory controls within the 3DPass ecosystem.