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 deferredCreation is permissionless; reward support is not
What one launch creates
- 01
Identity
Register token, issuer, metadata controller, object item ID, schema hash, data hash, provenance hash, and content URI.
- 02
Community token
Deploy the fixed-supply token and freeze the creator/liquidity split for that launch.
- 03
V4 pool
Create the unique Community Token/USDG pool with a fixed 0.30% LP fee and no canonical FLIP 3% Hook.
- 04
Permanent liquidity
Mint the full-range position directly to a permanent Locker and record actual spend plus refund.
- 05
Public market
The ownerless registered-pools-only Router supports buy/sell exact-input and exact-output without retaining token balances.
- 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
| Field | Contract requirement |
|---|---|
name | 1–64 encoded bytes (normally UTF-8 bytes from the client), not 1–64 displayed characters |
symbol | 1–16 encoded bytes (normally UTF-8 bytes from the client), not 1–16 displayed characters |
| Identity commitments | itemId, schemaHash, dataHash, and provenanceHash must each be nonzero bytes32 |
| Launch uniqueness | userSalt must be nonzero; creator plus the complete params tuple determines launchId and the CREATE2 token address |
| Supply | totalSupplyRaw, creatorAllocationRaw, and liquidityTokenRaw must all be positive |
| Exact split | creatorAllocationRaw + liquidityTokenRaw == totalSupplyRaw exactly |
| Quote liquidity | liquidityQuoteRaw must be positive and transferred exactly; post-mint V4 rounding is reported as actual spend plus refund |
| Factory charge | The current Factory adds no launch fee. The creator funds liquidityQuoteRaw plus network gas; V4 LP economics remain separate. |
| Rounding refunds | Unused 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. |
metadataUri | The 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
- 01
Inspect the release
Run
inspectagainst 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. - 02
Prepare one exact approval
For create, approve exactly
liquidityQuoteRawUSDG to the Factory. For buy, approve USDG to the Router. For sell, approve the registered Community token to the Router. Submit only the emittedwalletRequestthrough an external wallet, then runverifyon its transaction hash before preparing the dependent action. - 03
Preview exact-output
Run
previewbefore an exact-output buy or sell. Itsflip-launchpad-swap-preview/1artifact binds the quote to a canonical simulation block and exposesquotedAmountRaw,suggestedLimitAmountRaw, plus exactapproval.token,approval.spender,approval.amountRaw, andapproval.purpose. - 04
Prepare create or swap
Run
createonly with the unchanged params document and exact verified allowance. Run exact-inputswapwithout a fixed-limit flag. Run exact-outputswapwith--limit-amount-rawequal to the previewedsuggestedLimitAmountRaw; the command takes a fresh quote and refuses a stale or widened boundary. - 05
Submit outside the CLI
Before the intent expires, the external wallet must submit exactly
walletRequest.chainId,from,to,data, andvalue. Do not rebuild calldata, change recipient/value, feed a raw signed transaction back to the CLI, or treat wallet submission as verified evidence. - 06
Verify and remove residue
Run
verifyonly after manifest finality. It replays the simulation snapshot, transaction, receipt, canonical block/runtime/PoolKey state, required events, spend and allowance. If evidence saysallowance.revokeRequired=true, prepare, externally submit, and verifyrevokefor the same purpose/token.
# 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>| Operation | Exact allowance | Preparation rule |
|---|---|---|
| Create | liquidityQuoteRaw USDG → Factory | Approval receipt verifies first; then unchanged params are predicted, simulated and prepared |
| Buy exact-input | amountRaw USDG → Router | No --limit-amount-raw; a fresh quote and slippage bps derive minimum token output |
| Sell exact-input | amountRaw Community token → Router | The token must resolve to the manifest-bound registered PoolKey |
| Buy/sell exact-output | preview.approval.amountRaw input token → Router | Pass 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
- 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 incrementsmetadataVersion; it does not change fixed token supply, issuer, item ID, provenance hash, or Pool ID. - 02
Publish an attestation
The metadata controller may call
attestwith 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. - 03
Transfer control in two steps
The current controller starts
transferMetadataController; only that pending address may callacceptMetadataController. Acceptance incrementsmetadataVersionand emits the unchanged metadata again under the new controller, preventing a one-transaction transfer to an address that never accepted responsibility. - 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=falsewithout waiting for a curator transaction. - 05
Review the new fingerprint
The curator must explicitly call
reviewAssetagain 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/change | Token remains tradable? | Reward eligibility | Required next action |
|---|---|---|---|
| Submitted after create | Yes | Not eligible | Curator performs a documented review |
| Approved and fingerprint unchanged | Yes | Eligible for Catalog consideration | Governance may include it in a later Catalog |
| Metadata/controller changed | Yes | Automatically false | Curator reviews the new fingerprint; governance re-evaluates any Catalog |
| Suspended | Yes | False | Resolve review issue and explicitly re-review |
| Rejected | Yes | False | A 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.
