Ankara Chain sits between raw blockchain protocols and your product. Plug it in the same way you'd plug Stripe for payments — and keep full control of your business logic.
Import @ankarachain/sdk into your existing Node.js or React app. No platform dependency. Full chain custody stays with you.
Asset schemas for farmland, commodities, and receivables. Identity hooks for BVN, NIN, Huduma Namba, and Ghana Card — not retrofitted from European standards.
Ankara Chain provides the interfaces. You plug in your KYC provider — Smile Identity, Persona, or custom — without redeploying core contracts.
Smart contracts and SDK core are MIT licensed. Dashboard, regulatory compliance modules, and audit reporting are paid enterprise tiers. Like Terraform, but for RWA.
Seven of them are below, pulled from real situations happening in West African markets right now. Read each one for what it actually is: a product nobody's built yet, sitting there waiting. Might as well be you.
For Amaka, it's her uncle. Not the builder — she's never met the builder, she found him through someone who knows someone back in Owerri. Her uncle is the one who drives out to the site every other week, the one whose word she'll believe over a WhatsApp photo any day of the week. But her uncle isn't a lawyer, isn't a contractor, and can't be there every single day. He's trusted, not qualified, and those have never been the same thing. So the money still leaves London before the wall goes up. Sometimes long before.
Here's the product a developer can see in this: a company whose entire job is walking the site on camera, with a lot more to lose from lying than a relative doing a favor — bonded, insured, the kind of outfit that can't afford to fake a foundation. Amaka still finds her own builder. She just names that company as the escrow's arbiter instead of leaving everything to one person's word. They visit at each stage, timestamp the photos, and send them to her before she has to approve anything. If she and the contractor ever disagree, it's that company — or the lawyer they keep on retainer — who actually settles it, not a family argument three thousand miles apart.
// Amaka still finds her own builder — a verification company replaces her uncle as the check const escrow = await tokenFactory.deployEscrow({ payer: amaka, payee: contractor, token: usdc, arbiter: siteProofCo, // bonded, licensed — answers for it if they certify falsely milestones: [{ amount: 2400n }, { amount: 3200n }, { amount: 2400n }] }); // foundation, roofing, finishing await escrow.fund(0); // Amaka funds the foundation stage await escrow.markDelivered(0); // the contractor flags it done await escrow.approveMilestone(0); // she approves — after SiteProof's photos, not a phone call
Ask anyone who sends money into Ghana regularly and they'll tell you about their guy — someone at the market, or a cousin's friend, who gives a better rate than the bank and turns it around the same day. Nobody picked this because it's safe. They picked it because the bank is slower, more expensive, and asks more questions than the guy at the market ever does. It works, mostly, right up until the one week it doesn't, and there's nobody left to call.
The product here is the thing that replaces "the guy" outright, not just a faster version of him: an app that checks the rate across every licensed anchor operating in Ghana before it moves a single cedi, settles straight to a mobile money wallet, and hands both sides a receipt neither has to take on faith. Nobody has to find a guy, vet a guy, or wonder if this is the week he's not answering his phone.
// Compare licensed anchors before moving anything — not whichever changer is at the market const cowrie = RampManager.connectAnchor('cowrie.exchange', signer); const mykobo = RampManager.connectAnchor('mykobo.co', signer); const [q1, q2] = await Promise.all([ cowrie.getQuote({ direction: 'off-ramp', tokenAmount: 300n, fiatCurrency: 'GHS' }), mykobo.getQuote({ direction: 'off-ramp', tokenAmount: 300n, fiatCurrency: 'GHS' }), ]); const best = q1.exchangeRate > q2.exchangeRate ? cowrie : mykobo; await best.initiateOffRamp({ tokenAmount: 300n, fiatCurrency: 'GHS', recipientMobileMoney }); // clears in minutes
Everyone near Ibadan knows which warehouse to use, and it's not because of a certificate on the wall — it's because the man who runs it hasn't shorted anyone on weight in fifteen years. That reputation is real, and it's earned. It's also the only proof that exists that your maize is actually sitting in there. If he retires, has a bad year, or a dispute ever needs proving to someone outside the community, there's nothing written down that would hold up anywhere else.
The business a developer could build isn't the token — it's the network he's currently the only member of. Onboard a dozen warehouses across the region, send an independent inspector to verify grade and weight before any receipt gets minted, and suddenly a buyer in Lagos trusts a receipt from a warehouse they've never heard of, because it was checked the same way, by the same standard, as the one they have.
// Your inspector app verifies the batch first — not just the warehouse's own scale const inspection = await inspectorApp.verifyBatch({ warehouseId: 'IB-014', gradeClaimed: 'A', weightClaimed: 12_000 }); const receipt = await tokenFactory.deployCommodity({ name: 'Ibadan Maize Batch 14', symbol: 'IBM14', assetId: 'NG-IB-014', countryCode: 'NG', metadata: { ...inspection }, // the receipt carries the inspector's numbers, not his }); const { loanId } = await vault.openLoan(receipt.tokenAddress, 12_000n, 5_760n); // a lender three states away is comfortable
The cocoa cooperative outside Kumasi has raised planting money every season for longer than most of its members have been farming, because everyone trusts the woman who's run it for twenty years and has never once gone quiet with the fertilizer fund. That trust is real. It just doesn't travel well. A relative in London wiring $200 has to trust a phone call, a photo, and a story that's already passed through two cousins by the time it reaches her.
The product opportunity isn't the token — it's the proof layer around it. A developer could send a field agent to the farm every season, confirm the crop is actually growing the way it's supposed to, and push that update to every investor holding the token automatically. The chairwoman doesn't lose her role or her reputation. She gets backed by a photo and a GPS pin instead of having to be believed on twenty years of word alone.
// The cooperative's land, on record once — every future backer reads it directly const land = await tokenFactory.deployFarmland({ name: 'Kumasi Cocoa Co-op', symbol: 'KCC', assetId: 'GH-KUM-014', countryCode: 'GH', metadata, }); // Your field-agent app logs the season's photos and GPS off-chain, then updates the on-chain value await registry.updateValuation(verifiedValuationUSD); // every KCC holder sees the same checked number
A garment manufacturer in Kano lands the order that's supposed to change the business, and the payment terms that come with it: net-60. No bank will lend against an invoice from a first-time buyer with no credit file, so the only real offer comes from a man in the market everyone just calls Oga, whose rate is whatever he decides it is that week. Everyone in that market knows someone who took the deal anyway, because there wasn't another one.
The real product here is the phone call most investors would never think to make themselves: ring the retailer directly, confirm the order is real and undisputed, before the invoice ever gets listed. That single verification is worth more to an investor's confidence than any rate Oga could quote, and it's a service a developer builds once and runs across every invoice on the platform — not just this one.
// Your verification service confirms the order with the retailer before listing it const confirmed = await verifierApp.confirmInvoice({ retailer: 'LagosMart', amount: 12_000_000n }); const invoice = await tokenFactory.deployInvoice({ name: 'Kano Textile Order 0472', symbol: 'KTO', assetId: 'NG-KN-0472', countryCode: 'NG', metadata, }); // an investor buys in only after seeing that confirmation — cash lands this week, not day 60 await registry.markRepaid(); // retailer pays on day 60 — investor is settled instantly
A licensed small-scale gold operation in Ashanti Region has the permit, the land, and the gold coming out of the ground — everything a lender should want to see. What it doesn't have is anyone who'll treat that as collateral. So expansion money comes from a sponsor: an informal financier who fronts the cash for equipment and, in return, quietly takes a cut of every ounce for as long as he decides the debt isn't settled. Nobody else ever gets to check his math.
Tokenizing the royalty isn't the whole opportunity — verifying the number it's paid on is. A developer could build an independent auditing service that checks the concession's actual output each quarter against what's reported, so investors aren't trusting the operation's math any more than they trusted the sponsor's. Same royalty rate, but now the figure it's calculated from comes from someone with nothing riding on which way it comes out.
const rights = await tokenFactory.deployMiningRights({ name: 'Ashanti Gold Concession 7', symbol: 'AGC7', assetId: 'GH-ASH-007', countryCode: 'GH', metadata, }); // Your independent auditor verifies the quarter's actual output — not the operator's own figure const verifiedValueUSD = await auditorApp.verifyExtraction({ concession: 'AGC7', quarter: 'Q3-2026' }); await registry.declareRoyalty(verifiedValueUSD); // every holder paid on the audited number, on-chain
A reforestation project in the Sahel does real, measurable work, and still fetches a worse price than a similar project in Europe — because international buyers have been burned before by carbon credits that got quietly resold, or never really existed. The project didn't do anything wrong. It's paying for someone else's fraud, because there's historically been no way for a buyer three thousand miles away to tell the difference.
The fundable business here isn't the credit — it's the measurement underneath it. Satellite imagery or a drone flyover confirming the trees are actually there and growing, feeding directly into how many credits the project is allowed to mint. That's the difference between a buyer taking the project's word for it and a buyer checking a number nobody at the project controls.
// Satellite/drone MRV confirms this period's sequestration — not a self-report const verifiedTons = await mrvApp.verifySequestration({ project: 'NE-SAH-026', period: 'H1-2026' }); const credits = await tokenFactory.deployCarbonCredit({ name: 'Sahel Reforestation 2026', symbol: 'SRF26', assetId: 'NE-SAH-026', countryCode: 'NE', metadata, }); await registry.retire(verifiedTons, buyer, 'offsetting Q3 emissions'); // burned — can't be resold
None of these seven people know each other, but the pattern's the same: someone is quietly carrying trust that should be shared, not memorized. Every fix above is a shipped contract, not a concept — which means the app you build on top of it doesn't need a dedicated blockchain engineer on the team. It needs you, and the SDK you already have.
Six core modules — all open source — plus enterprise layers for compliance, dashboards, and reporting.
The Token Factory deploys UUPS-upgradeable smart contract templates for every African asset class as lightweight ERC-1967 proxies. Configure via JSON, deploy in seconds — no Solidity knowledge required.
ankara.config.jsonLinks every token to its real-world asset. Defines a standardized metadata schema with IPFS/Arweave document linking, GPS coordinates, valuations, and full lifecycle management.
Every mint, burn, and transfer routes through a pre-transfer hook that checks the pluggable identity verifier on both sender and receiver — enforced at the contract level, not the app level.
Ankara Chain defines the IIdentityVerifier interface. You connect your chosen provider — without redeploying core asset contracts. African identity primitives built in.
verifyIdentity() · revokeIdentity() · isVerified()Deploy to Ethereum, Polygon, BNB Chain, Celo, or Stellar without rewriting integration code — every template, factory, escrow, ramp, and asset-registry operation is available on both chain families behind the same IAdapter TypeScript interface.
EVMAdapter API across Ethereum, Polygon, BNB Chain, and CeloStellarAdapter for Soroban — same interface, same feature set, no capability gapsankara.config.json or a custom RPC URLThe enterprise tier will add a full web dashboard for asset management, pre-built African regulatory compliance modules, and audit-grade reporting — all maintained and updated as regulations evolve. Currently in active development; join the waitlist below.
Designed for developers who've never touched blockchain before. Full testnet token in 30 minutes — no Solidity or Rust required.
# Install the SDK npm install @ankarachain/sdk # Scaffold a new project npx ankara init my-rwa-project # Deploy the on-chain TokenFactory (once per network) npx ankara deploy-factory --network polygon-amoy
npm install @ankarachain/sdk
npx ankara init my-project
ankara.config.json holds your network and factory address, written automatically by init and deploy-factory.npx ankara deploy --template farmland
npx ankara mint
The HashiCorp model for African RWA. Build for free. Scale with us.
A flat protocol fee applies per contract deployment via TokenFactory — currently $0 on testnet.
We're building the developer ecosystem, not just the tool. Grants, hackathons, university partnerships, and a public roadmap.
No blockchain expertise required. Open source. Built for you and the workflows you already know.