Skip to main content

04 · Complete Business Processes

The previous chapters introduced the core objects, system structure, and participant roles. This chapter connects them into the complete lifecycle of an RWA asset, from issuance through exit.

4.1 Lifecycle overview

ProcessPrimary responsible partyOn-chain result
Asset issuancePlatform + asset issuerNew asset Suite
Investor onboardingInvestor + qualification institution + issuerisVerified == true
MintToken AgentInvestor balance increases
TransferToken holderBalance moves between eligible wallets
BurnToken AgentInvestor balance and total supply decrease

4.2 Step 1: Issue the asset

The issuer first defines the asset, qualifications, rules, and roles, then creates the Suite through the platform admission entry point.

Define these items before issuance:

CategoryContent
AssetName, symbol, decimals, real-world rights
EligibilityClaim Topics investors must hold
IssuersClaimIssuers authorized for those Topics
RulesCountry, holding, supply, lockup, and other limits
RolesOwner, Token Agent, IR Agent
EnvironmentTestnet or BOT Mainnet

Publish after issuance:

  • Token and Suite proxy addresses;
  • Chain ID, RPC, and explorer;
  • eligibility requirements and transaction rules;
  • contract version and source-verification status;
  • whether the Token is paused;
  • asset effective time.

A new Token is paused by default. Minting and burning are available while paused, while ordinary investor transfers fail. Complete launch checks before the Token Agent calls unpause().

4.3 Step 2: Onboard the investor

Investor onboarding is a three-party process rather than a single call:

Who performs each step

StepInitiatorOn-chainGas payerCompletion signal
Submit and review materialsInvestor, qualification institutionNoNoneReview conclusion
Create ONCHAINIDInvestorYesInvestorWallet linked to identity
Generate Claim signatureQualification institutionNoNoneSignature and Claim fields
Write ClaimInvestorYesInvestorClaimAdded
Register with target assetIR AgentYesAsset issuerIdentityRegistered
Query final eligibilityAny applicationRead-onlyNo transaction gasisVerified == true

Why the ClaimSigner does not call addClaim directly

The ClaimSigner proves the eligibility conclusion. The investor controls their own ONCHAINID.

The normal pattern is:

ClaimSigner signs off-chain

Investor receives the signature

Investor calls ONCHAINID.addClaim

The qualification institution does not pay on-chain gas for every investor or control the investor's identity.

How an application determines onboarding completion

Confirm in order:

  1. IdFactory.getIdentity(wallet) returns a valid identity;
  2. the ONCHAINID contains a Claim for the target Topic;
  3. IdentityRegistry.contains(wallet) == true;
  4. IdentityRegistry.isVerified(wallet) == true.

The IdentityRegistry bound to the target Token is the final authority.

4.4 Step 3: Mint

After onboarding and satisfaction of off-chain business conditions, the Token Agent mints units.

The application should:

  1. confirm that subscription or issuance conditions have been satisfied;
  2. query recipient eligibility again;
  3. convert the amount using decimals;
  4. let the Token Agent submit the transaction;
  5. wait for the receipt and Transfer event;
  6. update the business order's final state.

A broadcast transaction does not mean the units have arrived.

4.5 Step 4: Investor transfer

After transfers are enabled, a holder can transfer to another eligible investor.

Recommended pre-submission sequence:

Validate Chain ID and Token address
→ Read decimals
→ Check paused and freeze state
→ Query recipient isVerified
→ Optionally call canTransfer
→ Holder signs and sends
→ Wait for receipt

canTransfer is a precheck. On-chain state may change before confirmation, so the actual transaction determines the final result.

Allowance-based transfers follow the standard ERC-20 flow:

4.6 Step 5: Redemption and burn

Burning normally corresponds to redemption or cancellation of units:

On-chain burn and off-chain settlement are distinct states. Record them separately; a successful burn does not prove that real-world funds have arrived.

4.7 Interpreting Transfer events

fromtoMeaning
Zero addressInvestorMint
InvestorZero addressBurn
Non-zero addressNon-zero addressOrdinary transfer or forced transfer

To distinguish an ordinary transfer from an Agent forced transfer, also inspect the called method and administrative events.

4.8 Common failures

SymptomCommon causeResponse
isVerified == falseMissing registration, missing/expired Claim, unrecognized IssuerIdentify the failed onboarding step instead of retrying mint
Identity is not verified.Mint recipient is ineligibleComplete eligibility flow
Compliance not followedAsset rule triggeredQuery rules and contact the issuer
Pausable: pausedToken transfers are not enabledStop submission and show pause state
Wallet frozenIssuer froze the addressContact the issuer
Insufficient balanceIncorrect amount conversion or insufficient available balanceRe-read decimals and frozen amount
Permission errorCaller is not the required Agent/OwnerRoute to the correct role
Transaction remains pendingRPC, gas, or network issueQuery by transaction hash and avoid duplicating the business instruction

For implementation, use the next chapter as a reference by caller and purpose:

Continue: 05 · Contract Interfaces and Events