afp-product-builder

Build valid AFP products by composing on-chain PredictionProductV1, extended metadata DAG, and API-backed resolution rules. Use when creating or validating AFP product JSON for Forecastathon, selecting public data sources, or preparing IPFS pinning and registration.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "afp-product-builder" with this command: npx skills add autonity/afp-sdk/autonity-afp-sdk-afp-product-builder

AFP Product Builder

Use this skill to produce a complete, valid product specification for the Forecastathon competition, including extended metadata that can be pinned to IPFS as a DAG-CBOR encoded DAG.

Inputs to gather first

  • Network: bakerloo or mainnet.
  • Builder address (Forecastathon-registered).
  • Product type: time series (scalar) or event (binary or ternary).
  • Data source: public API URL and fields to extract.
  • Start time and earliest FSP submission time (UTC ISO 8601).
  • Min and max price band (unleveraged products only).
  • Symbol and description.

Forecastathon constraints (must enforce)

  • Required contract addresses:
    • Bakerloo: oracleAddress 0x72EeD9f7286292f119089F56e3068a3A931FCD49, collateralAsset 0xDEfAaC81a079533Bf2fb004c613cc2870cF0A5b5.
    • Mainnet: oracleAddress 0x06CaDDDf6CC08048596aE051c8ce644725219C73, collateralAsset 0xAE2C6c29F6403fDf5A31e74CC8bFd1D75a3CcB8d.
  • Builder must be a registered Forecastathon participant.
  • startTime must be at least two full working days after PR submission.
  • Products are unleveraged and must define minPrice and maxPrice.
  • Extended metadata must be pinned on IPFS and conform to standard schemas.
  • API source must be valid and freely accessible.

Build the on-chain product (PredictionProductV1)

Use camelCase field names inside product:

  • product.base.metadata.builder (EVM checksum address)
  • product.base.metadata.symbol (A-Z0-9, 1-16 chars)
  • product.base.metadata.description
  • product.base.oracleSpec.oracleAddress (required per network)
  • product.base.oracleSpec.fsvDecimals, fspAlpha, fspBeta, fsvCalldata
  • product.base.collateralAsset (required per network)
  • product.base.startTime (UTC ISO 8601, Z)
  • product.base.pointValue
  • product.base.priceDecimals
  • product.base.extendedMetadata (CID, filled after pinning)
  • product.expirySpec.earliestFSPSubmissionTime (UTC ISO 8601, Z)
  • product.expirySpec.tradeoutInterval
  • product.minPrice < product.maxPrice

Build extended metadata (snake_case)

Extended metadata fields are outcome_space, outcome_point, oracle_config, and oracle_fallback. These are pinned on IPFS and referenced by CID.

Outcome space and point

Time series (scalar):

  • outcome_space: OutcomeSpaceTimeSeries
    • fsp_type: "scalar"
    • description
    • base_case.condition and base_case.fsp_resolution
    • edge_cases (optional)
    • units, source_name, source_uri
    • frequency: daily, weekly, fortnightly, semimonthly, monthly, quarterly, yearly
    • history_api_spec (optional for backing data)
  • outcome_point: OutcomePointTimeSeries
    • fsp_type: "scalar"
    • observation.reference_date and observation.release_date (YYYY-MM-DD)

Event (binary or ternary):

  • outcome_space: OutcomeSpace
    • fsp_type: "binary" or "ternary"
    • description
    • base_case.condition and base_case.fsp_resolution
    • edge_cases (optional)
  • outcome_point: OutcomePointEvent
    • fsp_type: "binary" or "ternary"
    • outcome (specific candidate or yes/no outcome)

Template variables in conditions must resolve against outcome_point fields. Example: {outcome} for events, {observation.release_date} for time series.

Oracle config

Manual resolution:

  • oracle_config: OracleConfig
    • description
    • project_url (optional)

API-backed resolution:

  • oracle_config: OracleConfigPrototype1
    • description
    • project_url (optional)
    • evaluation_api_spec: ApiSpecJSONPath
      • spec_variant: "product-fsv"
      • url, date_path, value_path
      • date_format_type: iso_8601 | unix_timestamp | custom
      • timestamp_scale if unix timestamps are ms
      • auth_param_location: none | query | header
      • auth_param_name / auth_param_prefix if needed

For time series, history_api_spec (OutcomeSpaceTimeSeries) should use spec_variant: "underlying-history" when you include it.

Oracle fallback

  • oracle_fallback.fallback_time must be at least 7 days after earliestFSPSubmissionTime.
  • oracle_fallback.fallback_fsp must be within [minPrice, maxPrice].

API spec guidance

  • Use JSONPath strings that select parallel arrays for dates and values.
  • Prefer APIs that return ISO 8601 dates or UNIX timestamps to avoid custom parsing.
  • Verify the URL is reachable (HEAD request succeeds).
  • Prefer no-auth or free-access endpoints for Forecastathon.
  • See references/api-sources.md for vetted examples.

IPFS pinning (DAG-CBOR required)

Extended metadata must be pinned as a DAG-CBOR DAG, not a single JSON blob. The AFP SDK handles this automatically by encoding and pinning each component and the root DAG:

import afp

app = afp.AFP(
    rpc_url=AUTONITY_RPC_URL,
    authenticator=afp.PrivateKeyAuthenticator(PRIVATE_KEY),
    ipfs_api_url=IPFS_API_URL,
    ipfs_api_key=IPFS_API_KEY,
)
product_api = app.Product()

spec = product_api.validate(product_dict)
pinned = product_api.pin(spec)  # builds and pins DAG-CBOR

If you build the DAG manually, ensure you store it as dag-cbor (e.g., ipfs dag put default store codec) and include schema CIDs for each component.

Validation and output

  1. Use Product.validate or Product.validate_json to enforce schemas.
  2. Ensure business rules and Forecastathon constraints pass.
  3. Use Product.dump_json for canonical JSON output.
import afp

product_api = afp.AFP(...).Product()
spec = product_api.validate(product_dict)
pinned = product_api.pin(spec)
product_json = product_api.dump_json(pinned)

Deliverables

  • Complete product JSON with extendedMetadata CID filled in.
  • Clear explanation of outcome_space resolution and data source.
  • Validation checklist confirmation (see references/validation-checklist.md).

References

  • Public API options and JSONPath examples: references/api-sources.md
  • Validation checklist and constraints: references/validation-checklist.md

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Web3

Polymarket Cryptos Maker 5m

Continuous Static Market Making execution skill for Polymarket. Sells BOTH sides of 5-minute binary markets at $0.52. Features multi-asset support and an aut...

Registry SourceRecently Updated
Web3

Cutie - Crypto KOL Platform

Cutie 加密货币 KOL 社群平台。查看交易信号、快讯、KOL 画像、论坛帖子、直播间,管理账户和关注列表。

Registry SourceRecently Updated
Web3

zHive

Register as a trading agent on zHive, post predictions on recurring megathread rounds for top 100 crypto tokens, and compete for accuracy rewards. Rounds res...

Registry SourceRecently Updated
0527
Profile unavailable