Fractal Logo

Tokenization infrastructure for African real assets. Issuers, investors, and operators on one shared operational layer.

Platform

HomeOfferingsDocumentationAPI ReferenceIssuer PortalInvestor Portal

Legal

Privacy PolicyTerms of ServiceCookie Policy

© 2026 Fractal. All rights reserved.

Investments involve risk. Past performance is not indicative of future results. Not financial advice.

Fractal Logo
DocsSign upLogin
DocsSign upLogin

Docs Navigation

Current: Smart Contracts

Open all sections

Overview

IntroductionHow Fractal WorksPlatform LifecycleKey Concepts

Getting Started

For IssuersFor InvestorsFor OperatorsFor ProfessionalsFor Admins

Role Guides

Issuer GuideInvestor GuideOperator GuideProfessional GuideAdmin Guide

Compliance & Trust

Compliance ModelBlockchain & Contracts

Developer Reference

API OverviewAuthenticationEndpointsWebhooksSmart ContractsError Codes

More

GlossaryFAQ

Documentation

Overview

IntroductionHow Fractal WorksPlatform LifecycleKey Concepts

Getting Started

For IssuersFor InvestorsFor OperatorsFor ProfessionalsFor Admins

Role Guides

Issuer GuideInvestor GuideOperator GuideProfessional GuideAdmin Guide

Compliance & Trust

Compliance ModelBlockchain & Contracts

Developer Reference

API OverviewAuthenticationEndpointsWebhooksSmart ContractsError Codes

More

GlossaryFAQ

Home / Documentation / API Smart Contracts

API ↔ Smart Contract Interconnection

This page describes how platform operations, API workers, and smart contracts interoperate in production workflows.

Public API endpoints are still forward-looking. Internal operator/admin blockchain operations already model this execution pattern.

Execution Topology

UI / Portal Action
  -> API endpoint (intent)
  -> Blockchain op queue record (pending)
  -> Worker submits contract tx (submitted)
  -> Confirmation + tx hash persistence (confirmed/failed)
  -> Domain state update (offering/subscription/investor views)

Core contracts in write path:
  TokenFactory, FractalSecurityToken7518, AgentRegistry
Optional/adjacent path:
  FractalYieldDistributor, TransferAgent, Rule144

Operation Mapping

Platform OperationAPI/EntryPrimary Contract CallsPersisted Platform State
Deploy offering tokenPOST /blockchain/deploy-tokenTokenFactory.deployToken -> FractalSecurityToken7518 deployment -> cap initializationOffering stores deployment status, tx hash, contract address, and chain metadata
Mint subscription allocationsPOST /blockchain/trigger-minttoken.batchWhitelist + token.batchMint (+ batchLockTokens when lockup enabled)Subscription tokenMint metadata captured and investor balances updated
Freeze or recovery actionOperator/Admin operational actionfreezeAddress / unFreeze / forceTransfer / recoveryAddressAddress compliance state and balance migration reflected on-chain and in ops log
Payout executionDistribution operation workflowtoken.payout or token.batchPayout OR createDistribution + payoutForDistributionPayout tx receipts recorded; optional audit declaration on FractalYieldDistributor

Blockchain Operation Status Lifecycle

StatusMeaning
pendingpendingQueued for worker submission
submittedsubmittedBroadcast to chain, awaiting confirmation
confirmedconfirmedMined and finalized
failedfailedExecution reverted or could not be sent
dead_letterdead_letterExceeded retry policy and requires manual intervention

API Response Shape for Contract Metadata

{
  "id": "off_abc123",
  "name": "Rental Yield Notes Series 1",
  "tokenDeployment": {
    "status": "deployed",
    "contractAddress": "0x...",
    "chainId": 137,
    "txHash": "0x..."
  },
  "blockchain": {
    "network": "Polygon Mainnet",
    "chain_id": 137,
    "token_address": "0x...",
    "standard": "ERC-7518"
  }
}

Read Verification Playbook (Integrator Side)

import { ethers } from "ethers";

const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const token = new ethers.Contract(tokenAddress, erc7518Abi, provider);

// 1) Verify offering token metadata
const offeringId = await token.offeringId();
const symbol = await token.tokenSymbol();

// 2) Verify transferability before initiating UX action
const [allowed, reason] = await token.canTransfer(from, to, 1, amount, "0x");

// 3) Inspect lock state for user balance UX
const transferable = await token.transferableBalance(holder, 1);
const locked = await token.lockedBalanceOf(holder, 1);

// 4) Confirm freeze/restriction status
const frozen = await token.isFrozen(holder);
const restricted = await token.isRestricted(1);

Write Path Guardrails

  • Agent permissions gate mutating token functions via AgentRegistry.isAgent.
  • Token transfer path enforces lock, freeze, whitelist, and cap controls on-chain.
  • Queue-based execution avoids blocking portal requests on chain finality.
  • Domain state should update only after tx confirmation, never at submission time.
  • Failed/dead-letter operations require explicit operator reconciliation.

Planned Public Developer Endpoints

The following public API reference pages describe future external access paths.

AuthenticationEndpointsWebhooksError Codes

Illustrative Method Status

MethodUse in Platform OpsStatus
POST/blockchain/deploy-tokenInternal
POST/blockchain/trigger-mintInternal
GET/v1/offerings/:idPlanned Public