Skip to content

Cell Seal: Glossary ​

Every term has exactly one meaning across all documents, the contracts, the SDK and the events. The Where it appears column names the contract function, event, type or SDK call that carries the term, so an integrator can go from the word to the code. A dash means the term is a concept with no identifier of its own.

Cell Seal ships no end-user interface. The wording a tokenization platform shows its own users is the platform's decision. This document fixes the technical meaning only.

1. Product and parties ​

TermMeaningWhere it appears
Cell SealThe settlement layer that makes the amount of a fund transaction unreadable on the public ledger. Sold as a contract set plus an SDK-
RailThe part of Cell Seal a platform runs: wrapper, settlement, policy, verifier, auditor registry, fund registry, and the SDK. Contains no fund business logicContracts seal-token, settlement, fund-policy, seal-verifier, seal-auditor, fund-registry. Package @cell-seal/sdk
Tokenization platformA third-party fund management platform: holds the fund token, the mint and burn rights, KYC, the order lifecycle and its own apps. The customer of Cell Seal: integrates the contracts and the SDK into its own systemintegration.md
IntegrationThe work a platform does to put its funds on the rail: deploy the contract set, wrap the fund token, route sealed legs through settlement, rebuild the register from decrypted dataintegration.md, onboarding.md
SandboxA reference tokenization platform with Cell Seal already integrated: a backend, a fund console and an investor app on top of the SDK. It exists so a platform can run one full cycle on the rail before integrating, and so the reference integration has a running form. Not a product, not operated for real fundsdesign/README.md, backend.md, frontend.md
Sandbox backendThe backend of the sandbox: order store, event archive and jobs, all amount-blind. A worked example of the host services, not the productbackend.md
Host servicesThe three services the SDK needs from whoever runs it: Stellar RPC, a permanent event archive, an order store for ciphertext. A platform provides them in its own infrastructuresdk.md section 2.1
Fund consoleThe fund-side app of the sandbox: create a fund with a sample token, manage investors, process orders, publish NAV, close windows, rebuild the register, grant disclosureSandbox
Investor appThe investor-side app of the sandbox: browse funds, subscribe, redeem, portfolioSandbox
Case 1 / Case 2The two ways a fund joins the rail: the fund has no token yet and the token is created together with the wrapper / the fund already has a token with public holdersonboarding.md
IssuerThe legal entity that issues the fund's shares. Owns the token contract and the issuer account on the platform. A customer of the platformissuer_admin in fund-registry.create_fund. Co-signer of settlement.close_window
Fund opsThe people who run the fund day to day on the issuer side, acting through roles granted by the issuer adminFundRole::{Ops, Compliance, NavPublisher} in fund-registry
Transfer agent (TA)The party that keeps the fund's register. One of the key holdersKey holder
InvestorA party that passed KYC and was approved by the issuer, allowed to hold shares. Same as holder when speaking about on-chain stateInvestorEntry, fund-policy.set_investor
Auditor / regulatorA party granted the right to read amounts within a scope and for a periodDisclosure request

2. Fund ​

TermMeaningWhere it appears
FundAn open-ended fund priced by NAV. One fund maps to exactly one share token and one share wrapperfund_id, FundInfo in fund-registry
ShareThe unit of ownership of the fund. One share = one unit of the share token-
NAVNet asset value per share, published by the issuer every dealing day. Always publicfund-registry.publish_nav, nav(fund_id, dealing_day)
Dealing dayThe day the fund prices and processes the orders received before cut-offdealing_day. FundTerms.dealing
Cut-offThe deadline for orders to be included in a dealing day. Orders arriving later fall into the next periodFundTerms.cutoff_secs_before
NAV strikeThe moment the NAV of a dealing day is fixed and published. Every pending order is priced from itops.nav.publish, ops.nav.priceOrders
Forward pricingAn order is placed before the price is known. The price is the NAV of the next dealing day. The reason every order has two legs separated in time-
SubscriptionThe investor pays money to receive sharesseal.orders.createSubscription
RedemptionThe investor returns shares to receive moneyseal.orders.createRedemption
Secondary transferTransfer of shares between two investors, without the issuersettlement.settle_pair, seal.pair.*
FeeSubscription or redemption fee, deducted when the payout is computedFundTerms.sub_fee_bps, red_fee_bps
RegisterThe record of who holds how many shares. With Cell Seal the register is rebuilt from decrypted data, not read from public balancesops.register.build

3. Orders and settlement ​

TermMeaningWhere it appears
OrderA subscription, redemption or secondary transfer request. Always has two legsBackend order record
Order referenceThe human-readable code of an order (SB-0410, RD-0412), used in bank transfer descriptions and in the platform's apps. Never carries an amountreference returned by seal.orders.create*
order_idThe 32-byte identifier of an order, SHA-256(fund_id || investor || client_nonce), generated on the client. The only part of an order that appears on chainBytesN<32> in every settlement function and event
LegOne half of an order. Each leg has its own statusLeg, LegKind::{Direct, Spender}
Share legThe leg that moves shares. Always on-chain, always sealedLegRole::Share
Cash legThe leg that moves money. Off-chain (fiat) or on-chain sealed (stablecoin)LegRole::Cash
Leg statuspending then delivered then confirmed. Changes only when the chain has confirmed, or when fund ops attest for an off-chain legBackend state machine, backend.md
AttestFund ops confirm an off-chain event: fiat has arrived, or money has been paidops.orders.attest(orderId, "cash_received" | "cash_paid")
DoPDelivery on Payment. The two legs settle separately. The second leg is triggered only when the first is confirmed. Default for a fiat cash legsettlement.submit_leg
DvPDelivery versus Payment. Both legs in one transaction, all-or-nothing. Each side decrypts and checks the other side's amount before signing. The cash leg must be a sealed stablecoinsettlement.settle_dvp
StrikeThe moment the NAV of a dealing day is published and every pending order is priced. Nothing changes handsops.nav.priceOrders
SettlementWhen the settlement window closes: the net is wrapped or unwrapped, subscription shares are delivered, DvP legs are executed. The issuer mints or burns the public part on the platform's rail, before or aftersettlement.close_window, then submit_leg and settle_dvp
Settlement windowA fixed period (for example weekly) at the end of which the issuer brings the supply change to the public ledger. Runs even when there are no ordersWindowState, FundTerms.window_period_secs, next_close
NetTotal subscriptions minus total redemptions of one settlement window. The only number that becomes publicnet: i128 in close_window. WindowClosed.net
CoverHow well the net of a window hides the individual orders inside it. Low when the window has too few orders or one order makes up almost all of itcover in the result of ops.window.plan

4. Privacy ​

TermMeaningWhere it appears
SealedAn amount that sits on chain in unreadable form. Opposite: public-
PublicReadable by anyone from the chain or published by the fund: addresses, timestamps, transaction type, NAV, total supply, the net of a window-
ConfidentialityHiding how much, not who. This is what Cell Seal does-
AnonymityHiding who. Cell Seal does not do this. Holder addresses are always public-
CommitmentAn on-chain value that stands for an amount without revealing it. It can be added and subtracted, so the chain can check conservationconfidential_balance() on the wrapper
ProofA zero-knowledge proof attached to a sealed transaction. Proves the transaction is valid without revealing the amountseal-verifier. SDK prover/
ConservationA proven property: total in = total out, no share is created or destroyedTransfer circuit
RangeA proven property: the amount and the balance after the transaction are not negativeTransfer circuit
Amount-blindA property every host service and the sandbox backend must have: it only stores and forwards ciphertext and has no key to read any amountbackend.md section 1
Order secretThe secret part of an order (amount, bank details), sealed in a sealed box to the fund and to the investorOrderSecret, SDK box/
OpeningThe pair (v, r) that opens a commitment. Whoever has the opening can check v*G + r*H against the on-chain commitmentSDK wallet/. ops.register.verifyOpening
LeakAny path by which a sealed amount can be inferred from public dataL-n, security.md section 3

5. Keys and disclosure ​

TermMeaningWhere it appears
Stellar keyThe user's wallet key. Signs transactionsWallet adapter passed to SealClient.connect
Privacy keyThe investor's key pair inside a wrapper: a spending key to build proofs, a viewing key (derived from the spending key) to decrypt their own balance and amounts. Derived deterministically from one signature of the Stellar wallet: no separate seed phrase, never sent to Cell Seal, registered on chain once and not rotatablesk, vk in SDK keys/. seal.token(wrapper).register
Viewing keyThe fund's key to decrypt every amount in the fund. It is the primitive's auditor key: one key per auditor_id, and every investor of the fund is forced to use that auditor_id. Distinct from the key the issuer uses day to day as a party to an orderauditor_key in create_fund. seal-auditor
Ops root32 random bytes per fund, the root of the privacy key of the settlement account and of the fund's box key. Handed to fund ops through an envelopeops_root, keys.md
Box keyAn X25519 key for encrypting off-chain data (order secret, envelope). Each user and each fund has oneSDK box/. box_pk
EnvelopeA secret (ops root, viewing key share) sealed to the recipient's box key and stored in the backendSDK box/
Key shareOne part of the viewing key, held by one key holderSDK threshold/
Key holderA party holding a key share: typically issuer, transfer agent, regulatorseal.keyHolder(fundId)
Key epochOne generation of the viewing key. rotate_key opens a new epoch. The old epoch is still needed to read its historyseal-auditor.rotate_key
k-of-nk of the n key holders must take part to open the viewing key. Cell Seal is never one of the nk_t in cryptography.md
DisclosureOpening amounts to a party, within a defined scope and periodseal.disclosure.open
Disclosure requestA request to open: who reads, what, which period, when it expires. Needs k approvalsholder.requests.list, holder.requests.approve
Unlock logThe log of every use of the viewing keyBackend, backend.md

6. On-chain ​

TermMeaning
Share token / fund tokenThe platform's SEP-41 token representing the fund's shares. The platform's issuer mints and burns it. Cell Seal has no rights on it. Its supply is public
WrapperThe seal-token contract that holds the share token and issues sealed balances 1:1 against it. Every sealed transfer happens inside it
Share wrapper / cash wrapperThe wrapper of the share token / of a stablecoin. DvP needs both
Wrap / unwrapMoving tokens into / out of the wrapper (deposit / withdraw). The amount of a wrap or unwrap is public, which is why a redemption never unwraps per order
Confidential transferA transfer inside the wrapper: public addresses, sealed amount
Settlement accountThe issuer's account inside the wrapper: receives shares when investors redeem, holds shares awaiting delivery for subscriptions. At the end of a window the net is wrapped into or unwrapped out of this account. The issuer funds or retires the public part on the platform's rail. fund-registry.is_settlement_account
Receiving / spendable balanceThe two compartments of an account's balance inside the wrapper. Newly received shares sit in receiving. Only spendable can be transferred out
MergeFolding receiving into spendable. No proof needed, no amount revealed. The SDK does it automatically before building an order
Spender / allowanceDelegating to another address the right to move part of the sealed shares. The delegated part is split off from spendable. Used for orders awaiting NAV (set_spender, revoke_spender)
settlementThe Cell Seal contract that every sealed transfer must go through: attaches the order_id, executes DvP, closes the settlement window
HookThe wrapper's extension point, run before every operation (SealHooks). Cell Seal uses it to enforce the anti-leak rules
PolicyThe rules checked before every confidential transfer: whitelist, KYC, freeze. fund-policy.is_authorized
WhitelistThe list of addresses approved by the issuer. Addresses outside the list cannot receive shares
FreezeThe issuer blocks an address from sending and receiving
Position limitThe maximum share of total supply one investor may hold. The first version checks it at order intake from numbers the issuer can already read. A check on sealed numbers needs a proof
ClawbackThe issuer takes shares back from a frozen address without the holder's signature, under a court order or sanction. The amount of a clawback is public
Indexer / event archiveThe service that reads on-chain events, keeps them permanently and serves them to wallets. Never sees a plaintext amount. The platform runs one. The sandbox indexer is the reference implementation

7. Pairs that are easy to confuse ​

Do not confuseWithDifference
RailSandboxThe rail is the contracts, the SDK and the onboarding procedure, what a platform integrates. The sandbox is one reference platform built on the rail, for trying it out
Host servicesSandbox backendThe host services are an interface the SDK needs (RPC, event archive, order store). The sandbox backend is one implementation of it
Settlement windowDealing dayThe dealing day is when orders are priced. The settlement window is when supply changes publicly. One window can contain several dealing days
Privacy keyViewing keyThe privacy key reads the numbers of one investor. The viewing key reads the numbers of the whole fund and needs k-of-n
Viewing keyThe issuer's day-to-day keyThe issuer is a party to every subscription and redemption, so it reads amounts with its own privacy key. The viewing key is needed only for audit, for the regulator and for secondary transfers
SealedOff-chainSealed still sits on chain and is checked by the chain. Off-chain means the chain knows nothing
DoP"Not safe"DoP only carries counterparty risk between an investor and a licensed issuer, a risk the fund industry already accepts
RegisterShare token balanceAfter wrapping, the public balance only shows that the wrapper holds everything. The register is what is rebuilt from decrypted data
Sealed supplyTotal supplysupply_after is balance(token, wrapper), the wrapped part. In Case 2 the total supply also contains the public part that is not yet wrapped

Cell Private technical documentation.