DOCS
On this page8 sections

RWA Everything

RWA Everything launchpad

Issue a community asset for a real-world object, trade it, and separately apply for reward eligibility.

RWA Functional Testnet PASS · Mainnet initialization fix required · Formal certification deferred

Creation is permissionless; reward support is not

What one launch creates

  1. 01

    Identity

    Register token, issuer, metadata controller, object item ID, schema hash, data hash, provenance hash, and content URI.

  2. 02

    Community token

    Deploy the fixed-supply token and freeze the creator/liquidity split for that launch.

  3. 03

    V4 pool

    Create the unique Community Token/USDG pool with a fixed 0.30% LP fee and no canonical FLIP 3% Hook.

  4. 04

    Permanent liquidity

    Mint the full-range position directly to a permanent Locker and record actual spend plus refund.

  5. 05

    Public market

    The ownerless registered-pools-only Router supports buy/sell exact-input and exact-output without retaining token balances.

  6. 06

    Optional reward review

    Submit the identity to RewardEligibility. A curator can approve, suspend, or reject it; an approved asset still enters only through a new versioned Catalog.

Functional lifecycle
PASS · create + buy + sell
Functional Launch ID
0x4f7aff47d3578d68d521572b6df7eabd0475cdafa1bd5cb9b1b2f1c63a9c9015
Functional token
0x40d296E3bba2e0293fF2D41744aDbc920daD8853
Functional Pool ID
0x4fd09cdc5f82b2e46c4b0ccc88d4de8b819de3ce2afc25c007386d4a5f89201a

Exact create(params) boundary

FieldContract requirement
name1–64 encoded bytes (normally UTF-8 bytes from the client), not 1–64 displayed characters
symbol1–16 encoded bytes (normally UTF-8 bytes from the client), not 1–16 displayed characters
Identity commitmentsitemId, schemaHash, dataHash, and provenanceHash must each be nonzero bytes32
Launch uniquenessuserSalt must be nonzero; creator plus the complete params tuple determines launchId and the CREATE2 token address
SupplytotalSupplyRaw, creatorAllocationRaw, and liquidityTokenRaw must all be positive
Exact splitcreatorAllocationRaw + liquidityTokenRaw == totalSupplyRaw exactly
Quote liquidityliquidityQuoteRaw must be positive and transferred exactly; post-mint V4 rounding is reported as actual spend plus refund
Factory chargeThe current Factory adds no launch fee. The creator funds liquidityQuoteRaw plus network gas; V4 LP economics remain separate.
Rounding refundsUnused Community token and USDG rounding refunds go back to the creator in the same atomic create transaction; the Factory must finish with no retained launch balance.
metadataUriThe contracts require only a non-empty string; they do not enforce an IPFS scheme, content addressing, reachability, MIME type, or hash match

Prepare writes without giving FLIP a wallet key

  1. 01

    Inspect the release

    Run inspect against the exact release or rehearsal manifest and its credential-free RPC/capability URL. Review chain 46630, release/source/manifest/address/rules identities, runtime hashes, Factory, Controller, Router, Quoter and registered PoolKey bindings.

  2. 02

    Prepare one exact approval

    For create, approve exactly liquidityQuoteRaw USDG to the Factory. For buy, approve USDG to the Router. For sell, approve the registered Community token to the Router. Submit only the emitted walletRequest through an external wallet, then run verify on its transaction hash before preparing the dependent action.

  3. 03

    Preview exact-output

    Run preview before an exact-output buy or sell. Its flip-launchpad-swap-preview/1 artifact binds the quote to a canonical simulation block and exposes quotedAmountRaw, suggestedLimitAmountRaw, plus exact approval.token, approval.spender, approval.amountRaw, and approval.purpose.

  4. 04

    Prepare create or swap

    Run create only with the unchanged params document and exact verified allowance. Run exact-input swap without a fixed-limit flag. Run exact-output swap with --limit-amount-raw equal to the previewed suggestedLimitAmountRaw; the command takes a fresh quote and refuses a stale or widened boundary.

  5. 05

    Submit outside the CLI

    Before the intent expires, the external wallet must submit exactly walletRequest.chainId, from, to, data, and value. Do not rebuild calldata, change recipient/value, feed a raw signed transaction back to the CLI, or treat wallet submission as verified evidence.

  6. 06

    Verify and remove residue

    Run verify only after manifest finality. It replays the simulation snapshot, transaction, receipt, canonical block/runtime/PoolKey state, required events, spend and allowance. If evidence says allowance.revokeRequired=true, prepare, externally submit, and verify revoke for the same purpose/token.

Command shapes
# Every --output is a new absolute path in an external mode-0700 directory.
npm run launchpad:write -w @stockflip/indexer -- inspect \
  --manifest <manifest> --rpc-url <credential-free-url> --output <00-runtime.json>

npm run launchpad:write -w @stockflip/indexer -- preview \
  --manifest <manifest> --rpc-url <credential-free-url> --output <10-preview.json> \
  --from <payer> --recipient <recipient> --token <community-token> \
  --side <buy-or-sell> --shape exact-out --amount-raw <desired-output-raw> \
  --slippage-bps <0-to-5000>

npm run launchpad:write -w @stockflip/indexer -- approve \
  --manifest <manifest> --rpc-url <credential-free-url> --output <11-approval.json> \
  --from <payer> --purpose <buy-or-sell> \
  --amount-raw <preview-approval.amountRaw> [--token <required-for-sell>]

# After the approval walletRequest is externally submitted and verified:
npm run launchpad:write -w @stockflip/indexer -- swap \
  --manifest <manifest> --rpc-url <credential-free-url> --output <13-swap.json> \
  --from <payer> --recipient <recipient> --token <community-token> \
  --side <buy-or-sell> --shape exact-out --amount-raw <desired-output-raw> \
  --slippage-bps <same-bps> --limit-amount-raw <preview-suggestedLimitAmountRaw>

npm run launchpad:write -w @stockflip/indexer -- verify \
  --manifest <manifest> --rpc-url <credential-free-url> --output <fresh-receipt.json> \
  --intent <prepared-intent.json> --tx-hash <wallet-transaction-hash>
OperationExact allowancePreparation rule
CreateliquidityQuoteRaw USDG → FactoryApproval receipt verifies first; then unchanged params are predicted, simulated and prepared
Buy exact-inputamountRaw USDG → RouterNo --limit-amount-raw; a fresh quote and slippage bps derive minimum token output
Sell exact-inputamountRaw Community token → RouterThe token must resolve to the manifest-bound registered PoolKey
Buy/sell exact-outputpreview.approval.amountRaw input token → RouterPass the unchanged preview limit; fresh quote must remain within both fixed limit and fresh slippage ceiling

Metadata can describe the object, not just the token

A sandal can expose size, color, material, and provenance. A dog-themed asset can expose breed, sex, weight, and record references. The onchain identity commits hashes and controller history. FLIP’s publication policy should require external content to be content-addressed and independently checked against those hashes, even though the contracts themselves accept any non-empty metadata URI.

The ten Source-A test objects—five release showcases plus five fresh acceptance-only objects—are synthetic fixtures with NO REAL VALUE. They are not proof of custody or authenticity and cannot be copied into a Mainnet identity policy.

Post-launch identity and reward-review lifecycle

  1. 01

    Update committed metadata

    Only the current metadata controller may call updateMetadata(identityId, schemaHash, dataHash, metadataUri). Both hashes must be nonzero and the URI non-empty. Every successful update increments metadataVersion; it does not change fixed token supply, issuer, item ID, provenance hash, or Pool ID.

  2. 02

    Publish an attestation

    The metadata controller may call attest with a nonzero attestation hash and an optional URI. The event binds the attestation to the identity’s current metadata version; it does not itself prove custody, title, authenticity, appraisal, redemption, or reward eligibility.

  3. 03

    Transfer control in two steps

    The current controller starts transferMetadataController; only that pending address may call acceptMetadataController. Acceptance increments metadataVersion and emits the unchanged metadata again under the new controller, preventing a one-transaction transfer to an address that never accepted responsibility.

  4. 04

    Invalidate stale eligibility automatically

    Eligibility fingerprints include token, issuer, metadata controller, metadata version, asset class, data hash, and provenance hash. A metadata update or accepted controller transfer therefore makes an older Approved review return isEligible=false without waiting for a curator transaction.

  5. 05

    Review the new fingerprint

    The curator must explicitly call reviewAsset again with Approved, Suspended, or Rejected plus nonzero review and route-policy hashes. Approval freezes the current identity fingerprint; it still does not add the token to an active Reward Catalog until governance publishes and activates a new versioned Catalog.

State/changeToken remains tradable?Reward eligibilityRequired next action
Submitted after createYesNot eligibleCurator performs a documented review
Approved and fingerprint unchangedYesEligible for Catalog considerationGovernance may include it in a later Catalog
Metadata/controller changedYesAutomatically falseCurator reviews the new fingerprint; governance re-evaluates any Catalog
SuspendedYesFalseResolve review issue and explicitly re-review
RejectedYesFalseA later curator decision may change status; no automatic approval

Community volume is not FLIP Hook revenue

Community pools are intentionally hookless and charge only the fixed 0.30% V4 LP fee. Their volume does not enter FLIP’s 3%/3% Hook revenue, Unified Reserve, Holder 35%, or Mystery subsidy accounting.

Mainnet remains blocked on initialization protection

A public mempool can reveal the CREATE2 token address before the launch transaction completes, allowing a third party to initialize the hookless PoolKey at the wrong price. Mainnet requires either a fail-closed private builder flow or an audited Factory-only initialization Guard Hook that does not add the FLIP 3% tax.

Authority sources

These repository paths were used to derive this page. They link only when an explicitly configured public repository and immutable Source A commit are both available; otherwise they remain plain paths. Release addresses and live status still require an accepted manifest and finalized evidence.

  • src/v3/launchpad/RwaEverythingFactoryV3.sol
  • src/v3/launchpad/RwaIdentityRegistryV3.sol
  • src/v3/launchpad/RewardEligibilityV3.sol
  • v4/src/CommunityRwaV4PoolController.sol
  • v4/src/CommunityRwaV4SwapRouter.sol
  • services/indexer/src/launchpad-write.ts
  • services/indexer/src/launchpad-write-cli.ts