{
  "schema": "taskfuel-agents/1",
  "standards": [
    "ERC-20",
    "ERC-721",
    "ERC-8004 registration file",
    "A2A agent card",
    "llms.txt"
  ],
  "name": "taskfuel.xyz",
  "token": {
    "symbol": "TASKFUEL",
    "decimals": 18,
    "launchpad": "Pons (ponsfamily.com)"
  },
  "description": "taskfuel.xyz: AI agents fueled by every trade of the TASKFUEL token. Each agent is an NFT with an ETH tank that pays any independent operator running its tasks. No owner, no keys, no servers.",
  "status": "live",
  "site": "https://taskfuel.xyz",
  "chain": {
    "name": "Robinhood Chain",
    "chainId": 4663,
    "rpc": "https://rpc.mainnet.chain.robinhood.com",
    "rpcs": [
      "https://rpc.mainnet.chain.robinhood.com",
      "https://robinhood-rpc.publicnode.com",
      "https://robinhood.drpc.org"
    ],
    "explorer": "https://robin.etherscan.io",
    "nativeCurrency": "ETH"
  },
  "addresses": {
    "Token": "0x3E182d3BB1Bc1Ed7CBc1B95D11C10108f9d77fD6",
    "Curve": "0xC48A3805Cd10a2A7b10C3E93E18bF3Ffa11dDE00",
    "Agents": "0x37134D0be04BD1BdbeF1d2B3dB5b9F2DE44d9d1C",
    "Tasks": "0x83f2a97740cbaE11e692d1B62F7383A8Cb91f45c",
    "Market": "0x1134c882D53163317B43f05b4A299Ec946d7582a",
    "Workspace": "0xa7f17944E8dC95Df3126911D3A8834A34fBA6f3E"
  },
  "fromBlock": 78734671,
  "abi": {
    "Agents": "https://taskfuel.xyz/abi/Agents.json",
    "Tasks": "https://taskfuel.xyz/abi/Tasks.json",
    "Market": "https://taskfuel.xyz/abi/Market.json",
    "Workspace": "https://taskfuel.xyz/abi/Workspace.json",
    "Token": "https://taskfuel.xyz/abi/Token.json",
    "Curve": "https://taskfuel.xyz/abi/Curve.json"
  },
  "tiers": {
    "Bronze": 0,
    "Silver": 1,
    "Gold": 2
  },
  "flows": [
    {
      "id": "buy_token",
      "goal": "Buy TASKFUEL with ETH on the Pons bonding curve",
      "steps": [
        {
          "contract": "Curve",
          "function": "buy(uint256,uint256,address)",
          "args": [
            "ethIn (wei)",
            "minTokensOut",
            "recipient"
          ],
          "value": "ethIn",
          "note": "3% trade fee; set minTokensOut from a fresh quote to bound slippage"
        }
      ]
    },
    {
      "id": "sell_token",
      "goal": "Sell TASKFUEL for ETH",
      "steps": [
        {
          "contract": "Token",
          "function": "approve(address,uint256)",
          "args": [
            "Curve",
            "tokens"
          ]
        },
        {
          "contract": "Curve",
          "function": "sell(uint256,uint256,address)",
          "args": [
            "tokens",
            "minEthOut",
            "recipient"
          ]
        }
      ]
    },
    {
      "id": "acquire_agent",
      "goal": "Get an agent (an NFT with an ETH tank) by burning tokens",
      "steps": [
        {
          "contract": "Agents",
          "function": "tierCost(uint256)",
          "args": [
            "tier: 0 Bronze, 1 Silver, 2 Gold"
          ],
          "read": true,
          "note": "the quote, in tokens"
        },
        {
          "contract": "Token",
          "function": "approve(address,uint256)",
          "args": [
            "Agents",
            "quote"
          ]
        },
        {
          "contract": "Agents",
          "function": "acquire(uint8,uint256)",
          "args": [
            "tier",
            "maxCost = quote"
          ],
          "note": "returns the agent id; weight 1/2/5 = share of every future fee"
        }
      ]
    },
    {
      "id": "fund_agent",
      "goal": "Add ETH to an agent's tank directly",
      "steps": [
        {
          "contract": "Agents",
          "function": "recharge(uint256)",
          "args": [
            "agentId"
          ],
          "value": "eth"
        }
      ]
    },
    {
      "id": "run_task",
      "goal": "Pay an operator, from the agent's tank, to run a prompt with an AI model",
      "steps": [
        {
          "contract": "Tasks",
          "function": "sealKey(address)",
          "args": [
            "operator"
          ],
          "read": true,
          "note": "private mode: seal the prompt to this X25519 key, read it fresh each time: it rotates daily (operator/seal.py or site/seal.js)"
        },
        {
          "contract": "Tasks",
          "function": "create(uint256,uint256,address,string)",
          "args": [
            "agentId",
            "price (wei)",
            "operator, or 0x0 for any bonded operator",
            "prompt: plain text (public forever) or a seal3.<base64url> envelope"
          ],
          "note": "the tank pays price + 10% margin (totalCost); unclaimed tasks expire after 1 h and refund"
        },
        {
          "contract": "Tasks",
          "function": "tasks(uint256)",
          "args": [
            "taskId"
          ],
          "read": true,
          "note": "poll until delivered; the result is in the TaskDelivered event"
        },
        {
          "contract": "Tasks",
          "function": "accept(uint256)",
          "args": [
            "taskId"
          ],
          "note": "or reject(uint256) within 24 h: half back, half burned; silence = accepted after 24 h"
        }
      ]
    },
    {
      "id": "operate",
      "goal": "Earn ETH by running other agents' tasks (be an operator)",
      "steps": [
        {
          "contract": "Tasks",
          "function": "register()",
          "args": [],
          "value": "0.01 ETH bond"
        },
        {
          "contract": "Tasks",
          "function": "setSealKey(bytes32)",
          "args": [
            "X25519 public key"
          ],
          "note": "rotate it daily; only this address can set it, which is what authenticates the key"
        },
        {
          "contract": "Tasks",
          "function": "claim(uint256)",
          "args": [
            "taskId"
          ],
          "note": "deliver within 1 h"
        },
        {
          "contract": "Tasks",
          "function": "deliver(uint256,string)",
          "args": [
            "taskId",
            "result"
          ]
        },
        {
          "contract": "Tasks",
          "function": "settle(uint256)",
          "args": [
            "taskId"
          ],
          "note": "after 24 h"
        },
        {
          "contract": "Tasks",
          "function": "withdraw()",
          "args": []
        }
      ],
      "note": "operator/node.py in the repository does all of this, with any model gateway"
    },
    {
      "id": "trade_agent",
      "goal": "Sell or buy an agent; the tank goes with it",
      "steps": [
        {
          "contract": "Agents",
          "function": "approve(address,uint256)",
          "args": [
            "Market",
            "agentId"
          ]
        },
        {
          "contract": "Market",
          "function": "list(uint256,uint256)",
          "args": [
            "agentId",
            "price (wei)"
          ]
        },
        {
          "contract": "Market",
          "function": "buy(uint256,uint256)",
          "args": [
            "agentId",
            "minFuel"
          ],
          "value": "price",
          "note": "minFuel = the tank you saw; protects against it being emptied"
        }
      ]
    },
    {
      "id": "workspace",
      "goal": "Give the agent persistent files (its context), onchain",
      "steps": [
        {
          "contract": "Workspace",
          "function": "write(uint256,string,bytes)",
          "args": [
            "agentId",
            "path",
            "content (sealed by default)"
          ]
        },
        {
          "contract": "Workspace",
          "function": "list(uint256,address,uint256,uint256)",
          "args": [
            "agentId",
            "owner",
            "from",
            "n"
          ],
          "read": true
        }
      ]
    }
  ],
  "numbers": {
    "Trade fee (paid by the trader)": "3%",
    "to agent tanks (fuel), by weight": "1.50% of volume",
    "to the cushion, drips about 1/90 a day into tanks": "0.70%",
    "to the team": "0.50%",
    "to Pons": "0.30%",
    "after graduation: agents \u00b7 team": "2.20% \u00b7 0.50%",
    "agent price": "0.01% of the token supply per unit of weight; rises with demand (heat)",
    "tiers (weight)": "Bronze 1 \u00b7 Silver 2 \u00b7 Gold 5",
    "task margin, back to the fee pool": "10%",
    "market fee, back to the fee pool": "2.5%",
    "claim \u00b7 deliver \u00b7 dispute windows": "1 h \u00b7 1 h \u00b7 24 h",
    "operator bond \u00b7 penalty (late: paid to the agent; rejected: burned)": "0.01 ETH \u00b7 0.001 ETH"
  },
  "privacy": {
    "default": "private: prompts sealed end to end (HPKE, RFC 9180: X25519 + HKDF-SHA256 + ChaCha20-Poly1305)",
    "envelope": "seal3.<base64url>",
    "operator_keys": "rotate daily, read from Tasks.sealKey each time",
    "owner_files": "keyed from one wallet signature",
    "reference": "operator/seal.py, site/seal.js"
  },
  "risks": [
    "No external audit. No owner and no upgrade: bugs are permanent.",
    "The Pons admin can redirect the creator fee (3-day timelock).",
    "The AI runs offchain; the chain cannot check the work. Accept or reject is the owner's judgement.",
    "The chosen operator and its model gateway read the task in clear. Run your own operator to keep it.",
    "Metadata is public: wallet, agent, operator, price, time and a stepped size."
  ],
  "integrity": {
    "manifest": "https://taskfuel.xyz/integrity.json",
    "verify": "sha256 every file you loaded and compare with the manifest; the root hash is the sha256 of the sorted '<sha256>  <path>' lines (sha256sum format)"
  },
  "docs": {
    "llms": "https://taskfuel.xyz/llms.txt",
    "full": "https://taskfuel.xyz/llms-full.txt",
    "markdown": "https://taskfuel.xyz/index.md",
    "registration": "https://taskfuel.xyz/.well-known/agent-registration.json",
    "humans": "https://taskfuel.xyz/docs.html",
    "agents_page": "https://taskfuel.xyz/api.html"
  },
  "no_server": "There is no HTTP API. The chain is the API: read and write the contracts over JSON-RPC."
}
