Create Market
A single operational flow for organization setup, proposal metadata, market creation, FLM liquidity, Snapshot linking, candle readiness, arbitrage setup, and publishing.
Permissionless Chiado Stack
This is the target testnet lifecycle: any wallet creates an organization, it is listed automatically, and the organization receives a default FLM for proposal liquidity.
- 01Deploy permissionless stack
Deploy metadata implementations, public aggregator, market factory, Snapshot linker, indexer hooks, and FLM factory on Chiado.
- 02Create default FLM bundleAfter: deploy-stack
Create the proposal source, pool adapters, and default FLM bundle that will be attached to the organization.
- 03Create organizationAfter: default-flm
Any wallet can create organization metadata with default FLM wiring; the creator becomes organization owner.
- 04List organizationAfter: create-organization
Every created organization is added to the permissionless aggregator and appears in listings.
- 05Owner creates proposalAfter: list-organization
The organization owner can create proposals and point the FLM at the official proposal.
Contract Actions
- 01DeployPermissionlessRegistry.runStage: deploy-stack
Deploy aggregator, organization, and proposal metadata implementations plus their factories.
Produces: aggregatorFactory, permissionlessAggregator, organizationImplementation, proposalImplementation
- 02FutarchyLiquidityManagerFactory.createLiquidityManagerStage: default-flmAfter: deploy-permissionless-registry
Deploy proposal source, spot adapter, conditional adapter, and default organization FLM.
Produces: proposalSource, spotAdapter, conditionalAdapter, manager
- 03FutarchyAggregatorsMetadata.createAndAddOrganizationMetadataWithDefaultLiquidityManagerStage: create-organizationAfter: create-default-flm-bundle
Create organization metadata, attach the FLM/proposal source, and add it to the aggregator in one call.
Produces: organizationMetadata
- 04FutarchyAggregatorsMetadata.getOrganizationsStage: list-organizationAfter: create-and-list-organization
Read the aggregator list that backs the companies page.
Produces: listedOrganization
- 05FutarchyOrganizationMetadata.createAndAddProposalMetadataStage: owner-proposalAfter: read-listed-organizations
Organization owner or editor writes proposal metadata after the futarchy proposal exists.
Produces: proposalMetadata
- 06FutarchyOfficialProposalSource.setOfficialProposalStage: owner-proposalAfter: owner-create-proposal-metadata, create-default-flm-bundle
Point the default FLM proposal source at the active proposal once the proposal address is known.
Produces: officialProposal
Market Defaults
One-Step Execution Plan
- 01Organization
Select an existing organization or create a permissionless testnet organization.
Evidence: organizationAddress, organizationOwner
- 02Metadata
Build proposal metadata, registry metadata, Snapshot reference, and display titles.
Evidence: metadataJson, closeTimestamp, snapshotId
- 03Futarchy Market
Create the market with company/currency tokens, Reality bond, opening time, and resolver defaults.
Evidence: proposalAddress, factoryTxHash
- 04Liquidity and FLM
Create or reuse the organization FLM, add initial liquidity, and set the official proposal.
Evidence: flmAddress, liquidityTxHash, officialProposalSet
- 05Snapshot LinkAfter: liquidity
Link Snapshot only after liquidity exists, so Snapshot users never land on an empty market.
Evidence: snapshotLinkRegistryTxHash
- 06Candles and IndexingAfter: market, liquidity
Kickstart pools and verify registry/candle indexers can read the market.
Evidence: registryIndexed, candlesIndexed
- 07ArbitrageAfter: market, liquidity
Deploy or configure arbitrage contracts and bots that keep YES/NO pricing checked.
Evidence: arbitrageContract, botConfig
- 08PublishAfter: snapshot, indexing
Expose the market and FLM links on the company page after all checks pass.
Evidence: companyPageLink, marketUrl, flmUrl
Contract Actions
- 01MetadataPublisher.publishProposalJsonStage: metadata
Build and publish the registry metadata JSON, including Snapshot visibility fields.
Produces: metadataJson, metadataURI
- 02IFutarchyFactory.createProposalStage: marketAfter: publish-metadata-json
Create the futarchy proposal market using company token, currency token, bond, and opening time.
Produces: proposalAddress
- 03FutarchyOrganizationMetadata.createAndAddProposalMetadataStage: metadataAfter: create-futarchy-proposal, publish-metadata-json
Store proposal metadata on the organization after the proposal address exists.
Produces: proposalMetadata
- 04FutarchyLiquidityManagerFactory.createLiquidityManagerStage: liquidityAfter: create-futarchy-proposal
Create or reuse the organization FLM bundle for this token pair.
Produces: proposalSource, spotAdapter, conditionalAdapter, manager
- 05FutarchyOrganizationMetadata.setDefaultLiquidityManagerStage: liquidityAfter: create-flm-bundle
Store the FLM and proposal source as the organization default used by market pages.
Produces: defaultLiquidityManager
- 06FutarchyOfficialProposalSource.setOfficialProposalStage: liquidityAfter: create-futarchy-proposal, create-flm-bundle
Point the FLM proposal source at the newly created proposal before public Snapshot routing.
Produces: officialProposal
- 07FutarchyLiquidityManager.initializeFromBootstrapStage: liquidityAfter: store-default-flm, set-official-proposal
Seed spot liquidity through the FLM before Snapshot sends users to the market.
Produces: flmAddress, liquidityTxHash
- 08SnapshotLinkRegistry.linkSnapshotProposalStage: snapshotAfter: bootstrap-flm-liquidity, create-proposal-metadata
Link Snapshot after liquidity is present and proposal metadata has been written.
Produces: snapshotLinkRegistryTxHash
- 09CandleIndexer.backfillMarketStage: indexingAfter: bootstrap-flm-liquidity, create-proposal-metadata
Verify organization/proposal metadata, market candles, and spot price feeds before publish.
Produces: registryIndexed, candlesIndexed
- 10FutarchyArbitrageFactory.configureMarketStage: arbitrageAfter: bootstrap-flm-liquidity
Configure arb contracts and bot parameters for the YES/NO and spot pools.
Produces: arbitrageContract, botConfig
- 11CompanyMarketRegistry.publishStage: publishAfter: link-snapshot-proposal, verify-registry-and-candles, configure-arbitrage
Expose the market on the company page once Snapshot, candles, metadata, and liquidity are ready.
Produces: companyPageLink, marketUrl, flmUrl
Generated Metadata Draft
This is the registry metadata shape the one-step flow will pass into the market creation and proposal metadata writes.
{
"chain": 100,
"proposalAddress": "",
"organizationAddress": "0xaAB097ead5c2Db1Ca7b1E5034224A2118EDAbe36",
"snapshot_id": "",
"closeTimestamp": 1783421148,
"startCandleUnix": 1783244748,
"twapStartTimestamp": 1783248348,
"twapDurationHours": 24,
"coingecko_ticker": "composite::0x2613cb099c12cecb1bd290fd0ef6833949374165+0x4c3b00293070073d71455f20fa9e5868cffd8678::0x89c80a4540a00b5270347e02e2e144c71da2eced-hour-500-xdai",
"currency_stable_rate": "0x89c80a4540a00b5270347e02e2e144c71da2eced",
"currency_stable_symbol": "xDAI",
"visibility": "public",
"resolution_status": "unresolved",
"eventProbability": 0.5,
"display_title_0": "What will the impact on PNK price be",
"display_title_1": "if KIP-90 is passed?",
"companyTokens": {
"base": {
"tokenName": "PNK",
"tokenSymbol": "PNK",
"wrappedCollateralTokenAddress": "0x37b60f4e9a31a64ccc0024dce7d0fd07eaa0f7b3"
}
},
"currencyTokens": {
"base": {
"tokenName": "sDAI",
"tokenSymbol": "sDAI",
"wrappedCollateralTokenAddress": "0xaf204776c7245bF4147c2612BF6e5972Ee483701"
}
},
"flm": {
"mode": "flm",
"address": "",
"proposalSource": "",
"officialProposalAfterMarketCreation": true
},
"snapshot": {
"space": "kleros.eth",
"proposalId": "",
"linkAfterLiquidity": true,
"visibilityMetadata": {
"includeOnSnapshotWebsite": true,
"linkedBy": "SnapshotLinkRegistry.linkSnapshotProposal"
}
},
"registry": {
"organizationAddress": "0xaAB097ead5c2Db1Ca7b1E5034224A2118EDAbe36",
"proposalCode": "KIP-90",
"proposalMetadataMethod": "FutarchyOrganizationMetadata.createAndAddProposalMetadata",
"defaultLiquidityManagerMethod": "FutarchyOrganizationMetadata.setDefaultLiquidityManager"
}
}