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

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, 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.

// 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.

// 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
// 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:

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 Core pallet implementation containing extrinsics, storage definitions, and dispatchable functions
pallets/poscan-assets/src/types.rs Public structs and enums including AssetId, Balance, and custom asset metadata types
pallets/poscan-assets/src/functions.rs Helper functions for asset operations and state transitions
pallets/poscan-assets/src/weights.rs Weight definitions and benchmarking results for runtime fee calculation
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.
  • 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 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.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →