Skip to main content
Ankara Chain ships six pre-audited smart contract templates, each designed for a specific asset class common in African markets. Rather than writing token contracts from scratch, you pick the template that matches your asset, supply its metadata, and deploy — the contract handles on-chain storage, lifecycle management, and transfer controls.

Fungible Token Templates

Each of the six templates deploys as an ERC-20 (on EVM chains) or SEP-41 (on Stellar) fungible token, suitable for fractional ownership. You deploy one contract per tokenized asset.

1. Farmland

Tokenize ownership of agricultural land. Each deployed FarmlandToken represents a single parcel of farmland, with its physical and legal attributes stored directly on-chain. Template string: "farmland" Metadata fields (FarmlandMetadata): Use cases: Fractional farmland investment platforms, agricultural cooperatives, diaspora remittance-to-land schemes, collateral for crop finance.

2. Commodity Receipt

Tokenize warehouse receipts for physical commodities. A CommodityReceiptToken represents a quantity of goods in a certified warehouse, giving holders a claim on the underlying stock. Template string: "commodity" Metadata fields (CommodityMetadata): Use cases: Structured commodity finance, warehouse receipt financing, grain aggregation platforms, post-harvest loss reduction schemes.
Commodity tokens expose an assetIsExpired() method that checks whether the current block timestamp has passed expiryDate. Call assetMarkExpired() to transition the asset to EXPIRED status when it lapses.

3. Real Estate

Tokenize fractional ownership of property. RealEstateToken supports residential, commercial, industrial, and land asset types, with rental yield and occupancy state tracked on-chain. Template string: "real-estate" Metadata fields (RealEstateMetadata): Use cases: Real estate investment trusts (REITs) on-chain, rental income distribution to token holders, property-backed lending, title registry integration.

4. Invoice

Tokenize trade receivables. InvoiceToken represents the right to receive payment on a commercial invoice, enabling invoice discounting and supply chain finance on-chain. Template string: "invoice" Metadata fields (InvoiceMetadata): Invoice lifecycle (InvoiceStatus enum): Use cases: Supply chain finance platforms, invoice discounting marketplaces, SME working capital, buyer-led finance programmes.

5. Carbon Credit

Tokenize verified carbon offsets. CarbonCreditToken represents tonnes of CO₂ equivalent, with retirement tracked immutably on-chain against a named beneficiary. Template string: "carbon-credit" Metadata fields (CarbonCreditMetadata): Each retirement is recorded as a RetirementRecord on-chain: Use cases: Corporate sustainability reporting, Kenyan and Nigerian carbon market platforms, voluntary carbon offset registries, deforestation credits.

6. Mining Rights

Tokenize mineral extraction licences. MiningRightsToken represents a fractional interest in a licensed mining concession, with the licence expiry and royalty rate tracked on-chain. Template string: "mining-rights" Metadata fields (MiningRightsMetadata): Use cases: Mining royalty streams as investable assets, licence-backed financing, DRC and West African mining investment vehicles.

NFT Variants

For unique assets — a single farm plot, a specific property title, or a single warehouse vault — Ankara Chain provides ERC-721 (EVM) and Soroban NFT (Stellar) variants. Unlike the fractional ERC-20 templates above, NFT templates issue a single non-fungible token per deployed contract. NFT metadata types are related to — but not identical to — their fractional counterparts. FarmlandNFTMetadata replaces valuationUSD with a surveyReportHash field. RealEstateNFTMetadata omits occupancyStatus. MiningRightsNFTMetadata is field-for-field identical to MiningRightsMetadata. CommodityVaultNFTMetadata is warehouse-focused — it has warehouseId, warehouseLocation, operatorAddress, commodityType, quantityKg, gradeClassification, certificateHash, depositDate, and lastUpdated — rather than mirroring CommodityMetadata. You can link an NFT deed to a corresponding ERC-20 fractional token using assetLinkToERC20().

Multi-Token Variants

Two additional templates use ERC-1155 (EVM) for scenarios involving batched or pooled asset positions.

commodity-batch

ERC-1155 batch token. Deploy one CommodityBatchToken contract to represent multiple commodity batches in a single warehouse — each batch is a distinct token ID within the contract. Useful for warehouse operators managing rotating stock.

pool-vault

Pooled asset vault. PoolVaultToken accepts deposits of multiple whitelisted stablecoins and issues a single pool share token back to investors. Supports a management fee in basis points and an oracle for NAV calculation.

Asset Lifecycle

Every fungible template tracks a lifecycle status on-chain through the AssetStatus enum. You advance the status explicitly using AssetRegistry.setStatus().
1

DRAFT (0)

The token is deployed but not yet live. Use this state while completing off-chain verification, uploading document hashes, or finalising metadata. Transfers may be restricted depending on your verifier configuration.
2

ACTIVE (1)

The token is live and available for minting, transfer, and investment. This is the normal operating state.
3

SUSPENDED (2)

The token is temporarily halted — for example during a regulatory review or legal dispute. The token contract is paused; no transfers or mints are processed.
4

REDEEMED (3)

The underlying asset has been redeemed and the token’s lifecycle is complete. For farmland this might mean the land has been sold; for invoices, the debt has been fully repaid and token holders have been paid out.
5

EXPIRED (4)

The asset has lapsed — used primarily for commodity receipts past their expiryDate and mining rights past their licenseExpiry. The SDK exposes dedicated helper methods (assetMarkExpired(), assetMarkLicenseExpired()) for these transitions.
Status transitions are one-directional in most cases. You cannot move a REDEEMED or EXPIRED token back to ACTIVE. Design your status management flow before going to mainnet.