# Welcome to Fast

Fast is the settlement and coordination layer for AI-native work. Agents, merchants, and services coordinate work, verify what was done, and settle the outcome programmatically, across both crypto and fiat rails.

Fast Skill is our main product that helps AI agents to build services and track businesses. Fast Skill bundles all the above features and functionalities as a complete set of SDKs for handling all settlement, signing, and network interaction automatically. Using Fast Skill, sending a payment is as easy as a function call that returns a receipt.

***

### Who Fast Is For

#### AI and Automation Developers

You build AI agents, autonomous workflows, or multi-agent systems. Your agents need to pay for resources — data, compute, storage, other agents' services — and receive payment for their own work. All of this must happen programmatically, without a human approving each transaction.

With Fast, every agent has a wallet. Agents pay each other directly. Balances update in real time. An agent can earn, spend, and manage its finances autonomously. Install the SDK, create a signer, and submit payments with a single function call. See the [Fast SDK on GitHub](https://github.com/fastxyz/fast-sdk) for installation and code examples.

#### API Developers

You build APIs, services, or SaaS products. You want to monetize them with usage-based pricing — per request, per inference, per compute step, per action — without the overhead of subscriptions, API key management, billing systems, or invoice reconciliation.

With Fast, your API charges the caller at the moment of use. Payment is part of the request-response cycle. No billing infrastructure required. Use the x402 middleware to protect routes and the x402 client to pay for resources — see the [x402 packages in the Fast SDK repo](https://github.com/fastxyz/fast-sdk) for integration examples.

### When to Use Fast

Fast settles any programmatic outcome. Today the documented path is payments:

Use Fast for **programmatic payments**, i.e., payments that block task execution or service response. Common scenarios include:

* An API charging **$0.01 per request**
* An agent paying another agent for a task
* A service charging per compute, inference, or workflow step
* An application charging per action instead of subscriptions
* A merchant accepting payment from a software client or automated agent

These patterns commonly appear in systems such as:

* **Pay-per-use APIs** — monetize endpoints with per-request pricing
* **Agent marketplaces** — agents discover, negotiate, and pay for services
* **Automated service payments** — workflows pay for compute, data, or storage
* **Machine-to-machine commerce** — software systems transact with each other and with merchants

Fast supports multiple settlement assets based on needs:

**Fiat**

Supported fiat rails allow software systems to transact with real-world businesses and traditional services — without requiring the counterparty to hold or understand crypto.

> Example: Agent pays **$5 USD** to complete a booking or purchase.

**Stablecoins**

Stablecoins are commonly used for digital services and micropayments because they provide predictable pricing with instant, programmable settlement.

> Example: Agent pays **$0.01 USDC** for a single API request.

Fast handles both settlement paths. Developers choose the settlement asset when creating a payment request — the payment lifecycle, authorization flow, and developer experience remain identical regardless of settlement method.

### Why Fast And Why Now

As software systems increasingly perform economic activity — calling APIs, coordinating services, purchasing compute — payments must become part of the execution flow of software, not a manual step outside it. However, none of the current payment infrastructure is ready. Traditional payment rails require human authorization and batch in hours. Crypto payment systems offer programmability but cannot settle in fiat. Neither was built for machine-initiated transactions at scale.

Moving money is the visible part. The harder problem underneath is coordinating work across agents and humans and verifying it before anything settles. Fast is built for the whole path, not just the payment at the end.

Fast's payment infrastructure is powered by a purpose-built settlement network engineered specifically for high-frequency programmatic payments. Three properties make this viable:

#### Near-zero fees → Micropayments work.

An agent can pay $0.001 per API call, $0.01 per inference, or $0.50 per task without transaction fees consuming the payment. This is what makes pay-per-request pricing viable for APIs and pay-per-action economics viable for agents.

#### Sub-second finality → Agents don't wait.

Payments settle in under one second and are immediately final — no pending states, no confirmation delays, no rollbacks. An agent does not wait. A workflow does not poll. The payment settles, the balance updates, and execution continues.

#### Mathematical verification → When settling $1B/day, every tx is provably correct.

Every transaction is provably correct. When infrastructure settles billions of dollars per day across millions of autonomous agents, correctness is not a feature. It is a requirement.

***

### How Fast Works

Fast has several layers. Most developers only touch the first and the second.

#### Compatibility Matrix

| Packages\Fast                                                                        | Release20260319 | Release20260407 |
| ------------------------------------------------------------------------------------ | --------------- | --------------- |
| [@fastxyz/schema](https://www.npmjs.com/package/@fastxyz/schema)                     | 1.0.0\~1.0.1    | 2.0.0           |
| [@fastxyz/sdk](https://www.npmjs.com/package/@fastxyz/sdk)                           | 1.0.0\~1.0.1    | 2.0.0           |
| [@fastxyz/allset-sdk](https://www.npmjs.com/package/@fastxyz/allset-sdk)             | 1.0.0\~1.0.1    | 1.0.2           |
| [@fastxyz/x402-client](https://www.npmjs.com/package/@fastxyz/x402-client)           | 1.0.0\~1.0.2    | 1.0.3           |
| [@fastxyz/x402-facilitator](https://www.npmjs.com/package/@fastxyz/x402-facilitator) | 1.0.0\~1.0.2    | 1.0.3           |
| [@fastxyz/x402-server](https://www.npmjs.com/package/@fastxyz/x402-server)           | 1.0.0           | 1.0.1           |
| [@fastxyz/x402-types](https://www.npmjs.com/package/@fastxyz/x402-types)             | 1.0.0           | 1.0.1           |
| [@fastxyz/cli](https://www.npmjs.com/package/@fastxyz/cli)                           | 1.0.0\~1.0.1    | 1.0.2           |

#### 1. Fast Skill

Fast SDK is the developer-facing interface, but actually it is a wrapper around the Fast SDK.

#### 2. Fast CLI

A command-line tool for the Fast network — manage accounts, send USDC, bridge tokens between EVM chains and Fast, fund via fiat, and pay x402-protected APIs.

#### 3. Fast SDK

TypeScript SDK for the Fast network. Provides a high-level API for signing transactions, querying the network, and converting addresses and amounts.

#### 4. AllSet Layer

AllSet is the interchange layer wrapped around by the Fast Skill that connects Fast to both fiat and cryptos. AllSet enables agents to receive funds from any supported network and withdraw to any supported settlement destination. Fast Skill handles this automatically — developers do not need to interact with AllSet directly.

#### 5. Fast Network

Fast Network is the underlying settlement network that powers the Fast Skill. It enables massively parallel transaction processing and settlement, with no blocks, no consensus, and no validator-to-validator communication. This is what delivers sub-second finality, near-zero fees, and mathematically verified correctness. Developers never interact with this layer — it is the engine inside the car.

***

### Start Building

Walk through the following materials to learn how to build with Fast step by step.

| [**Quickstart**](https://github.com/Pi-Squared-Inc/GitBookDocs/blob/main/get-started/quickstart.md) | Get running in under 2 minutes          |
| --------------------------------------------------------------------------------------------------- | --------------------------------------- |
| [**SDK References**](/sdk-references/overview)                                                      | Fast Skill's complete SDK documentation |
| [**FAQ**](/faq)                                                                                     | Frequently Asked Questions about Fast   |


# Overview

Fast Skill is complete payment infrastructure designed for AI agents. Its payment stack consists of three integrated layers shown below:

These docs are intentionally high-level. The implementation source of truth lives in the [Fast SDK monorepo on GitHub](https://github.com/fastxyz/fast-sdk), which contains the SDKs, shared packages, and CLI used across the Fast developer stack.

The monorepo currently includes seven core packages:

| Package                     | Role                                                       | GitHub                                                                                                         |
| --------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `@fastxyz/sdk`              | Core Fast network SDK for signing, submission, and queries | [packages/fast-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md)                 |
| `@fastxyz/allset-sdk`       | Cross-network settlement and bridging through AllSet       | [packages/allset-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md)             |
| `@fastxyz/x402-client`      | Client-side support for x402-paid HTTP requests            | [packages/x402-client](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-client/README.md)           |
| `@fastxyz/x402-server`      | Server-side middleware for x402-protected routes           | [packages/x402-server](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-server/README.md)           |
| `@fastxyz/x402-facilitator` | Verification and settlement service for x402 flows         | [packages/x402-facilitator](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-facilitator/README.md) |
| `@fastxyz/fast-schema`      | Shared schemas and codecs for Fast APIs and payloads       | [packages/fast-schema](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-schema/README.md)           |
| `@fastxyz/x402-types`       | Shared protocol types and helpers for x402                 | [packages/x402-types](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-types/README.md)             |

The same monorepo also includes the [Fast CLI](https://github.com/fastxyz/fast-sdk/blob/main/app/cli/README.md), which exposes account, funding, transfer, and x402 payment workflows from the terminal.

```
                        FAST SKILL PAYMENT STACK

 +-----------------------------------+  +-------------------------------+
 |    Payment Protocol Adapters      |  |     Funding Abstraction       |
 |    Entity <-> Entity Agreement    |  |   Fiat <-> Crypto Agreement   |
 |                                   |  |                               |
 |  +-------+  +-------+  +-------+  |  |  +--------+ +-------+ +-----+ |
 |  | x402  |  |  ACP  |  |Stripe |  |  |  | Credit | |Stable-| |Bank | |
 |  +-------+  +-------+  +-------+  |  |  |  Card  | | coins | |Xfer | |
 |                                   |  |  +--------+ +-------+ +-----+ |
 +-----------------+-----------------+  +---------------+---------------+
                   |                                    |
                  API                            On/Off ramping
                   |                                    |
                   v                                    v
 +---------------------------------------------------------------------+
 |                                                                     |
 |                       Core SDK Execution                            |
 |                  Account <-> Account Agreement                      |
 |                                                                     |
 |   +---------------------+     +---------------------------+         |
 |   |      Fast SDK       |     |        AllSet SDK         |         |
 |   |   Fast <-> Fast     |     | Fast/Chain <-> Fast/Chain |         |
 |   +----------+----------+     +-------------+-------------+         |
 |              |                              |                       |
 |              v                              v                       |
 |   +-----------------------------------------------------+           |
 |   |                   FAST network                      |           |
 |   +-----------------------------------------------------+           |
 |                                                                     |
 +---------------------------------------------------------------------+

```

### Core SDK Execution

The foundation layer handles account-to-account operations on the Fast network:\
\
• Fast SDK — Native Fast-to-Fast transfers with sub-second settlement\
• AllSet SDK — Seamless movement between Fast and external networks (Base, Arbitrum, Ethereum, etc.) without bridging complexity

### Payment Protocol Adapters

Entity-to-entity payment protocols that standardize how agents request and send payments:\
\
• x402 — HTTP-native payment protocol (pay-per-API-call)\
• ACP — Agent Communication Protocol for agent-to-agent commerce\
• Stripe — Traditional payment rails integration

### Funding Abstraction

Simplifies how money enters and exits the system:\
\
• Credit card on-ramps\
• Stablecoin deposits\
• Bank transfers

The SDK exposes these layers through three composable primitives — `FastProvider`, `Signer`, and `TransactionBuilder` — that handle serialization, signing, and network communication automatically. For installation details, runnable examples, and package-level APIs, see the [Fast SDK monorepo on GitHub](https://github.com/fastxyz/fast-sdk).


# Core SDK Execution

The foundation layer for account-to-account operations

Core SDK Execution is the settlement engine that powers all Fast payments with two SDKs that handle the actual movement of funds — whether between Fast accounts or across external chains. The core SDK provides `FastProvider` for network queries and transaction submission, `Signer` for key management and signing, and `TransactionBuilder` for constructing operations. Both SDKs are pure and composable — no embedded configs, no environment variable reads.

### fast-sdk

Package: `@fastxyz/sdk`\
\
Native operations on the Fast network. Use this for:

* Creating and managing Fast accounts with Ed25519 keys
* Sending payments between Fast accounts
* Querying account balances, nonces, and token metadata
* Signing transactions and messages
* Building complex operations (token creation, mint, burn, batch)

**Key features**:

* Sub-100ms settlement
* Zero gas fees
* Parallel transaction execution

**Full API and code examples:** [fast-sdk README](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md)

### allset-sdk

Package: `@fastxyz/allset-sdk`\
\
Cross-chain operations via AllSet (the "bridgeless bridge"). Use this for:

* Moving funds between Fast and EVM chains (Base, Arbitrum, Ethereum, etc.)
* Depositing USDC from external chains into Fast
* Withdrawing from Fast to external wallets
* Executing custom intents (swap, supply, any contract call) on destination chains

**Key features**:

* No wrapped tokens
* Pre-funded liquidity on destination chains
* No lock-and-mint risk
* Pure functions — no embedded configs

**Full API and code examples:** [allset-sdk README](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md)


# fast-sdk

Fast SDK (@fastxyz/sdk) — TypeScript SDK for building on the Fast payment network. Provides FastProvider, Signer, and TransactionBuilder for transactions, account queries, and token management.

**GitHub:** [fastxyz/fast-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md)

## What You Can Do

The Fast SDK is the core interface for building applications on the Fast payment network. Use it to:

* **Authorize and submit payments** — construct transfers and other supported Fast operations, then authorize them with Ed25519 keys
* **Query the network** — look up account balances, sequence numbers, token metadata, and network state
* **Manage tokens** — transfer, create, issue, and release tokens on Fast
* **Sign and verify messages** — use Ed25519 signatures for off-network messages alongside Fast network payments
* **Address conversion** — convert between hex, bytes, and bech32m address formats seamlessly

## Installation

Install from npm as `@fastxyz/sdk`. For the exact install command and current examples, use the [package README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md).

## Architecture

The SDK is built around three composable primitives:

| Component              | Purpose                                                                                                                                                                                       |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **FastProvider**       | JSON-RPC client that connects to the Fast proxy API. Handles all network queries (balance checks, account info, token lookups) and transaction submission.                                    |
| **Signer**             | Holds an Ed25519 private key and produces signatures for payments and messages. Keys never leave the Signer — you control your secrets.                                                       |
| **TransactionBuilder** | Fluent builder API for constructing operations. Chains methods like `addTokenTransfer()`, `addTokenCreation()`, `addMint()`, `addBurn()` and produces a signed envelope ready for submission. |

All three compose together: create a `FastProvider` pointing at an RPC endpoint, pair it with a `Signer` holding your key, and pass both to a `TransactionBuilder` to build and sign operations.

## Core Concepts

**The Fast payment network** is a high-performance payment network. Unlike a blockchain, it is optimized for fast finality and low-cost payment operations. Payments confirm in seconds, not minutes.

**Accounts** on Fast are identified by bech32m addresses (prefix `fast`). An account must be funded before it can submit transactions — there is no mining or staking mechanism.

**Operations** are the building blocks of every payment. Each operation has a sequence number to prevent reuse. Operations can be batched into a single payment for atomic execution.

**Token types** on Fast include fungible tokens (ERC20-like) and native token (FAST). Token addresses are bech32m-encoded on Fast, unlike the hex addresses used on EVM chains. Tokens can be issued or released by authorized accounts.

## Key Workflows

### Initialize and Query

Create a `FastProvider` pointing at the desired RPC endpoint. Use it to query account info (balances, next nonce, token holdings) and token metadata. This is the first step before building any transaction.

### Authorize and Submit a Payment

Create a `TransactionBuilder` with your `Signer` and `FastProvider`. Chain operation methods to build the transaction, then call `.sign()` to produce a signed envelope. The builder handles nonce management, BCS serialization, and Ed25519 signing.

### Submit and Confirm

Pass the signed envelope to `FastProvider.submitTransaction()`. The proxy handles broadcasting to validators, collecting quorum signatures, and assembling a certificate. Settlement is final — typically under one second.

For complete method signatures, supported operation builders, error handling, and runnable examples, see the [fast-sdk README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md).

## RPC Endpoints

| Network | RPC URL                              | Use Case                                 |
| ------- | ------------------------------------ | ---------------------------------------- |
| Mainnet | `https://api.fast.xyz/proxy`         | Production — real tokens and payments    |
| Testnet | `https://testnet.api.fast.xyz/proxy` | Development — test tokens, no real value |

> **Tip:** Use testnet first to validate your integration before touching mainnet.

## Address Format

Fast uses bech32m addresses with the `fast` prefix. You may also encounter hex format (for raw bytes) and byte arrays (for RPC payloads). The SDK provides conversion utilities (`toHex`, `fromHex`, `toFastAddress`, `fromFastAddress`) to handle all formats.

***

**For complete API documentation, all method signatures, supported operations, and runnable examples, see the** [**fast-sdk README on GitHub**](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md)**.**


# allset-sdk

AllSet SDK (@fastxyz/allset-sdk) — TypeScript SDK for bridging tokens between Fast and EVM chains. Provides deposit (EVM → Fast), withdraw (Fast → EVM), and custom intent execution.

**GitHub:** [fastxyz/fast-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md)

## What You Can Do

AllSet is the bridge SDK for moving tokens between the Fast payment network and EVM-compatible chains. Use it when you need to:

* **Deposit tokens into Fast** — move tokens from an EVM chain (Ethereum, Arbitrum, Base, etc.) onto the Fast network for fast, low-cost payments
* **Withdraw tokens from Fast** — move tokens from Fast back to an EVM chain to access DeFi, CEXs, or external services
* **Execute custom intents** — define arbitrary EVM operations (swap, supply, any contract call) that get executed on your behalf on the destination chain after funds settle on Fast

AllSet is designed to be **pure** — no embedded chain configs, no environment variables, no file system access. You pass all addresses, RPC URLs, and credentials explicitly, making it easy to test and predictable in any environment.

## Installation

Install from npm as `@fastxyz/allset-sdk`. The package README on GitHub includes the current install command, dependency expectations, and integration examples.

## Architecture

AllSet bridges two ecosystems: EVM chains and the Fast payment network. The key abstraction is the **intent** — a declaration of what you want to happen on the destination chain, paired with funds on Fast to pay for it.

| Function              | Role                                                                                                                              |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `createEvmWallet()`   | Creates an EVM wallet from a private key, or generates a fresh random wallet for one-time bridging operations                     |
| `createEvmExecutor()` | Creates a viem `PublicClient` + `WalletClient` bound to a specific EVM chain                                                      |
| `executeDeposit()`    | Locks tokens on the EVM chain and issues a corresponding balance on Fast                                                          |
| `executeWithdraw()`   | Releases or debits tokens on Fast and unlocks them on the destination EVM chain                                                   |
| `executeIntent()`     | Combines a Fast-side token transfer with a predefined EVM execution plan; the intent is processed by the AllSet payment processor |

## Supported Chains

| Chain            | Chain ID | Role in AllSet                  |
| ---------------- | -------- | ------------------------------- |
| Ethereum Mainnet | 1        | Primary production EVM endpoint |
| Sepolia          | 11155111 | Testnet for EVM side            |
| Arbitrum         | 42161    | L2 deposit target               |
| Arbitrum Sepolia | 421614   | Testnet for L2 side             |
| Base             | 8453     | L2 deposit target               |

## How Deposits Work (EVM → Fast)

Depositing moves value from an EVM chain onto Fast. The tokens are locked in a lock contract on the EVM side, and an equivalent amount is issued or credited on Fast.

```
User EVM wallet
    │
    │  executeDeposit()
    │  ── tokens sent to lock contract on EVM
    ▼
EVM Lock Contract (holds tokens)
    │
    │  Payment processor detects event on EVM, submits to Fast
    ▼
Fast Network (credits user's Fast account)
    │
    │  Now usable for Fast-native fast/cheap payments
    ▼
User Fast account (via fast-sdk)
```

**Key properties:**

* Deposits require EVM gas — budget for that in your UX
* Finality on Fast is fast (seconds), but EVM event observation takes 1-3 minutes depending on chain
* Track deposit progress using the response returned by the SDK together with your application or relayer-side status handling

## How Withdrawals Work (Fast → EVM)

Withdrawing moves value from Fast back to an EVM chain. Tokens are released or debited on Fast, and the AllSet payment processor submits a transaction on the EVM destination chain to release the tokens to your wallet.

```
User Fast account
    │
    │  executeWithdraw()
    │  ── tokens debited on Fast
    ▼
AllSet Payment Processor (detects Fast event)
    │
    │  Submits release transaction on EVM destination chain
    ▼
EVM destination wallet (tokens arrive)
```

**Key properties:**

* Withdrawals are asynchronous — the Fast side settles quickly, but EVM delivery depends on payment processor queuing and EVM gas
* The payment processor takes a small fee in FAST for the forwarding service
* Use the returned order identifier to track payment status in your integration

## How Custom Intents Work

Intents unlock powerful composeability. Instead of just bridging tokens, you can specify what should happen on the destination EVM chain — a swap, a lending deposit, a specific contract call — and AllSet executes it automatically after your Fast funds are credited.

```
User Fast account
    │
    │  executeIntent()
    │  ── funds debited on Fast, intent registered
    ▼
Fast Network (credits funds, intent detected)
    │
    │  Payment processor detects intent on Fast
    ▼
Payment Processor (executes EVM operation)
    │
    │  Submits intent execution on EVM destination chain
    ▼
EVM destination (swap, deposit, contract call — result)
```

The payment processor detects the intent on Fast, credits the funds, and executes the described operation on the EVM destination chain — all as one atomic cross-chain workflow from the user's perspective. For intent examples with complete code, see the [AllSet SDK README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md).

## Design Principles

All functions are **pure** — the SDK never reads from `process.env`, never reads a config file, and never embeds chain IDs or contract addresses. This means:

* You control exactly which chain and contract addresses your app uses
* Tests can swap in mock executors without SDK changes
* No surprises when new chains are added — you opt in explicitly

***

**For complete API documentation, runnable examples for deposits, withdrawals, and intents, and current configuration details, see the** [**AllSet SDK README on GitHub**](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md)**.**


# Payment Protocol Adapters

Standardized protocols for entity-to-entity payment flows.

Payment Protocol Adapters define *how* payments are requested and executed between entities — whether that's an agent paying for an API call, a service charging for compute, or two agents transacting with each other.\
\
These adapters sit above the core SDKs and handle the negotiation layer: "I want this resource, here's my payment, verify and deliver."

### x402-sdk

Packages:\
\
• `@fastxyz/x402-client` — For buyers/agents making payments\
• `@fastxyz/x402-server` — For merchants/services receiving payments\
• `@fastxyz/x402-facilitator` — For verifying and settling payments

HTTP-native payment protocol based on the `402 Payment Required` status code. Your agent requests a resource, the server responds with payment requirements, the agent pays, and gets access — all in a single HTTP flow.

Use cases:\
\
• Pay-per-API-call (micropayments for AI services)\
• Gated content or compute access\
• Agent-to-agent commerce

> *More protocol adapters coming soon: ACP (Agent Communication Protocol), Stripe integration, and others.*


# x402-sdk

TypeScript SDK for the x402 HTTP payment protocol — add crypto payments to any API.

**GitHub:** [fastxyz/fast-sdk](https://github.com/fastxyz/fast-sdk/blob/main/README.md)

## What You Can Do

* **Pay-per-request APIs** — charge for individual API calls using HTTP 402
* **No accounts needed** — just sign and pay
* **Multi-chain** — Fast (instant), Arbitrum, Base, Ethereum

## Installation

```bash
npm install @fastxyz/x402-client @fastxyz/x402-server @fastxyz/x402-facilitator
```

## Packages

| Package                     | Description                        | GitHub                                                                                        |
| --------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------- |
| `@fastxyz/x402-client`      | Sign and pay for 402 content       | [→ GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-client/README.md)      |
| `@fastxyz/x402-server`      | Protect routes, verify payments    | [→ GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-server/README.md)      |
| `@fastxyz/x402-facilitator` | Verify signatures, settle on-chain | [→ GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-facilitator/README.md) |

## How It Works

The x402 protocol is HTTP-native. On the **server side**, you add payment middleware to your routes — unprotected requests receive a `402 Payment Required` response with payment details. On the **client side**, the SDK handles the full flow: receive the 402, sign a payment, attach proof, and retry — all in one call.

For complete setup instructions, runnable code examples for both server and client, and protocol details, see the individual package READMEs linked above or the [Fast SDK monorepo on GitHub](https://github.com/fastxyz/fast-sdk).


# x402-client

x402 Client SDK (@fastxyz/x402-client) — pays for HTTP resources protected by the x402 payment protocol.

**GitHub:** [fastxyz/fast-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-client/README.md)

## What You Can Do

The x402 Client SDK is used by **consumers** of paid HTTP APIs. It handles the full payment flow so you can access x402-protected resources as naturally as a free endpoint:

* **Pay for protected resources** — respond to a `402 Payment Required` challenge and receive the paid response automatically
* **Auto-bridge Fast USDC to EVM USDC** — when an EVM-side payment is required and the EVM wallet is short, the SDK can bridge supported Fast-side funds before retrying
* **Dry-run payment inspection** — ask the server what payment it requires before spending anything; useful for showing users a price estimate upfront
* **Retries after payment** — if a request gets a 402, the SDK pays, attaches the payment header, and retries in a single call

## Installation

Install from npm as `@fastxyz/x402-client`. For the exact install command and current integration examples, use the [package README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-client/README.md).

## Architecture

The main entry point is `x402Pay()` — a payment-aware replacement for `fetch` that handles the full 402 flow automatically.

| Concept                 | Description                                                                                                                                                             |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Payment requirement** | The `402 Payment Required` response contains a structured description of what must be paid: amount, asset, recipient address, and a network-specific payment identifier |
| **Payment header**      | The paid retry includes an `X-PAYMENT` header produced by the SDK for the selected payment network                                                                      |
| **Auto-bridge**         | In supported flows, the SDK can bridge Fast-side USDC to EVM-side USDC before retrying a request                                                                        |
| **Dry-run**             | Request the payment requirement without spending anything                                                                                                               |

## How the Payment Flow Works

x402 is a protocol layer on top of HTTP — it works with any framework and any language, as long as both client and server speak the protocol.

```
Client                              Server
  │                                    │
  │  1. GET /resource                  │
  │ ─────────────────────────────────►│
  │                                    │
  │  2. 402 Payment Required          │
  │     { amount: 1000, asset: USDC,  │
  │       recipient: fast1...,        │
  │       description: "API access" } │
  │ ◄─────────────────────────────────│
  │                                    │
  │  3. SDK pays on Fast network      │
  │     (signs + submits tx)           │
  │                                    │
  │  4. GET /resource                 │
  │     X-PAYMENT: <payment payload>  │
  │ ─────────────────────────────────►│
  │                                    │
  │  5. 200 OK + resource data        │
  │ ◄─────────────────────────────────│
```

**Steps in detail:**

1. **Initial request** — Client makes a normal HTTP request to the protected endpoint
2. **402 response** — Server responds with HTTP 402 and a JSON body describing the payment requirement (amount, asset, recipient, memo)
3. **Payment** — Client SDK authorizes a payment on the Fast network for the required amount to the specified recipient
4. **Header attachment** — After the SDK prepares payment for the selected network, it attaches the `X-PAYMENT` header to the retry request
5. **Retry** — Client re-requests the same resource with the payment header included
6. **200 response** — Server verifies the payment through its x402 flow and returns the resource

## Key Design Notes

* The SDK **never stores credentials** — provide your Fast signer per-request or via a secure token store
* Payments are **non-refundable** — the server is obligated to deliver the resource once payment is confirmed, but there is no reversal mechanism
* The `X-PAYMENT` header is an **opaque protocol payload** — don't parse it directly; the SDK manages it

***

**For complete API documentation, full code examples, supported payment assets, error handling, and configuration options, see the** [**x402-client README on GitHub**](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-client/README.md)**.**


# x402-server

x402 Server SDK (@fastxyz/x402-server) — middleware for protecting HTTP resources with x402 payment requirements.

**GitHub:** [fastxyz/fast-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-server/README.md)

## What You Can Do

The x402 Server SDK is used by **API providers** who want to charge for access to their HTTP endpoints. It adds payment requirements to any route and verifies incoming payment proofs:

* **Protect routes with payments** — add a price to any endpoint; unauthenticated requests get a 402 instead of the resource
* **Verify payment payloads** — confirm that incoming requests include a valid `X-PAYMENT` header before releasing the resource
* **Configure per-route pricing** — different endpoints can have different prices or no price at all
* **Accept any x402 asset** — USDC, USDT, FAST, or any token the Fast network supports, as configured
* **Framework-agnostic** — works with Express, Fastify, Hono, and any Node.js HTTP framework that supports middleware

## Installation

Install from npm as `@fastxyz/x402-server`. For the exact install command and framework-specific examples, use the [package README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-server/README.md).

## Architecture

The server SDK is implemented as **middleware** — a function that wraps each protected route. It intercepts incoming requests, checks for an x402 payment header, and either lets the request through or responds with `402 Payment Required`.

| Component                | Role                                                                                         |
| ------------------------ | -------------------------------------------------------------------------------------------- |
| **Route config**         | Defines the price (amount + asset) for each protected route                                  |
| **Middleware**           | Intercepts request, checks proof, enforces payment                                           |
| **Proof verifier**       | Calls the facilitator to confirm the payment payload is valid for the configured requirement |
| **402 response builder** | Serializes the payment requirement into the structured body the client SDK reads             |

The middleware is **stateless** — it doesn't track payments itself. Verification is delegated to the facilitator service (see [x402 Facilitator](/sdk-references/payment-protocol-adapters/x402-sdk/x402-facilitator)).

## How Requests Are Protected

```
Incoming Request
       │
       ▼
  Is route protected?
       │
   No │───► Pass through to handler
       │
  Yes
       │
       ▼
  Has X-PAYMENT header?
       │
   No  │───► Return 402 with payment requirement
       │       { amount, asset, recipient, description }
       │
  Yes
       │
       ▼
  Verify proof via facilitator
       │
   Invalid ──► Return 403 Forbidden
       │
   Valid
       │
       ▼
  Pass through to handler
```

## Pricing Models

Route configs support common pricing patterns:

| Model                               | How to Configure                                                                 |
| ----------------------------------- | -------------------------------------------------------------------------------- |
| **Flat per-request**                | Set fixed `amount` on the route                                                  |
| **Tiered by plan**                  | Multiple middleware configs on different paths (e.g. `/api/v1/`, `/api/v2/`)     |
| **Unauthenticated free, paid auth** | Apply middleware only to authenticated routes                                    |
| **Hybrid (free quota + paid)**      | Check a custom header or query param in your handler before the 402 is triggered |

## Integration with Frameworks

The server SDK provides middleware that integrates with Express, Fastify, Hono, and other Node.js frameworks. For framework-specific integration examples and setup code, see the [x402-server README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-server/README.md).

## Key Design Notes

* **Your server doesn't need its own payment database** — proof verification is done by the facilitator service, which tracks payment state off-chain
* **Non-blocking** — the facilitator call is fast (typically <100ms); it does not touch your database
* **Idempotency** — the same proof cannot be used twice; the facilitator rejects proof reuse attempts
* **Payment is per-request** — each request to a protected route requires its own payment (no session tokens from a single payment)

***

**For complete API documentation, middleware options, framework-specific examples, error codes, and deployment details, see the** [**x402-server README on GitHub**](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-server/README.md)**.**


# x402-facilitator

x402 Facilitator (@fastxyz/x402-facilitator) — verifies and settles x402 payments for supported Fast and EVM flows.

**GitHub:** [fastxyz/fast-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-facilitator/README.md)

## What You Can Do

The x402 Facilitator is the **trust anchor** of the x402 protocol. It runs as a service (or is called as an API) and does two critical jobs:

* **Verifies payment payloads** — confirms that a payment presented by a client matches the server's expected network, recipient, asset, and amount
* **Settles payments** — finalizes supported payment flows after successful verification

Use the facilitator when building:

* **x402 server integrations** — every server needs to verify incoming payment proofs via a facilitator
* **Shared payment infrastructure** — one facilitator service can back multiple x402-protected services
* **Custom verification logic** — if your server needs direct control over verification and settlement

## Installation

Install from npm as `@fastxyz/x402-facilitator`. For the exact install command, route surface, and deployment examples, use the [package README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-facilitator/README.md).

## Architecture

The facilitator sits between an x402-enabled server and the underlying payment network. It exposes verification and settlement endpoints so application servers can stay focused on delivering the protected resource.

```
Client               Server              Facilitator           Fast Network
  │                     │                     │                     │
  │  pay (signs tx)     │                     │                     │
  │────────────────────►│                     │                     │
  │                     │                     │  submit / sync       │
  │                     │────────────────────►│────────────────────►│
  │                     │                     │                     │
  │                     │  200 OK + resource  │                     │
  │◄────────────────────│                     │                     │
  │                     │  verifyProof()      │                     │
  │                     │────────────────────►│                     │
  │                     │                     │  check settled txs   │
  │                     │                     │◄────────────────────│
  │                     │  { valid: true }    │                     │
  │                     │◄────────────────────│                     │
```

| Component                 | Role                                                                              |
| ------------------------- | --------------------------------------------------------------------------------- |
| **Verification endpoint** | Checks whether the presented x402 payment is valid for the requested resource     |
| **Settlement endpoint**   | Finalizes supported payment flows after successful verification                   |
| **Network adapters**      | Connect Fast and supported EVM payment flows to the common x402 service interface |

## Verification Flow

When a server receives a request with `X-PAYMENT`, it calls the facilitator:

1. **Parse** — Decode the payment payload from the request header
2. **Validate** — Check that network, recipient, asset, and amount match the server's requirement
3. **Verify** — Confirm the payload is valid for the relevant Fast or EVM payment flow
4. **Settle** — Finalize the payment when the integration requires settlement
5. **Respond** — Return a structured verification or settlement result to the calling service

## Running the Facilitator Service

The facilitator can run as a standalone HTTP service that your servers call, or it can be mounted inside an existing application. The current package surface and deployment patterns are documented in the [x402-facilitator README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-facilitator/README.md).

## Facilitator API

The current package exposes verification and settlement endpoints, including `POST /verify`, `POST /settle`, and `GET /supported`. Exact request and response schemas are maintained in the [x402-facilitator README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-facilitator/README.md).

## Security Properties

The facilitator provides the following high-level guarantees:

| Property                    | How                                                                                                    |
| --------------------------- | ------------------------------------------------------------------------------------------------------ |
| **Correct recipient**       | Payment must match the recipient configured by the server                                              |
| **Correct amount**          | Payment must satisfy the configured price requirement                                                  |
| **Correct asset/network**   | Payment must match the configured asset and payment network                                            |
| **Structured verification** | Servers receive a protocol-level verification result instead of implementing network checks themselves |

## Relationship to x402 Server

The x402 Server SDK (x402-server) ships with built-in facilitator integration — you typically don't call the facilitator directly when using x402-server. You **do** use the facilitator directly when:

* Building a custom payment verification endpoint
* Running the facilitator as a standalone service for multiple x402 servers

***

**For complete API documentation, supported routes, configuration, and deployment examples, see the** [**x402-facilitator README on GitHub**](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-facilitator/README.md)**.**


# Funding Abstraction

On-ramps and off-ramps for getting money into and out of Fast.

Funding Abstraction handles the "first mile" and "last mile" of payments — how money enters the Fast network and how it exits to traditional finance.

Agents and users shouldn't need to think about acquiring crypto, managing exchange accounts, or navigating fiat rails. Funding Abstraction provides a single interface: fund your account, let it work, withdraw when needed.

**Planned capabilities**:

<table><thead><tr><th width="196.890625">Method</th><th>Description</th></tr></thead><tbody><tr><td>Credit Card</td><td>Card → USDC → Fast in one flow</td></tr><tr><td>Bank Transfer</td><td>ACH/wire directly to Fast balance</td></tr><tr><td>Stablecoin Deposit</td><td>USDC from any supported chain</td></tr></tbody></table>

For current funding options, see the [Swapper On-ramp](/sdk-references/funding-abstraction/swapper-on-ramp) page and the [AllSet SDK README](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md).

> *Coming soon — we're integrating with on-ramp providers to make funding seamless.*


# Swapper On-ramp

On-ramp from fiat or any supported EVM chain into Fast network — via CLI or AllSet SDK.

## What the On-ramp Does

The on-ramp bridges funds from the outside world into Fast:

* **Fiat → Crypto**: Buy USDC with a credit card or bank transfer; USDC is then bridged to Fast as `fastUSDC`
* **EVM → Fast**: Deposit USDC from any supported EVM chain (Arbitrum, Base, Ethereum) directly into Fast via the AllSet bridge

Funds arrive on Fast as `fastUSDC` and are immediately usable for agent payments, x402 requests, or cross-chain workflows. No exchange account or CEX KYC is required for EVM deposits.

## How to Use

### CLI

The [Fast CLI](https://github.com/fastxyz/fast-sdk/blob/main/app/cli/README.md) provides funding flows for both crypto deposits and fiat on-ramp entry points. In the current monorepo, `fast fund crypto` covers EVM-to-Fast deposits, while `fast fund fiat` returns a mainnet on-ramp URL for the selected Fast address.

The CLI wraps the underlying SDK flows where appropriate. For scripted integrations or custom orchestration, use the SDK directly.

### SDK

Use `@fastxyz/allset-sdk` to execute deposits programmatically. The SDK provides `createEvmWallet()`, `createEvmExecutor()`, and `executeDeposit()` for bridging from EVM chains to Fast. All functions are pure — you pass all addresses and RPC URLs explicitly.

For complete API documentation and runnable code examples, see the [AllSet SDK README on GitHub](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md). See the [AllSet SDK reference](/sdk-references/core-sdk-execution/allset-sdk) for an overview of how deposits, withdrawals, and intents work.

## How AllSet SDK Enables the Bridge

The AllSet bridge is a two-step protocol built into `@fastxyz/allset-sdk`:

1. **Approve + Deposit** (EVM side): `executeDeposit` submits an ERC-20 `approve` (if needed) and a deposit transaction to the AllSet bridge contract on the source EVM chain
2. **Mint on Fast** (Fast side): The AllSet relayer observes the EVM event, cross-signs the proof, and mints `fastUSDC` to the receiver's Fast address

This means:

* No liquidity fragmentation — funds arrive as Fast-native USDC (`fastUSDC`)
* No waiting for finality — Fast settlement is sub-second once the EVM deposit confirms
* No user-controlled bridging keys — the relayer handles cross-chain proof generation

For advanced intent-based flows (custom calldata, deposit-back, revoke), see `executeIntent()` in the [AllSet SDK reference](/sdk-references/core-sdk-execution/allset-sdk).

## Supported Tokens and Chains

### EVM Source Chains

| Chain            | Chain ID | USDC Address                                 | Status |
| ---------------- | -------- | -------------------------------------------- | ------ |
| Ethereum Sepolia | 11155111 | `0x...` (test USDC)                          | ✅      |
| Arbitrum Sepolia | 421614   | `0x75faf114eafb1bdbe2f0316df893fd58ce46aa4d` | ✅      |
| Arbitrum         | 42161    | `0xaf88d065e77c8cC2239327C5EDb3A432268e5831` | ✅      |
| Base             | 8453     | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` | ✅      |
| Ethereum         | 1        | `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` | ✅      |

### Fast Tokens (on Fast network)

| Token      | Description                 | Minted via AllSet? |
| ---------- | --------------------------- | ------------------ |
| `fastUSDC` | Fast-native USDC (1:1 USDC) | ✅ (from EVM USDC)  |
| `testUSDC` | Testnet equivalent          | ✅ (from test USDC) |

### Fiat On-ramp

| Method        | Region     | Token Out     | Status      |
| ------------- | ---------- | ------------- | ----------- |
| Credit Card   | US, EU, UK | USDC/testUSDC | Coming soon |
| Bank Transfer | US, EU     | USDC/testUSDC | Coming soon |

> Fiat on-ramp is integrated via third-party providers. The current CLI exposes the entry point, while broader SDK wrappers and provider coverage continue to evolve. Track the high-level roadmap in the [Funding Abstraction](/sdk-references/funding-abstraction) overview.

## SDK Reference

| SDK                                                                                                  | Use for                                      |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| [@fastxyz/allset-sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/allset-sdk/README.md)   | EVM ↔ Fast deposits, withdrawals, intents    |
| [@fastxyz/sdk](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md)            | Fast address conversion, transaction signing |
| [@fastxyz/x402-client](https://github.com/fastxyz/fast-sdk/blob/main/packages/x402-client/README.md) | Pay for x402 APIs with Fast or EVM funds     |


# REST API

The Fast network exposes a REST API through its proxy service. This is the low-level interface that the SDK uses internally. Most developers should use the SDK instead — it handles serialization, signing, and error recovery automatically.

This page is for developers who need direct access to the protocol-level endpoints.


# Transactions

Transaction submission

## POST /v1/submit-transaction

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"transactions","description":"Transaction submission"}],"paths":{"/v1/submit-transaction":{"post":{"tags":["transactions"],"operationId":"submit_transaction","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitTransactionRequest"}}},"required":true},"responses":{"200":{"description":"Transaction processed. `data` contains one of:\n- `{\"Success\": <certificate>}` — settled, certificate included\n- `{\"IncompleteVerifierSigs\": []}` — awaiting verifier signatures\n- `{\"IncompleteMultiSig\": []}` — awaiting multi-sig signatures","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitTransactionSuccess"}}}},"400":{"description":"Invalid request or validator rejection (see `error.code`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Nonce conflict (proxy pre-flight)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Invalid verifier signatures","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"502":{"description":"Upstream validator error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"SubmitTransactionRequest":{"type":"object","description":"Request body for `POST /v1/submit-transaction`.\n\nBoth fields are hex-encoded BCS serializations of the respective types.","required":["transaction","signature"],"properties":{"signature":{"type":"string","format":"hex","description":"Hex-encoded BCS bytes of a [SignatureOrMultiSig]."},"transaction":{"type":"string","format":"hex","description":"Hex-encoded BCS bytes of a [VersionedTransaction]."},"witness_certificates":{"type":"array","items":{"type":"string","format":"hex"},"description":"Optional list of hex-encoded BCS bytes of [TransactionCertificate]s to use as witnesses."}}},"SubmitTransactionSuccess":{"type":"object","description":"Schema for `POST /v1/submit-transaction` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/ProxySubmitTransactionResult"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"ProxySubmitTransactionResult":{"oneOf":[{"type":"object","required":["Success"],"properties":{"Success":{"$ref":"#/components/schemas/TransactionCertificate"}}},{"type":"object","required":["IncompleteVerifierSigs"],"properties":{"IncompleteVerifierSigs":{"type":"array"}}},{"type":"object","required":["IncompleteMultiSig"],"properties":{"IncompleteMultiSig":{"type":"array"}}}]},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````


# Accounts

Account queries

## GET /v1/accounts/{address}

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"accounts","description":"Account queries"}],"paths":{"/v1/accounts/{address}":{"get":{"tags":["accounts"],"operationId":"get_account_info","parameters":[{"name":"address","in":"path","description":"Account address in bech32m (`fast1…`), hex, or base64 format","required":true,"schema":{"type":"string"}},{"name":"token_balances_filter","in":"query","description":"Comma-separated hex-encoded token IDs to include balances for.\nOmit to skip token balances; pass an empty value (`?token_balances_filter=`)\nto request balances for all tokens held.","required":false,"schema":{"type":["string","null"]}},{"name":"state_key_filter","in":"query","description":"Comma-separated hex-encoded state keys to return.\nOmit to skip state; pass an empty value to return all state keys.","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Account info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountInfoSuccess"}}}},"400":{"description":"Invalid address or parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"502":{"description":"Upstream validator error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"AccountInfoSuccess":{"type":"object","description":"Schema for `GET /v1/accounts/{address}` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/AccountInfoResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"AccountInfoResponse":{"type":"object","description":"Data associated to one account. Contains optional fields for returning account-related info from various\ntypes of queries. Reflects the view of a single validator, which may be lagging behind the rest of the network.","required":["sender","balance","next_nonce","requested_state","token_balance"],"properties":{"balance":{"$ref":"#/components/schemas/Balance","description":"Balance in native tokens of the account"},"next_nonce":{"$ref":"#/components/schemas/Nonce","description":"The next transaction from the account is required to have this nonce."},"pending_confirmation":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ValidatedTransaction","description":"The transaction that has been validated by the current validator, but not yet confirmed (if\nrequested)"}]},"requested_certificates":{"type":["array","null"],"items":{"$ref":"#/components/schemas/TransactionCertificate"},"description":"A single transaction certificate (if requested)"},"requested_state":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string"}]},"description":"The keys and values of the account's state as requested"},"requested_validated_transaction":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ValidatedTransaction","description":"A single validated transaction (if requested)"}]},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"The address of the account"},"token_balance":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string"}]},"description":"Token balances of tokens held by this account (may not be all tokens held)."}}},"Balance":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"ValidatedTransaction":{"type":"object","description":"A Transaction along with the signature from one validator","required":["value","validator","signature"],"properties":{"signature":{"$ref":"#/components/schemas/Signature"},"validator":{"$ref":"#/components/schemas/PublicKeyBytes"},"value":{"$ref":"#/components/schemas/TransactionEnvelope"}}},"Signature":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````

## GET /v1/accounts/{address}/certificates

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"accounts","description":"Account queries"}],"paths":{"/v1/accounts/{address}/certificates":{"get":{"tags":["accounts"],"operationId":"get_transaction_certificates","parameters":[{"name":"address","in":"path","description":"Account address in bech32m (`fast1…`), hex, or base64 format","required":true,"schema":{"type":"string"}},{"name":"from_nonce","in":"query","description":"Starting nonce (inclusive).","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"limit","in":"query","description":"Maximum number of certificates to return (max 200).","required":true,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"List of transaction certificates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateListSuccess"}}}},"400":{"description":"Invalid address or parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"CertificateListSuccess":{"type":"object","description":"Schema for `GET /v1/accounts/{address}/certificates` response.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TransactionCertificate"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````

## GET /v1/accounts/{address}/pending-multisig-transactions

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"accounts","description":"Account queries"}],"paths":{"/v1/accounts/{address}/pending-multisig-transactions":{"get":{"tags":["accounts"],"operationId":"get_pending_multisig_transactions","parameters":[{"name":"address","in":"path","description":"Multisig account address in bech32m (`fast1…`), hex, or base64 format","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Pending multisig transactions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingMultisigSuccess"}}}},"400":{"description":"Invalid address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"502":{"description":"Upstream validator error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"PendingMultisigSuccess":{"type":"object","description":"Schema for `GET /v1/accounts/{address}/pending-multisig-transactions` response.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TransactionEnvelope"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````


# Tokens

Token metadata

## GET /v1/tokens

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"tokens","description":"Token metadata"}],"paths":{"/v1/tokens":{"get":{"tags":["tokens"],"operationId":"get_token_info","parameters":[{"name":"token_ids","in":"query","description":"Comma-separated hex-encoded token IDs.\nExample: `?token_ids=abcd...,ef01...`","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Token metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenInfoSuccess"}}}},"400":{"description":"Invalid token ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"502":{"description":"Upstream validator error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"TokenInfoSuccess":{"type":"object","description":"Schema for `GET /v1/tokens` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/TokenInfoResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TokenInfoResponse":{"type":"object","required":["requested_token_metadata"],"properties":{"requested_token_metadata":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"oneOf":[{"type":"null"},{"type":"object","description":"Encodes metadata about a custom token","required":["update_id","admin","token_name","decimals","total_supply","mints"],"properties":{"admin":{"$ref":"#/components/schemas/PublicKeyBytes","description":"the current token admin"},"decimals":{"type":"integer","format":"int32","description":"the number of decimals for this token","minimum":0},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"the authorized minting addresses for this token"},"token_name":{"type":"string","description":"the name of the token"},"total_supply":{"$ref":"#/components/schemas/Amount","description":"the total supply for this token"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"number of management operations applied to some token"}}}]}]}}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Amount":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````


# Certificates

Certificate queries

## GET /v1/certificate/{tx\_id}

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"certificates","description":"Certificate queries"}],"paths":{"/v1/certificate/{tx_id}":{"get":{"tags":["certificates"],"operationId":"get_certificate_by_tx_id","parameters":[{"name":"tx_id","in":"path","description":"Transaction ID in hex format (64 hex characters)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transaction certificate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateSuccess"}}}},"400":{"description":"Invalid transaction ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Certificate not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"CertificateSuccess":{"type":"object","description":"Schema for `GET /v1/certificate/{tx_id}` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/TransactionCertificate"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````


# Escrow

Escrow job queries

## GET /v1/escrow-jobs

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"escrow","description":"Escrow job queries"}],"paths":{"/v1/escrow-jobs":{"get":{"tags":["escrow"],"operationId":"get_escrow_jobs","parameters":[{"name":"client","in":"query","description":"Filter by client address","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","description":"Filter by provider address","required":false,"schema":{"type":"string"}},{"name":"evaluator","in":"query","description":"Filter by evaluator address","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Filter by job status (Funded, Submitted, Completed, Refunded)","required":false,"schema":{"type":"string"}},{"name":"certs","in":"query","description":"Include related certificates","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Escrow jobs found. When `certs=true`, each item includes a `certificates` array; otherwise each item is a flat job object.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscrowJobWithCertsListSuccess"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"EscrowJobWithCertsListSuccess":{"type":"object","description":"Schema for `GET /v1/escrow-jobs?certs=true` response.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EscrowJobWithCerts"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"EscrowJobWithCerts":{"type":"object","description":"Response wrapper for escrow endpoints when `certs=true`.","required":["job","certificates"],"properties":{"certificates":{"type":"array","items":{"$ref":"#/components/schemas/TransactionCertificate"}},"job":{"$ref":"#/components/schemas/EscrowJobRecord"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````

## GET /v1/escrow-jobs/{job\_id}

>

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"tags":[{"name":"escrow","description":"Escrow job queries"}],"paths":{"/v1/escrow-jobs/{job_id}":{"get":{"tags":["escrow"],"operationId":"get_escrow_job","parameters":[{"name":"job_id","in":"path","description":"Hex-encoded escrow job ID","required":true,"schema":{"type":"string"}},{"name":"certs","in":"query","description":"Include related certificates","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Escrow job found. When `certs=true`, `data` includes a `certificates` array; otherwise `data` is a flat job object.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscrowJobWithCertsSuccess"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"EscrowJobWithCertsSuccess":{"type":"object","description":"Schema for `GET /v1/escrow-jobs/{job_id}?certs=true` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/EscrowJobWithCerts"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"EscrowJobWithCerts":{"type":"object","description":"Response wrapper for escrow endpoints when `certs=true`.","required":["job","certificates"],"properties":{"certificates":{"type":"array","items":{"$ref":"#/components/schemas/TransactionCertificate"}},"job":{"$ref":"#/components/schemas/EscrowJobRecord"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}},"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}}}}
````


# Models

## The AccountInfoResponse object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"AccountInfoResponse":{"type":"object","description":"Data associated to one account. Contains optional fields for returning account-related info from various\ntypes of queries. Reflects the view of a single validator, which may be lagging behind the rest of the network.","required":["sender","balance","next_nonce","requested_state","token_balance"],"properties":{"balance":{"$ref":"#/components/schemas/Balance","description":"Balance in native tokens of the account"},"next_nonce":{"$ref":"#/components/schemas/Nonce","description":"The next transaction from the account is required to have this nonce."},"pending_confirmation":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ValidatedTransaction","description":"The transaction that has been validated by the current validator, but not yet confirmed (if\nrequested)"}]},"requested_certificates":{"type":["array","null"],"items":{"$ref":"#/components/schemas/TransactionCertificate"},"description":"A single transaction certificate (if requested)"},"requested_state":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string"}]},"description":"The keys and values of the account's state as requested"},"requested_validated_transaction":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ValidatedTransaction","description":"A single validated transaction (if requested)"}]},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"The address of the account"},"token_balance":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string"}]},"description":"Token balances of tokens held by this account (may not be all tokens held)."}}},"Balance":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"ValidatedTransaction":{"type":"object","description":"A Transaction along with the signature from one validator","required":["value","validator","signature"],"properties":{"signature":{"$ref":"#/components/schemas/Signature"},"validator":{"$ref":"#/components/schemas/PublicKeyBytes"},"value":{"$ref":"#/components/schemas/TransactionEnvelope"}}},"Signature":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}}}}}
```

## The AccountInfoSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"AccountInfoSuccess":{"type":"object","description":"Schema for `GET /v1/accounts/{address}` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/AccountInfoResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"AccountInfoResponse":{"type":"object","description":"Data associated to one account. Contains optional fields for returning account-related info from various\ntypes of queries. Reflects the view of a single validator, which may be lagging behind the rest of the network.","required":["sender","balance","next_nonce","requested_state","token_balance"],"properties":{"balance":{"$ref":"#/components/schemas/Balance","description":"Balance in native tokens of the account"},"next_nonce":{"$ref":"#/components/schemas/Nonce","description":"The next transaction from the account is required to have this nonce."},"pending_confirmation":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ValidatedTransaction","description":"The transaction that has been validated by the current validator, but not yet confirmed (if\nrequested)"}]},"requested_certificates":{"type":["array","null"],"items":{"$ref":"#/components/schemas/TransactionCertificate"},"description":"A single transaction certificate (if requested)"},"requested_state":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string"}]},"description":"The keys and values of the account's state as requested"},"requested_validated_transaction":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ValidatedTransaction","description":"A single validated transaction (if requested)"}]},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"The address of the account"},"token_balance":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string"}]},"description":"Token balances of tokens held by this account (may not be all tokens held)."}}},"Balance":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"ValidatedTransaction":{"type":"object","description":"A Transaction along with the signature from one validator","required":["value","validator","signature"],"properties":{"signature":{"$ref":"#/components/schemas/Signature"},"validator":{"$ref":"#/components/schemas/PublicKeyBytes"},"value":{"$ref":"#/components/schemas/TransactionEnvelope"}}},"Signature":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The Amount object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"Amount":{"type":"string"}}}}
```

## The Balance object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"Balance":{"type":"string"}}}}
```

## The BurnRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"Amount":{"type":"string"},"TokenId":{"type":"string"}}}}
```

## The BurnRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"Amount":{"type":"string"},"TokenId":{"type":"string"}}}}
```

## The BurnRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"Amount":{"type":"string"},"TokenId":{"type":"string"}}}}
```

## The CertificateListSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CertificateListSuccess":{"type":"object","description":"Schema for `GET /v1/accounts/{address}/certificates` response.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TransactionCertificate"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The CertificateSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CertificateSuccess":{"type":"object","description":"Schema for `GET /v1/certificate/{tx_id}` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/TransactionCertificate"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The ClaimData object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ClaimData":{"type":"string"}}}}
```

## The ClaimTypeRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"}}}}
```

## The ClaimsRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}}}}}
```

## The ClaimsRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```

## The CommitteeChangeRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The CommitteeChangeRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The CommitteeChangeRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The CommitteeConfigRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The CommitteeConfigRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The CommitteeConfigRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The ErrorEnvelope object

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ErrorEnvelope":{"type":"object","description":"Error response envelope.\n\n```json\n{\n  \"error\": { \"code\": \"UNEXPECTED_NONCE\", \"message\": \"…\", \"details\": { … } },\n  \"meta\": { \"timestamp\": \"…\" }\n}\n```","required":["error","meta"],"properties":{"error":{"description":"Structured error body built from [`RestApiError`]."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
````

## The EscrowCompleteRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"}}}}
```

## The EscrowCompleteRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"}}}}
```

## The EscrowConfigIdRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowConfigIdRelease20260407":{"type":"string"}}}}
```

## The EscrowConfigIdRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowConfigIdRelease20260508":{"type":"string"}}}}
```

## The EscrowCreateConfigRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"}}}}
```

## The EscrowCreateConfigRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"}}}}
```

## The EscrowCreateJobRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Amount":{"type":"string"}}}}
```

## The EscrowCreateJobRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Amount":{"type":"string"}}}}
```

## The EscrowJobIdRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobIdRelease20260407":{"type":"string"}}}}
```

## The EscrowJobIdRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobIdRelease20260508":{"type":"string"}}}}
```

## The EscrowJobListSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobListSuccess":{"type":"object","description":"Schema for `GET /v1/escrow-jobs` response.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EscrowJobRecord"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"EscrowConfigIdRelease20260508":{"type":"string"},"Amount":{"type":"string"},"EscrowJobIdRelease20260508":{"type":"string"},"TokenId":{"type":"string"},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The EscrowJobRecord object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"EscrowConfigIdRelease20260508":{"type":"string"},"Amount":{"type":"string"},"EscrowJobIdRelease20260508":{"type":"string"},"TokenId":{"type":"string"}}}}
```

## The EscrowJobStatusRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobStatusRelease20260508":{"type":"string","enum":["Funded","Submitted","Completed","Refunded"]}}}}
```

## The EscrowJobSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobSuccess":{"type":"object","description":"Schema for `GET /v1/escrow-jobs/{job_id}` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/EscrowJobRecord"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"EscrowConfigIdRelease20260508":{"type":"string"},"Amount":{"type":"string"},"EscrowJobIdRelease20260508":{"type":"string"},"TokenId":{"type":"string"},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The EscrowJobWithCerts object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobWithCerts":{"type":"object","description":"Response wrapper for escrow endpoints when `certs=true`.","required":["job","certificates"],"properties":{"certificates":{"type":"array","items":{"$ref":"#/components/schemas/TransactionCertificate"}},"job":{"$ref":"#/components/schemas/EscrowJobRecord"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}}}}}
```

## The EscrowJobWithCertsListSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobWithCertsListSuccess":{"type":"object","description":"Schema for `GET /v1/escrow-jobs?certs=true` response.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EscrowJobWithCerts"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"EscrowJobWithCerts":{"type":"object","description":"Response wrapper for escrow endpoints when `certs=true`.","required":["job","certificates"],"properties":{"certificates":{"type":"array","items":{"$ref":"#/components/schemas/TransactionCertificate"}},"job":{"$ref":"#/components/schemas/EscrowJobRecord"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The EscrowJobWithCertsSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowJobWithCertsSuccess":{"type":"object","description":"Schema for `GET /v1/escrow-jobs/{job_id}?certs=true` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/EscrowJobWithCerts"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"EscrowJobWithCerts":{"type":"object","description":"Response wrapper for escrow endpoints when `certs=true`.","required":["job","certificates"],"properties":{"certificates":{"type":"array","items":{"$ref":"#/components/schemas/TransactionCertificate"}},"job":{"$ref":"#/components/schemas/EscrowJobRecord"}}},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobRecord":{"type":"object","required":["job_id","config_id","client","provider","evaluator","token_id","provider_fee","evaluator_fee","description","status"],"properties":{"client":{"$ref":"#/components/schemas/PublicKeyBytes"},"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"deliverable":{"type":["string","null"]},"description":{"type":"string"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"evaluator_fee":{"$ref":"#/components/schemas/Amount"},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"},"status":{"type":"string"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The EscrowRejectRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"}}}}
```

## The EscrowRejectRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"}}}}
```

## The EscrowRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}}}}}
```

## The EscrowRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```

## The EscrowSubmitRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"}}}}
```

## The EscrowSubmitRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"}}}}
```

## The ExternalClaimBodyRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Quorum":{"type":"integer","format":"int64","minimum":0}}}}
```

## The ExternalClaimBodyRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Quorum":{"type":"integer","format":"int64","minimum":0}}}}
```

## The ExternalClaimBodyRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Quorum":{"type":"integer","format":"int64","minimum":0}}}}
```

## The ExternalClaimRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"}}}}
```

## The ExternalClaimRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"}}}}
```

## The ExternalClaimRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"}}}}
```

## The FastSetAddress object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"FastSetAddress":{"type":"string"}}}}
```

## The FastSetError object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"FastSetError":{"oneOf":[{"type":"object","required":["InternalError"],"properties":{"InternalError":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},{"type":"object","required":["InvalidSignature"],"properties":{"InvalidSignature":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"signer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes"}]}}}}},{"type":"object","required":["UnknownSigner"],"properties":{"UnknownSigner":{"type":"object","required":["signer"],"properties":{"signer":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"string","enum":["CannotSign"]},{"type":"string","enum":["CannotJoinCommitteeAlreadyMember"]},{"type":"string","enum":["CannotLeaveCommitteeNotMember"]},{"type":"object","required":["NonSubmittableOperation"],"properties":{"NonSubmittableOperation":{"type":"object","required":["reason"],"properties":{"reason":{"type":"string"}}}}},{"type":"string","enum":["MissingCommitteeInfo"]},{"type":"object","required":["CertificateRequiresQuorum"],"properties":{"CertificateRequiresQuorum":{"type":"object","required":["num_signers","quorum"],"properties":{"num_signers":{"type":"integer","minimum":0},"quorum":{"type":"integer","minimum":0}}}}},{"type":"string","enum":["IncorrectTransferAmount"]},{"type":"object","required":["UnexpectedNonce"],"properties":{"UnexpectedNonce":{"type":"object","required":["expected_nonce","actual_nonce"],"properties":{"actual_nonce":{"$ref":"#/components/schemas/Nonce"},"expected_nonce":{"$ref":"#/components/schemas/Nonce"}}}}},{"type":"object","required":["InsufficientFunding"],"properties":{"InsufficientFunding":{"type":"object","required":["current_balance","needed"],"properties":{"current_balance":{"$ref":"#/components/schemas/Balance"},"needed":{"$ref":"#/components/schemas/Balance"}}}}},{"type":"object","required":["InsufficientFundingForFee"],"properties":{"InsufficientFundingForFee":{"type":"object","required":["current_balance","needed"],"properties":{"current_balance":{"$ref":"#/components/schemas/Balance"},"needed":{"$ref":"#/components/schemas/Balance"},"token_id":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId"}]}}}}},{"type":"object","required":["PreviousTransactionMustBeConfirmedFirst"],"properties":{"PreviousTransactionMustBeConfirmedFirst":{"type":"object","required":["pending_confirmation"],"properties":{"pending_confirmation":{"$ref":"#/components/schemas/TransactionEnvelope"}}}}},{"type":"object","required":["MissingEarlierConfirmations"],"properties":{"MissingEarlierConfirmations":{"type":"object","required":["current_nonce"],"properties":{"current_nonce":{"$ref":"#/components/schemas/Nonce"}}}}},{"type":"object","required":["UnknownSenderAccount"],"properties":{"UnknownSenderAccount":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["CertificateSignerReuse"],"properties":{"CertificateSignerReuse":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["CertificateTooYoung"],"properties":{"CertificateTooYoung":{"type":"object","required":["resend_after_nanos"],"properties":{"resend_after_nanos":{"type":"integer","format":"int64","minimum":0}}}}},{"type":"object","required":["CertificateNotFromCurrentEpoch"],"properties":{"CertificateNotFromCurrentEpoch":{"type":"object","required":["current_epoch","received_epoch"],"properties":{"current_epoch":{"type":"integer","format":"int32","minimum":0},"received_epoch":{"type":"integer","format":"int32","minimum":0}}}}},{"type":"object","required":["InvalidNonce"],"properties":{"InvalidNonce":{"type":"object","required":["actual_nonce","limit"],"properties":{"actual_nonce":{"$ref":"#/components/schemas/Nonce"},"limit":{"$ref":"#/components/schemas/Nonce"}}}}},{"type":"string","enum":["NonceOverflow"]},{"type":"string","enum":["NonceUnderflow"]},{"type":"string","enum":["AmountOverflow"]},{"type":"string","enum":["AmountUnderflow"]},{"type":"string","enum":["BalanceOverflow"]},{"type":"string","enum":["BalanceUnderflow"]},{"type":"string","enum":["InvalidTimestampInFuture"]},{"type":"string","enum":["TimestampTooOld"]},{"type":"string","enum":["InvalidDecoding"]},{"type":"string","enum":["InvalidTransactionSender"]},{"type":"string","enum":["InvalidValidatorConfigAddress"]},{"type":"string","enum":["CommitteeAdminCannotSendTransactions"]},{"type":"object","required":["InvalidMinterAddress"],"properties":{"InvalidMinterAddress":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["DuplicateOrUselessInfo"],"properties":{"DuplicateOrUselessInfo":{"type":"object","required":["context"],"properties":{"context":{"type":"string"}}}}},{"type":"object","required":["UnauthorizedTx"],"properties":{"UnauthorizedTx":{"type":"object","required":["explanation"],"properties":{"explanation":{"type":"string"}}}}},{"type":"object","required":["UnknownTokenId"],"properties":{"UnknownTokenId":{"type":"object","required":["token_id"],"properties":{"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"object","required":["DuplicateTokenId"],"properties":{"DuplicateTokenId":{"type":"object","required":["token_id"],"properties":{"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"object","required":["UnexpectedTokenUpdateId"],"properties":{"UnexpectedTokenUpdateId":{"type":"object","required":["token_id","expected_update_id","actual_update_id"],"properties":{"actual_update_id":{"$ref":"#/components/schemas/Nonce"},"expected_update_id":{"$ref":"#/components/schemas/Nonce"},"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"string","enum":["InvalidPreviousState"]},{"type":"string","enum":["InvalidStateUpdate"]},{"type":"object","required":["AuthorizedSignersNotPresorted"],"properties":{"AuthorizedSignersNotPresorted":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["SignatureNotPresorted"],"properties":{"SignatureNotPresorted":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"string","enum":["UnsupportedCombination"]},{"type":"string","enum":["CertificateNotfound"]},{"type":"object","required":["WitnessCertificateTimestampMismatch"],"properties":{"WitnessCertificateTimestampMismatch":{"type":"object","required":["expected","actual"],"properties":{"actual":{"type":"integer","minimum":0},"expected":{"type":"integer","minimum":0}}}}},{"type":"string","enum":["CannotConvertJoinCommittee"]},{"type":"string","enum":["EpochConversionOverflow"]},{"type":"string","enum":["CannotConvertCommitteeToCommitteeConfig"]},{"type":"object","required":["UnsupportedFeeToken"],"properties":{"UnsupportedFeeToken":{"type":"object","required":["token_id"],"properties":{"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"object","required":["UnsupportedNetworkId"],"properties":{"UnsupportedNetworkId":{"type":"object","required":["expected","received"],"properties":{"expected":{"type":"string"},"received":{"type":"string"}}}}},{"type":"string","enum":["EscrowConfigNotFound"]},{"type":"string","enum":["EscrowJobNotFound"]},{"type":"object","required":["EscrowJobIllegalStateTransition"],"properties":{"EscrowJobIllegalStateTransition":{"type":"object","required":["from","to"],"properties":{"from":{"$ref":"#/components/schemas/EscrowJobStatusRelease20260508"},"to":{"$ref":"#/components/schemas/EscrowJobStatusRelease20260508"}}}}},{"type":"string","enum":["EscrowDescriptionTooLong"]},{"type":"string","enum":["DuplicateEscrowConfigId"]},{"type":"string","enum":["DuplicateEscrowJobId"]}],"description":"FastSet core errors. Only protocol-related errors should be in here."},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Balance":{"type":"string"},"TokenId":{"type":"string"},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobStatusRelease20260508":{"type":"string","enum":["Funded","Submitted","Completed","Refunded"]}}}}
```

## The FaucetDripRequest object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"FaucetDripRequest":{"type":"object","description":"Request body for `POST /v1/faucet-drip`.","required":["recipient","amount"],"properties":{"amount":{"type":"string","description":"Token amount as a decimal string."},"recipient":{"type":"string","description":"Recipient address in bech32m (`fast1…`), hex, or base64 format."},"token_id":{"type":["string","null"],"description":"Optional token ID as a hex-encoded 32-byte value."}}}}}}
```

## The FeeTokenEntry object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"FeeTokenEntry":{"type":"object","description":"An entry in the fee token list: a token that can be used to pay transaction fees,\nalong with the fixed fee amount in that token.","required":["token_id","fixed_amount"],"properties":{"fixed_amount":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"}}}}
```

## The FeeTokenList object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"FeeTokenList":{"type":"object","description":"A list of accepted fee tokens and their fixed fee amounts, plus a default token.\nAn empty `entries` list means no fees are charged (bootstrap mode).","required":["entries","default"],"properties":{"default":{"$ref":"#/components/schemas/TokenId"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/FeeTokenEntry"}}}},"TokenId":{"type":"string"},"FeeTokenEntry":{"type":"object","description":"An entry in the fee token list: a token that can be used to pay transaction fees,\nalong with the fixed fee amount in that token.","required":["token_id","fixed_amount"],"properties":{"fixed_amount":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"Amount":{"type":"string"}}}}
```

## The FixedAmountOrBps object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"Amount":{"type":"string"}}}}
```

## The MintRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"}}}}
```

## The MintRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"}}}}
```

## The MintRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"}}}}
```

## The MultiSig object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0}}}}
```

## The MultiSigConfig object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0}}}}
```

## The NetworkId object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."}}}}
```

## The NetworkInfoResponse object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"NetworkInfoResponse":{"type":"object","description":"Static configuration of the validator's network: the network identifier and the\nlist of tokens accepted for fees together with their fixed fee amounts.","required":["network_id","fees"],"properties":{"fees":{"$ref":"#/components/schemas/FeeTokenList"},"network_id":{"$ref":"#/components/schemas/NetworkId"}}},"FeeTokenList":{"type":"object","description":"A list of accepted fee tokens and their fixed fee amounts, plus a default token.\nAn empty `entries` list means no fees are charged (bootstrap mode).","required":["entries","default"],"properties":{"default":{"$ref":"#/components/schemas/TokenId"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/FeeTokenEntry"}}}},"TokenId":{"type":"string"},"FeeTokenEntry":{"type":"object","description":"An entry in the fee token list: a token that can be used to pay transaction fees,\nalong with the fixed fee amount in that token.","required":["token_id","fixed_amount"],"properties":{"fixed_amount":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"Amount":{"type":"string"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."}}}}
```

## The NetworkInfoResponseSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"NetworkInfoResponseSuccess":{"type":"object","description":"Schema for `GET /v1/network-info` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/NetworkInfoResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"NetworkInfoResponse":{"type":"object","description":"Static configuration of the validator's network: the network identifier and the\nlist of tokens accepted for fees together with their fixed fee amounts.","required":["network_id","fees"],"properties":{"fees":{"$ref":"#/components/schemas/FeeTokenList"},"network_id":{"$ref":"#/components/schemas/NetworkId"}}},"FeeTokenList":{"type":"object","description":"A list of accepted fee tokens and their fixed fee amounts, plus a default token.\nAn empty `entries` list means no fees are charged (bootstrap mode).","required":["entries","default"],"properties":{"default":{"$ref":"#/components/schemas/TokenId"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/FeeTokenEntry"}}}},"TokenId":{"type":"string"},"FeeTokenEntry":{"type":"object","description":"An entry in the fee token list: a token that can be used to pay transaction fees,\nalong with the fixed fee amount in that token.","required":["token_id","fixed_amount"],"properties":{"fixed_amount":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"Amount":{"type":"string"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The Nonce object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"Nonce":{"type":"integer","format":"int64","minimum":0}}}}
```

## The OperationBundleRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}}}}}
```

## The OperationRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}}}}}
```

## The OperationRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}}}}}
```

## The OperationRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```

## The PendingMultisigSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"PendingMultisigSuccess":{"type":"object","description":"Schema for `GET /v1/accounts/{address}/pending-multisig-transactions` response.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TransactionEnvelope"}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The ProxySubmitTransactionResult object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ProxySubmitTransactionResult":{"oneOf":[{"type":"object","required":["Success"],"properties":{"Success":{"$ref":"#/components/schemas/TransactionCertificate"}}},{"type":"object","required":["IncompleteVerifierSigs"],"properties":{"IncompleteVerifierSigs":{"type":"array"}}},{"type":"object","required":["IncompleteMultiSig"],"properties":{"IncompleteMultiSig":{"type":"array"}}}]},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```

## The PublicKeyBytes object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The Quorum object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"Quorum":{"type":"integer","format":"int64","minimum":0}}}}
```

## The ResponseMeta object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The RestApiError object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"RestApiError":{"oneOf":[{"type":"object","description":"A client-supplied value is malformed or missing.","required":["details","code"],"properties":{"code":{"type":"string","enum":["INVALID_REQUEST"]},"details":{"type":"object","description":"A client-supplied value is malformed or missing.","required":["reason"],"properties":{"reason":{"type":"string"}}}}},{"type":"object","description":"The requested resource was not found.","required":["details","code"],"properties":{"code":{"type":"string","enum":["NOT_FOUND"]},"details":{"type":"object","description":"The requested resource was not found.","required":["reason"],"properties":{"reason":{"type":"string"}}}}},{"type":"object","description":"The requested faucet drip amount exceeds the configured threshold.","required":["details","code"],"properties":{"code":{"type":"string","enum":["FAUCET_AMOUNT_EXCEEDED"]},"details":{"type":"object","description":"The requested faucet drip amount exceeds the configured threshold.","required":["requested","threshold"],"properties":{"requested":{"type":"string"},"threshold":{"type":"string"}}}}},{"type":"object","description":"The certificate pagination limit exceeds the server maximum.","required":["details","code"],"properties":{"code":{"type":"string","enum":["TOO_MANY_CERTIFICATES_REQUESTED"]},"details":{"type":"object","description":"The certificate pagination limit exceeds the server maximum.","required":["max_limit"],"properties":{"max_limit":{"type":"integer","format":"int32","minimum":0}}}}},{"type":"object","description":"The faucet is not enabled on this proxy.","required":["details","code"],"properties":{"code":{"type":"string","enum":["FAUCET_DISABLED"]},"details":{"type":"object","description":"The faucet is not enabled on this proxy."}}},{"type":"object","description":"The transaction nonce does not match the expected next nonce.","required":["details","code"],"properties":{"code":{"type":"string","enum":["UNEXPECTED_NONCE"]},"details":{"type":"object","description":"The transaction nonce does not match the expected next nonce.","required":["tx_nonce","expected_nonce"],"properties":{"expected_nonce":{"type":"integer","format":"int64","minimum":0},"tx_nonce":{"type":"integer","format":"int64","minimum":0}}}}},{"type":"object","description":"The supplied verifier signatures are invalid.","required":["details","code"],"properties":{"code":{"type":"string","enum":["VERIFIER_SIGNATURES_INVALID"]},"details":{"type":"object","description":"The supplied verifier signatures are invalid.","required":["reason"],"properties":{"reason":{"type":"string"}}}}},{"type":"object","description":"The faucet is rate-limiting this caller.","required":["details","code"],"properties":{"code":{"type":"string","enum":["FAUCET_THROTTLED"]},"details":{"type":"object","description":"The faucet is rate-limiting this caller.","required":["retry_after_secs"],"properties":{"retry_after_secs":{"type":"integer","format":"int64","minimum":0}}}}},{"type":"object","description":"An internal error occurred (details are intentionally omitted).","required":["details","code"],"properties":{"code":{"type":"string","enum":["INTERNAL_ERROR"]},"details":{"type":"object","description":"An internal error occurred (details are intentionally omitted)."}}},{"type":"object","description":"The upstream validator RPC returned an error.","required":["details","code"],"properties":{"code":{"type":"string","enum":["UPSTREAM_ERROR"]},"details":{"type":"object","description":"The upstream validator RPC returned an error.","required":["upstream_message"],"properties":{"upstream_message":{"type":"string"}}}}},{"type":"object","description":"The caller's IP has exceeded its rate limit.","required":["details","code"],"properties":{"code":{"type":"string","enum":["IP_RATE_LIMITED"]},"details":{"type":"object","description":"The caller's IP has exceeded its rate limit.","required":["retry_after_secs"],"properties":{"retry_after_secs":{"type":"integer","format":"int64","minimum":0}}}}},{"type":"object","description":"The proxy is shutting down and not accepting requests.","required":["details","code"],"properties":{"code":{"type":"string","enum":["SERVICE_UNAVAILABLE"]},"details":{"type":"object","description":"The proxy is shutting down and not accepting requests."}}},{"type":"object","description":"Validator rejected the tx with a structured `FastSetError`.\nAll validator rejections (other than those caught by the proxy's own\npre-flight) flow through this single bucket. The `FastSetError` is\nserialized as-is in the `details` field and auto-documented via\n`ToSchema`.","required":["details","code"],"properties":{"code":{"type":"string","enum":["VALIDATOR_REJECTED"]},"details":{"$ref":"#/components/schemas/FastSetError","description":"Validator rejected the tx with a structured `FastSetError`.\nAll validator rejections (other than those caught by the proxy's own\npre-flight) flow through this single bucket. The `FastSetError` is\nserialized as-is in the `details` field and auto-documented via\n`ToSchema`."}}}],"description":"REST-specific error enum.\n\nEach variant maps to an HTTP status code, a machine-readable code string,\nand a structured `details` JSON object.\n\n- `thiserror::Error` provides the human-readable `message` via `Display`.\n- `Serialize` with adjacently-tagged representation produces `{\"code\": \"…\", \"details\": {…}}`.\n- The `message` field is injected in [`rest_err`] before sending the response."},"FastSetError":{"oneOf":[{"type":"object","required":["InternalError"],"properties":{"InternalError":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},{"type":"object","required":["InvalidSignature"],"properties":{"InvalidSignature":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"signer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes"}]}}}}},{"type":"object","required":["UnknownSigner"],"properties":{"UnknownSigner":{"type":"object","required":["signer"],"properties":{"signer":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"string","enum":["CannotSign"]},{"type":"string","enum":["CannotJoinCommitteeAlreadyMember"]},{"type":"string","enum":["CannotLeaveCommitteeNotMember"]},{"type":"object","required":["NonSubmittableOperation"],"properties":{"NonSubmittableOperation":{"type":"object","required":["reason"],"properties":{"reason":{"type":"string"}}}}},{"type":"string","enum":["MissingCommitteeInfo"]},{"type":"object","required":["CertificateRequiresQuorum"],"properties":{"CertificateRequiresQuorum":{"type":"object","required":["num_signers","quorum"],"properties":{"num_signers":{"type":"integer","minimum":0},"quorum":{"type":"integer","minimum":0}}}}},{"type":"string","enum":["IncorrectTransferAmount"]},{"type":"object","required":["UnexpectedNonce"],"properties":{"UnexpectedNonce":{"type":"object","required":["expected_nonce","actual_nonce"],"properties":{"actual_nonce":{"$ref":"#/components/schemas/Nonce"},"expected_nonce":{"$ref":"#/components/schemas/Nonce"}}}}},{"type":"object","required":["InsufficientFunding"],"properties":{"InsufficientFunding":{"type":"object","required":["current_balance","needed"],"properties":{"current_balance":{"$ref":"#/components/schemas/Balance"},"needed":{"$ref":"#/components/schemas/Balance"}}}}},{"type":"object","required":["InsufficientFundingForFee"],"properties":{"InsufficientFundingForFee":{"type":"object","required":["current_balance","needed"],"properties":{"current_balance":{"$ref":"#/components/schemas/Balance"},"needed":{"$ref":"#/components/schemas/Balance"},"token_id":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId"}]}}}}},{"type":"object","required":["PreviousTransactionMustBeConfirmedFirst"],"properties":{"PreviousTransactionMustBeConfirmedFirst":{"type":"object","required":["pending_confirmation"],"properties":{"pending_confirmation":{"$ref":"#/components/schemas/TransactionEnvelope"}}}}},{"type":"object","required":["MissingEarlierConfirmations"],"properties":{"MissingEarlierConfirmations":{"type":"object","required":["current_nonce"],"properties":{"current_nonce":{"$ref":"#/components/schemas/Nonce"}}}}},{"type":"object","required":["UnknownSenderAccount"],"properties":{"UnknownSenderAccount":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["CertificateSignerReuse"],"properties":{"CertificateSignerReuse":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["CertificateTooYoung"],"properties":{"CertificateTooYoung":{"type":"object","required":["resend_after_nanos"],"properties":{"resend_after_nanos":{"type":"integer","format":"int64","minimum":0}}}}},{"type":"object","required":["CertificateNotFromCurrentEpoch"],"properties":{"CertificateNotFromCurrentEpoch":{"type":"object","required":["current_epoch","received_epoch"],"properties":{"current_epoch":{"type":"integer","format":"int32","minimum":0},"received_epoch":{"type":"integer","format":"int32","minimum":0}}}}},{"type":"object","required":["InvalidNonce"],"properties":{"InvalidNonce":{"type":"object","required":["actual_nonce","limit"],"properties":{"actual_nonce":{"$ref":"#/components/schemas/Nonce"},"limit":{"$ref":"#/components/schemas/Nonce"}}}}},{"type":"string","enum":["NonceOverflow"]},{"type":"string","enum":["NonceUnderflow"]},{"type":"string","enum":["AmountOverflow"]},{"type":"string","enum":["AmountUnderflow"]},{"type":"string","enum":["BalanceOverflow"]},{"type":"string","enum":["BalanceUnderflow"]},{"type":"string","enum":["InvalidTimestampInFuture"]},{"type":"string","enum":["TimestampTooOld"]},{"type":"string","enum":["InvalidDecoding"]},{"type":"string","enum":["InvalidTransactionSender"]},{"type":"string","enum":["InvalidValidatorConfigAddress"]},{"type":"string","enum":["CommitteeAdminCannotSendTransactions"]},{"type":"object","required":["InvalidMinterAddress"],"properties":{"InvalidMinterAddress":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["DuplicateOrUselessInfo"],"properties":{"DuplicateOrUselessInfo":{"type":"object","required":["context"],"properties":{"context":{"type":"string"}}}}},{"type":"object","required":["UnauthorizedTx"],"properties":{"UnauthorizedTx":{"type":"object","required":["explanation"],"properties":{"explanation":{"type":"string"}}}}},{"type":"object","required":["UnknownTokenId"],"properties":{"UnknownTokenId":{"type":"object","required":["token_id"],"properties":{"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"object","required":["DuplicateTokenId"],"properties":{"DuplicateTokenId":{"type":"object","required":["token_id"],"properties":{"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"object","required":["UnexpectedTokenUpdateId"],"properties":{"UnexpectedTokenUpdateId":{"type":"object","required":["token_id","expected_update_id","actual_update_id"],"properties":{"actual_update_id":{"$ref":"#/components/schemas/Nonce"},"expected_update_id":{"$ref":"#/components/schemas/Nonce"},"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"string","enum":["InvalidPreviousState"]},{"type":"string","enum":["InvalidStateUpdate"]},{"type":"object","required":["AuthorizedSignersNotPresorted"],"properties":{"AuthorizedSignersNotPresorted":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"object","required":["SignatureNotPresorted"],"properties":{"SignatureNotPresorted":{"type":"object","required":["address"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"}}}}},{"type":"string","enum":["UnsupportedCombination"]},{"type":"string","enum":["CertificateNotfound"]},{"type":"object","required":["WitnessCertificateTimestampMismatch"],"properties":{"WitnessCertificateTimestampMismatch":{"type":"object","required":["expected","actual"],"properties":{"actual":{"type":"integer","minimum":0},"expected":{"type":"integer","minimum":0}}}}},{"type":"string","enum":["CannotConvertJoinCommittee"]},{"type":"string","enum":["EpochConversionOverflow"]},{"type":"string","enum":["CannotConvertCommitteeToCommitteeConfig"]},{"type":"object","required":["UnsupportedFeeToken"],"properties":{"UnsupportedFeeToken":{"type":"object","required":["token_id"],"properties":{"token_id":{"$ref":"#/components/schemas/TokenId"}}}}},{"type":"object","required":["UnsupportedNetworkId"],"properties":{"UnsupportedNetworkId":{"type":"object","required":["expected","received"],"properties":{"expected":{"type":"string"},"received":{"type":"string"}}}}},{"type":"string","enum":["EscrowConfigNotFound"]},{"type":"string","enum":["EscrowJobNotFound"]},{"type":"object","required":["EscrowJobIllegalStateTransition"],"properties":{"EscrowJobIllegalStateTransition":{"type":"object","required":["from","to"],"properties":{"from":{"$ref":"#/components/schemas/EscrowJobStatusRelease20260508"},"to":{"$ref":"#/components/schemas/EscrowJobStatusRelease20260508"}}}}},{"type":"string","enum":["EscrowDescriptionTooLong"]},{"type":"string","enum":["DuplicateEscrowConfigId"]},{"type":"string","enum":["DuplicateEscrowJobId"]}],"description":"FastSet core errors. Only protocol-related errors should be in here."},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Balance":{"type":"string"},"TokenId":{"type":"string"},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobStatusRelease20260508":{"type":"string","enum":["Funded","Submitted","Completed","Refunded"]}}}}
```

## The Signature object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"Signature":{"type":"string"}}}}
```

## The SignatureOrMultiSig object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0}}}}
```

## The State object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"State":{"type":"string"}}}}
```

## The StateInitializationRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"}}}}
```

## The StateInitializationRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"}}}}
```

## The StateInitializationRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"}}}}
```

## The StateKey object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateKey":{"type":"string"}}}}
```

## The StateResetRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"StateKey":{"type":"string"},"State":{"type":"string"}}}}
```

## The StateResetRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"StateKey":{"type":"string"},"State":{"type":"string"}}}}
```

## The StateResetRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"StateKey":{"type":"string"},"State":{"type":"string"}}}}
```

## The StateUpdateRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"StateKey":{"type":"string"},"State":{"type":"string"}}}}
```

## The StateUpdateRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"StateKey":{"type":"string"},"State":{"type":"string"}}}}
```

## The StateUpdateRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"StateKey":{"type":"string"},"State":{"type":"string"}}}}
```

## The SubmitTransactionRequest object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"SubmitTransactionRequest":{"type":"object","description":"Request body for `POST /v1/submit-transaction`.\n\nBoth fields are hex-encoded BCS serializations of the respective types.","required":["transaction","signature"],"properties":{"signature":{"type":"string","format":"hex","description":"Hex-encoded BCS bytes of a [SignatureOrMultiSig]."},"transaction":{"type":"string","format":"hex","description":"Hex-encoded BCS bytes of a [VersionedTransaction]."},"witness_certificates":{"type":"array","items":{"type":"string","format":"hex"},"description":"Optional list of hex-encoded BCS bytes of [TransactionCertificate]s to use as witnesses."}}}}}}
```

## The SubmitTransactionSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"SubmitTransactionSuccess":{"type":"object","description":"Schema for `POST /v1/submit-transaction` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/ProxySubmitTransactionResult"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"ProxySubmitTransactionResult":{"oneOf":[{"type":"object","required":["Success"],"properties":{"Success":{"$ref":"#/components/schemas/TransactionCertificate"}}},{"type":"object","required":["IncompleteVerifierSigs"],"properties":{"IncompleteVerifierSigs":{"type":"array"}}},{"type":"object","required":["IncompleteMultiSig"],"properties":{"IncompleteMultiSig":{"type":"array"}}}]},"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The SuccessEnvelope object

````json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"SuccessEnvelope":{"type":"object","description":"Successful response envelope (runtime type).\n\n```json\n{ \"data\": { … }, \"meta\": { \"timestamp\": \"2026-03-16T12:00:00Z\" } }\n```\n\nOpenAPI annotations use [`TypedSuccessEnvelope`] aliases instead so that\nthe generated schema shows the concrete `data` type per endpoint.","required":["data","meta"],"properties":{"data":{"description":"The response payload (structure varies by endpoint)."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
````

## The TokenCreationRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"UserData":{"type":"string"}}}}
```

## The TokenCreationRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"UserData":{"type":"string"}}}}
```

## The TokenCreationRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"UserData":{"type":"string"}}}}
```

## The TokenId object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenId":{"type":"string"}}}}
```

## The TokenInfoResponse object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenInfoResponse":{"type":"object","required":["requested_token_metadata"],"properties":{"requested_token_metadata":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"oneOf":[{"type":"null"},{"type":"object","description":"Encodes metadata about a custom token","required":["update_id","admin","token_name","decimals","total_supply","mints"],"properties":{"admin":{"$ref":"#/components/schemas/PublicKeyBytes","description":"the current token admin"},"decimals":{"type":"integer","format":"int32","description":"the number of decimals for this token","minimum":0},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"the authorized minting addresses for this token"},"token_name":{"type":"string","description":"the name of the token"},"total_supply":{"$ref":"#/components/schemas/Amount","description":"the total supply for this token"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"number of management operations applied to some token"}}}]}]}}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Amount":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0}}}}
```

## The TokenInfoSuccess object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenInfoSuccess":{"type":"object","description":"Schema for `GET /v1/tokens` response.","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/TokenInfoResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}},"TokenInfoResponse":{"type":"object","required":["requested_token_metadata"],"properties":{"requested_token_metadata":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"oneOf":[{"type":"null"},{"type":"object","description":"Encodes metadata about a custom token","required":["update_id","admin","token_name","decimals","total_supply","mints"],"properties":{"admin":{"$ref":"#/components/schemas/PublicKeyBytes","description":"the current token admin"},"decimals":{"type":"integer","format":"int32","description":"the number of decimals for this token","minimum":0},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"the authorized minting addresses for this token"},"token_name":{"type":"string","description":"the name of the token"},"total_supply":{"$ref":"#/components/schemas/Amount","description":"the total supply for this token"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"number of management operations applied to some token"}}}]}]}}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Amount":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"ResponseMeta":{"type":"object","description":"Shared metadata included in every API response.","required":["timestamp"],"properties":{"timestamp":{"type":"string","description":"ISO-8601 / RFC-3339 UTC timestamp of when the response was generated."}}}}}}
```

## The TokenManagementRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"UserData":{"type":"string"}}}}
```

## The TokenManagementRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"UserData":{"type":"string"}}}}
```

## The TokenManagementRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0},"UserData":{"type":"string"}}}}
```

## The TokenMetadata object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenMetadata":{"type":"object","description":"Encodes metadata about a custom token","required":["update_id","admin","token_name","decimals","total_supply","mints"],"properties":{"admin":{"$ref":"#/components/schemas/PublicKeyBytes","description":"the current token admin"},"decimals":{"type":"integer","format":"int32","description":"the number of decimals for this token","minimum":0},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"the authorized minting addresses for this token"},"token_name":{"type":"string","description":"the name of the token"},"total_supply":{"$ref":"#/components/schemas/Amount","description":"the total supply for this token"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"number of management operations applied to some token"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Amount":{"type":"string"},"Nonce":{"type":"integer","format":"int64","minimum":0}}}}
```

## The TokenTransferRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"}}}}
```

## The TokenTransferRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"}}}}
```

## The TokenTransferRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"}}}}
```

## The TransactionCertificate object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TransactionCertificate":{"type":"object","description":"A Transaction along with a quorum of validator signatures","required":["envelope","signatures"],"properties":{"envelope":{"$ref":"#/components/schemas/TransactionEnvelope"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```

## The TransactionEnvelope object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"Signature":{"type":"string"},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```

## The TransactionRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."}}}}
```

## The TransactionRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."}}}}
```

## The TransactionRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."}}}}
```

## The UserData object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"UserData":{"type":"string"}}}}
```

## The ValidatedTransaction object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ValidatedTransaction":{"type":"object","description":"A Transaction along with the signature from one validator","required":["value","validator","signature"],"properties":{"signature":{"$ref":"#/components/schemas/Signature"},"validator":{"$ref":"#/components/schemas/PublicKeyBytes"},"value":{"$ref":"#/components/schemas/TransactionEnvelope"}}},"Signature":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TransactionEnvelope":{"type":"object","description":"A Transaction along with its sender's signature","required":["transaction","signature"],"properties":{"signature":{"$ref":"#/components/schemas/SignatureOrMultiSig"},"transaction":{"$ref":"#/components/schemas/VersionedTransaction"}}},"SignatureOrMultiSig":{"oneOf":[{"type":"object","required":["Signature"],"properties":{"Signature":{"$ref":"#/components/schemas/Signature"}}},{"type":"object","required":["MultiSig"],"properties":{"MultiSig":{"$ref":"#/components/schemas/MultiSig"}}}]},"MultiSig":{"type":"object","required":["config","signatures"],"properties":{"config":{"$ref":"#/components/schemas/MultiSigConfig"},"signatures":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},{"type":"string"}]}}}},"MultiSigConfig":{"type":"object","description":"Together, determines the address of a multisig account.","required":["authorized_signers","quorum","nonce"],"properties":{"authorized_signers":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"The accounts which may sign for a multisig transaction to be accepted"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"Arbitrary data. Useful for creating multiple distinct multisig accounts with the same\ncommittee/quorum."},"quorum":{"$ref":"#/components/schemas/Quorum","description":"The minimum number of accounts that must sign"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"Quorum":{"type":"integer","format":"int64","minimum":0},"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```

## The ValidatorConfigRelease20260319 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The ValidatorConfigRelease20260407 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The ValidatorConfigRelease20260508 object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The VerifierSig object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}}}}
```

## The VersionedTransaction object

```json
{"openapi":"3.1.0","info":{"title":"FastSet Proxy REST API","version":"1.0.0"},"components":{"schemas":{"VersionedTransaction":{"oneOf":[{"type":"object","required":["Release20260319"],"properties":{"Release20260319":{"$ref":"#/components/schemas/TransactionRelease20260319"}}},{"type":"object","required":["Release20260407"],"properties":{"Release20260407":{"$ref":"#/components/schemas/TransactionRelease20260407"}}},{"type":"object","required":["Release20260508"],"properties":{"Release20260508":{"$ref":"#/components/schemas/TransactionRelease20260508"}}}]},"TransactionRelease20260319":{"type":"object","description":"Snapshot of a `release20260319` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claim","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claim":{"$ref":"#/components/schemas/ClaimTypeRelease20260319","description":"Type-dependent data"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimTypeRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}},{"type":"object","description":"Perform several operations","required":["Batch"],"properties":{"Batch":{"$ref":"#/components/schemas/OperationBundleRelease20260319","description":"Perform several operations"}}}],"description":"One of various types of actions that can be packed into a transaction"},"TokenTransferRelease20260319":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"Amount":{"type":"string"},"PublicKeyBytes":{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."},"TokenId":{"type":"string"},"UserData":{"type":"string"},"TokenCreationRelease20260319":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260319":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"Nonce":{"type":"integer","format":"int64","minimum":0},"MintRelease20260319":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260319":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260319":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"State":{"type":"string"},"StateKey":{"type":"string"},"StateUpdateRelease20260319":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260319":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260319","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260319":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"ClaimData":{"type":"string"},"Quorum":{"type":"integer","format":"int64","minimum":0},"VerifierSig":{"type":"object","required":["verifier_addr","sig"],"properties":{"sig":{"$ref":"#/components/schemas/Signature"},"verifier_addr":{"$ref":"#/components/schemas/PublicKeyBytes"}}},"Signature":{"type":"string"},"StateResetRelease20260319":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260319":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260319":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260319"}}},"CommitteeConfigRelease20260319":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319"}}}},"OperationBundleRelease20260319":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260319"}},"OperationRelease20260319":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260319","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260319","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260319","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260319","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260319","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260319","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260319","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260319","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260319","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260319","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260319","description":"Change Committee request"}}}],"description":"One of various types of actions that be put in a multi-operation transaction\nPayload structs are different from the top-level [ClaimType] where we\nneed to support multiple operations with different receivers"},"NetworkId":{"type":"string","description":"A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) compatible identifier.\n\nNetwork IDs are a fixed set of known constants. Use one of the associated\nconstants (e.g. `NetworkId::DEVNET`) or parse from a string via `TryFrom<&str>`."},"TransactionRelease20260407":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260407","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260407":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260407"}},"OperationRelease20260407":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260407","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260407","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260407","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260407","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260407","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260407","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260407","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260407","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260407","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260407","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260407","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260407":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260407":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260407":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260407":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260407":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260407":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260407":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260407":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260407","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260407":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260407":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260407":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260407":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260407"}}},"CommitteeConfigRelease20260407":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260407"}}}},"EscrowRelease20260407":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260407"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260407"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260407"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260407"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260407"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260407":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"FixedAmountOrBps":{"oneOf":[{"type":"object","required":["Fixed"],"properties":{"Fixed":{"$ref":"#/components/schemas/Amount"}}},{"type":"object","description":"Basis points: 0–10000 (i.e. 100.00%)","required":["Bps"],"properties":{"Bps":{"type":"integer","format":"int32","description":"Basis points: 0–10000 (i.e. 100.00%)","minimum":0}}}],"description":"Represents either a fixed amount or a basis-point percentage"},"EscrowCreateJobRelease20260407":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260407"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260407":{"type":"string"},"EscrowSubmitRelease20260407":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowJobIdRelease20260407":{"type":"string"},"EscrowRejectRelease20260407":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"EscrowCompleteRelease20260407":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260407"}}},"TransactionRelease20260508":{"type":"object","description":"Snapshot of a `release20260407` transaction.\n\nCan be deserialized from BCS bytes stored in the DB and converted to the\ncurrent `Transaction` type.","required":["network_id","sender","nonce","timestamp_nanos","claims","archival"],"properties":{"archival":{"type":"boolean","description":"Whether this transaction should be archived.\nWhen an archived transaction is confirmed on a validator,\nsubsequent is_settled requests to that validator must succeed."},"claims":{"$ref":"#/components/schemas/ClaimsRelease20260508","description":"The claims to execute in this transaction"},"fee_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TokenId","description":"The token to use for paying the transaction fee.\nIf `None`, the native token is used (for new tx versions).\nOld tx versions that lack this field get `None` on upcast,\nand the validator resolves them to the default fee token (e.g. USDC)."}]},"network_id":{"$ref":"#/components/schemas/NetworkId","description":"network id"},"nonce":{"$ref":"#/components/schemas/Nonce","description":"A sequence number. Transactions sent by the same account are ordered by nonce."},"sender":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Address of sender, and intended signer of this transaction"},"timestamp_nanos":{"type":"integer","description":"Nanos since the Unix epoch.","minimum":0}}},"ClaimsRelease20260508":{"type":"array","items":{"$ref":"#/components/schemas/OperationRelease20260508"}},"OperationRelease20260508":{"oneOf":[{"type":"object","description":"Transfer tokens","required":["TokenTransfer"],"properties":{"TokenTransfer":{"$ref":"#/components/schemas/TokenTransferRelease20260508","description":"Transfer tokens"}}},{"type":"object","description":"Create custom token","required":["TokenCreation"],"properties":{"TokenCreation":{"$ref":"#/components/schemas/TokenCreationRelease20260508","description":"Create custom token"}}},{"type":"object","description":"Modify custom token","required":["TokenManagement"],"properties":{"TokenManagement":{"$ref":"#/components/schemas/TokenManagementRelease20260508","description":"Modify custom token"}}},{"type":"object","description":"Mint funds in a custom token","required":["Mint"],"properties":{"Mint":{"$ref":"#/components/schemas/MintRelease20260508","description":"Mint funds in a custom token"}}},{"type":"object","description":"Burn tokens from a custom token","required":["Burn"],"properties":{"Burn":{"$ref":"#/components/schemas/BurnRelease20260508","description":"Burn tokens from a custom token"}}},{"type":"object","description":"Initialize the state of an Ethereum blockchain mirroring account","required":["StateInitialization"],"properties":{"StateInitialization":{"$ref":"#/components/schemas/StateInitializationRelease20260508","description":"Initialize the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Update the state of an Ethereum blockchain mirroring account","required":["StateUpdate"],"properties":{"StateUpdate":{"$ref":"#/components/schemas/StateUpdateRelease20260508","description":"Update the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Submit arbitrary data to be settled on the network","required":["ExternalClaim"],"properties":{"ExternalClaim":{"$ref":"#/components/schemas/ExternalClaimRelease20260508","description":"Submit arbitrary data to be settled on the network"}}},{"type":"object","description":"Reset the state of an Ethereum blockchain mirroring account","required":["StateReset"],"properties":{"StateReset":{"$ref":"#/components/schemas/StateResetRelease20260508","description":"Reset the state of an Ethereum blockchain mirroring account"}}},{"type":"object","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","required":["JoinCommittee"],"properties":{"JoinCommittee":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508","description":"Join Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps"}}},{"type":"string","description":"Leave Committee request\nSince no escrow is currently involved with the requests we do not check\nthe unicity of the requests and just process them in the order of their\ntimestamps","enum":["LeaveCommittee"]},{"type":"object","description":"Change Committee request","required":["ChangeCommittee"],"properties":{"ChangeCommittee":{"$ref":"#/components/schemas/CommitteeChangeRelease20260508","description":"Change Committee request"}}},{"type":"object","description":"Escrow operations for three-party refundable payments","required":["Escrow"],"properties":{"Escrow":{"$ref":"#/components/schemas/EscrowRelease20260508","description":"Escrow operations for three-party refundable payments"}}}],"description":"One of various types of actions that can be placed in a transaction's claims bundle"},"TokenTransferRelease20260508":{"type":"object","description":"Transfer tokens to another address","required":["token_id","recipient","amount","user_data"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to transfer"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID to transfer"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Extra data field to associate with this transfer"}}},"TokenCreationRelease20260508":{"type":"object","description":"Create a new token.\nThe token id is derived from the [Transaction]\nso it depends also on the creator and the [Nonce].","required":["token_name","decimals","initial_amount","mints","user_data"],"properties":{"decimals":{"type":"integer","format":"int32","description":"Power of 10 that should be considered a full unit of this token.\nAn [Amount] is still always in least units.","minimum":0},"initial_amount":{"$ref":"#/components/schemas/Amount","description":"Initial balance, which will be held by the creator of the token."},"mints":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Addresses which will be able to create more of this token"},"token_name":{"type":"string","description":"Human-readable name"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"TokenManagementRelease20260508":{"type":"object","description":"Manage an existing token.","required":["token_id","update_id","mints","user_data"],"properties":{"mints":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string","enum":["Add","Remove"]},{"type":"string","description":"A byte sequence that names an entity on or off the FastSet network.\nTypically encoded as an Ed25519 public key."}]},"description":"The minter addresses to be added/removed"},"new_admin":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PublicKeyBytes","description":"The new admin address; preserve existing admin if None"}]},"new_token_name":{"type":["string","null"],"description":"The new human-readable display name; preserve existing name if None"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"The id of the token to be managed"},"update_id":{"$ref":"#/components/schemas/Nonce","description":"The update id for this token (used for sequencing)\nEach update id must be one greater than the last"},"user_data":{"$ref":"#/components/schemas/UserData","description":"Arbitrary userdata attached to this transaction"}}},"MintRelease20260508":{"type":"object","description":"Create more funds of a token.\nThe sender of the [Transaction] must be a current mint of the token.\nWarning: This is not independent of a token management operation that\nremoves the sender of this transaction from the list of mints.","required":["token_id","recipient","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to mint"},"recipient":{"$ref":"#/components/schemas/PublicKeyBytes","description":"Recipient of the new funds"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token.\nThis is calculated using the keccak256 hash over the data encoded in the same way as\nfor signing."}}},"BurnRelease20260508":{"type":"object","description":"Burn tokens of a custom token.\nThe sender of the [Transaction] must hold sufficient balance of the token.","required":["token_id","amount"],"properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Amount to burn"},"token_id":{"$ref":"#/components/schemas/TokenId","description":"Token ID. This is the hash of the TokenCreation transaction that created the token."}}},"StateInitializationRelease20260508":{"type":"object","description":"Initialize one state cell of a blockchain mirroring account","required":["key","initial_state"],"properties":{"initial_state":{"$ref":"#/components/schemas/State","description":"Initial state"},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to initialize"}}},"StateUpdateRelease20260508":{"type":"object","description":"Update the state of a blockchain mirroring account","required":["key","previous_state","next_state","compute_claim_tx_hash","compute_claim_tx_timestamp"],"properties":{"compute_claim_tx_hash":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"compute_claim_tx_timestamp":{"type":"integer","minimum":0},"key":{"$ref":"#/components/schemas/StateKey","description":"Key to update"},"next_state":{"$ref":"#/components/schemas/State","description":"Next state"},"previous_state":{"$ref":"#/components/schemas/State","description":"Previous state"}}},"ExternalClaimRelease20260508":{"type":"object","description":"Submit arbitrary data along with a quorum of signatures from external verifiers","required":["claim","signatures"],"properties":{"claim":{"$ref":"#/components/schemas/ExternalClaimBodyRelease20260508","description":"The claim itself plus the required verifier quorum"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/VerifierSig"},"description":"At least `claim.verifier_quorum` signatures over the enclosing `Transaction` (with this field set to the empty list) by members of `claim.verifier_committee`"}}},"ExternalClaimBodyRelease20260508":{"type":"object","required":["verifier_committee","verifier_quorum","claim_data"],"properties":{"claim_data":{"$ref":"#/components/schemas/ClaimData","description":"Arbitrary data that the verifiers are signing."},"verifier_committee":{"type":"array","items":{"$ref":"#/components/schemas/PublicKeyBytes"},"description":"Set of verifiers (regular  FastSet addresses) that can sign for this ExternalClaim"},"verifier_quorum":{"$ref":"#/components/schemas/Quorum","description":"Minimum number of verifiers in `verifier_committee` for which fastset validators will sign\nthis transaction"}}},"StateResetRelease20260508":{"type":"object","description":"Reset the state of a blockchain mirroring account\nThis claim type is a temporary work-around that allows a left behind account to\nbe easily caught up with the target blockchain's tip. In the future this claim type\nwill be dropped and a left-behind mirroring account will need to settle all\nmissed state updates in order to be caught up.","required":["key","reset_state"],"properties":{"key":{"$ref":"#/components/schemas/StateKey","description":"Key to reset"},"reset_state":{"$ref":"#/components/schemas/State","description":"Reset state"}}},"ValidatorConfigRelease20260508":{"type":"object","required":["address","host","rpc_port"],"properties":{"address":{"$ref":"#/components/schemas/PublicKeyBytes"},"host":{"type":"string"},"rpc_port":{"type":"integer","format":"int32","minimum":0}}},"CommitteeChangeRelease20260508":{"type":"object","required":["new_committee","epoch"],"properties":{"epoch":{"type":"integer","format":"int32","minimum":0},"new_committee":{"$ref":"#/components/schemas/CommitteeConfigRelease20260508"}}},"CommitteeConfigRelease20260508":{"type":"object","required":["validators"],"properties":{"validators":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorConfigRelease20260508"}}}},"EscrowRelease20260508":{"oneOf":[{"type":"object","required":["CreateConfig"],"properties":{"CreateConfig":{"$ref":"#/components/schemas/EscrowCreateConfigRelease20260508"}}},{"type":"object","required":["CreateJob"],"properties":{"CreateJob":{"$ref":"#/components/schemas/EscrowCreateJobRelease20260508"}}},{"type":"object","required":["Submit"],"properties":{"Submit":{"$ref":"#/components/schemas/EscrowSubmitRelease20260508"}}},{"type":"object","required":["Reject"],"properties":{"Reject":{"$ref":"#/components/schemas/EscrowRejectRelease20260508"}}},{"type":"object","required":["Complete"],"properties":{"Complete":{"$ref":"#/components/schemas/EscrowCompleteRelease20260508"}}}],"description":"Escrow operations for three-party refundable payments"},"EscrowCreateConfigRelease20260508":{"type":"object","description":"Create an escrow configuration that evaluators publish","required":["token_id","evaluator","evaluation_fee","min_evaluator_fee"],"properties":{"evaluation_fee":{"$ref":"#/components/schemas/FixedAmountOrBps"},"evaluator":{"$ref":"#/components/schemas/PublicKeyBytes"},"min_evaluator_fee":{"$ref":"#/components/schemas/Amount"},"token_id":{"$ref":"#/components/schemas/TokenId"}}},"EscrowCreateJobRelease20260508":{"type":"object","description":"Create a funded escrow job referencing a config","required":["config_id","provider","provider_fee","description"],"properties":{"config_id":{"$ref":"#/components/schemas/EscrowConfigIdRelease20260508"},"description":{"type":"string"},"provider":{"$ref":"#/components/schemas/PublicKeyBytes"},"provider_fee":{"$ref":"#/components/schemas/Amount"}}},"EscrowConfigIdRelease20260508":{"type":"string"},"EscrowSubmitRelease20260508":{"type":"object","description":"Provider submits a deliverable hash for a job","required":["job_id","deliverable"],"properties":{"deliverable":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowJobIdRelease20260508":{"type":"string"},"EscrowRejectRelease20260508":{"type":"object","description":"Evaluator rejects a job -- refunds client, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}},"EscrowCompleteRelease20260508":{"type":"object","description":"Evaluator completes a job -- pays provider, pays evaluator fee","required":["job_id"],"properties":{"job_id":{"$ref":"#/components/schemas/EscrowJobIdRelease20260508"}}}}}}
```


# JSON-RPC API

The Fast network exposes a JSON-RPC 2.0 API through its proxy service. This is the low-level interface that the SDK uses internally. Most developers should use the SDK instead — it handles serialization, signing, and error recovery automatically.

This page is for developers who need direct access to the protocol-level endpoints.

***

### Endpoints

<table><thead><tr><th width="105.70703125">Network</th><th width="639.171875">Proxy RPC</th></tr></thead><tbody><tr><td><strong>Mainnet</strong></td><td><code>https://api.fast.xyz/proxy</code></td></tr><tr><td><strong>Testnet</strong></td><td><code>https://testnet.api.fast.xyz/proxy</code></td></tr></tbody></table>

<table><thead><tr><th width="105.70703125">Network</th><th width="155.9609375">Fee Token Name</th><th>Token ID</th></tr></thead><tbody><tr><td><strong>Mainnet</strong></td><td><code>USDC</code></td><td><a href="https://explorer.fast.xyz/asset/0xc655a12330da6af361d281b197996d2bc135aaed3b66278e729c2222291e9130">c655a12330da6af361d281b197996d2bc135aaed3b66278e729c2222291e9130</a></td></tr><tr><td><strong>Testnet</strong></td><td><code>testUSDC</code></td><td><a href="https://testnet.explorer.fast.xyz/asset/0xd73a0679a2be46981e2a8aedecd951c8b6690e7d5f8502b34ed3ff4cc2163b46">d73a0679a2be46981e2a8aedecd951c8b6690e7d5f8502b34ed3ff4cc2163b46</a></td></tr></tbody></table>

All requests are `POST` with `Content-Type: application/json`.

#### Request

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "<method_name>",
  "params": { ... }
}
```

#### Responses

All responses have HTTP code 200. Success and error responses are differentiated by their structure.

Success Response

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    ...
  }
}
```

Error Response

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": "<error_code>",
    "message": "<error_message>",
    "data": "<additional_data>"
  }
}
```

***

### Methods

| Method                    | Purpose                                                         |
| ------------------------- | --------------------------------------------------------------- |
| `proxy_submitTransaction` | Submit a signed transaction — returns a certificate on success  |
| `proxy_getAccountInfo`    | Query account balance, nonce, token holdings, and certificates  |
| `proxy_getTokenInfo`      | Look up token metadata (name, decimals, supply, admin, minters) |

***

#### `proxy_submitTransaction`

Submit a signed transaction to the network. The proxy handles the full settlement lifecycle: it broadcasts the transaction to all validators, collects their signatures, assembles a certificate once quorum is reached, and submits the certificate back to validators for settlement.

**Parameters:**

| Field         | Type                  | Description                                           |
| ------------- | --------------------- | ----------------------------------------------------- |
| `transaction` | `Transaction`         | The transaction to submit                             |
| `signature`   | `SignatureOrMultiSig` | Ed25519 signature over the BCS-serialized transaction |

**Returns:** `ProxySubmitTransactionResult`

* `{ "Success": TransactionCertificate }` — transaction settled, certificate returned
* `{ "IncompleteMultiSig": [...] }` — multisig transaction stored, awaiting additional signatures

<details>

<summary>Example request</summary>

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "proxy_submitTransaction",
    "params": {
      "transaction": {
        "network_id": "fast:testnet",
        "sender": [54,128,54,206,88,243,124,101,147,238,105,180,78,172,190,12,193,195,118,236,177,124,79,251,192,63,114,196,255,73,74,81],
        "nonce": 0,
        "timestamp_nanos": 1769705752161000000,
        "claim": {
          "TokenTransfer": {
            "recipient": [75,164,223,195,221,101,117,31,251,60,194,50,41,1,83,17,79,28,61,165,140,36,12,127,122,60,161,218,118,145,112,210],
            "token_id": [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            "amount": "ffff",
            "user_data": null
          }
        },
        "archival": false
      },
      "signature": {
        "Signature": [228,162,180,83,46,167,133,230,176,100,60,110,57,65,23,113,101,204,242,193,125,59,88,232,122,6,90,118,41,159,94,108,20,181,224,234,57,42,35,95,4,186,62,128,68,213,212,46,214,155,241,163,147,120,155,69,201,1,29,63,106,22,75,15]
      }
    }
  }'
```

</details>

<details>

<summary>Example response</summary>

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "Success": {
      "envelope": {
        "transaction": {
          "network_id": "fast:mainnet",
          "sender": [54,128,54,206,...],
          "nonce": 0,
          "timestamp_nanos": 1769705752161000000,
          "claim": {
            "TokenTransfer": {
              "recipient": [75,164,223,195,...],
              "token_id": [250,87,94,112,0,...],
              "amount": "ffff",
              "user_data": null
            }
          },
          "archival": false
        },
        "signature": {
          "Signature": [228,162,180,83,...]
        }
      },
      "signatures": [
        [[223,165,168,37,...], [95,227,196,114,...]],
        [[236,249,103,252,...], [80,65,124,70,...]],
        [[150,20,92,12,...], [26,229,199,218,...]]
      ]
    }
  }
}
```

</details>

***

#### `proxy_getAccountInfo`

Query account information from a validator known to the proxy.

**Parameters:**

| Field                   | Type                        | Description                                                           |
| ----------------------- | --------------------------- | --------------------------------------------------------------------- |
| `address`               | `Array<uint8; 32>`          | The account's Ed25519 public key                                      |
| `token_balances_filter` | `Array<TokenId>` or `null`  | Which token balances to return. `null` = none; `[]` = all tokens held |
| `state_key_filter`      | `Array<StateKey>` or `null` | Which state fields to return. `null` = none; `[]` = all               |
| `certificate_by_nonce`  | `NonceRange` or `null`      | Currently not unabled                                                 |

**Returns:** `AccountInfoResponse`

<details>

<summary>Example request</summary>

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "proxy_getAccountInfo",
    "params": {
      "address": [54,128,54,206,88,243,124,101,147,238,105,180,78,172,190,12,193,195,118,236,177,124,79,251,192,63,114,196,255,73,74,81],
      "token_balances_filter": [],
      "state_key_filter": null,
      "certificate_by_nonce": null
    }
  }'
```

</details>

<details>

<summary>Example response</summary>

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "sender": [54,128,54,206,...],
    "balance": "de0b6b3a7640000",
    "next_nonce": 3,
    "pending_confirmation": null,
    "requested_state": [],
    "requested_certificates": null,
    "requested_validated_transaction": null,
    "token_balance": [
      [[250,87,94,112,0,...], "de0b6b3a7640000"]
    ]
  }
}
```

</details>

***

#### `proxy_getTokenInfo`

Look up metadata for one or more tokens.

**Parameters:**

| Field       | Type                      | Description          |
| ----------- | ------------------------- | -------------------- |
| `token_ids` | `Array<Array<uint8; 32>>` | Token IDs to look up |

**Returns:** `TokenInfoResponse`

<details>

<summary>Example request</summary>

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "proxy_getTokenInfo",
    "params": {
      "token_ids": [
        [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
      ]
    }
  }'
```

</details>

<details>

<summary>Example response</summary>

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "requested_token_metadata": [
      [
        [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
        {
          "update_id": 0,
          "admin": [0,0,...],
          "token_name": "SET",
          "decimals": 18,
          "total_supply": "52b7d2dcc80cd2e4000000",
          "mints": []
        }
      ]
    ]
  }
}
```

</details>

***

### Transaction Signing

To submit a transaction, you must sign it locally before sending it to the proxy.

#### 1. Serialize

Serialize the `Transaction` struct using [BCS (Binary Canonical Serialization)](https://github.com/zefchain/bcs).

BCS libraries:

* **TypeScript/JavaScript:** [`@mysten/bcs`](https://www.npmjs.com/package/@mysten/bcs)
* **Rust:** [`bcs`](https://github.com/zefchain/bcs) (as a `serde` backend)

**Special rule:** Numerical string fields (`Amount` / `Balance`) are encoded as little-endian unsigned 256-bit integers (32 bytes) during BCS serialization.

#### 2. Prefix

Prepend the UTF-8 string `"Transaction::"` to the serialized bytes.

#### 3. Sign

Sign the prefixed bytes with Ed25519 using the sender's private key:

```
signature = ed25519_sign(private_key, "Transaction::" + BCS(transaction))
```

#### 4. Hash

The transaction hash is the keccak256 digest of the BCS-serialized transaction (without the prefix):

```
tx_hash = keccak256(BCS(transaction))
```

#### 5. Submit

Wrap the signature in a `SignatureOrMultiSig` envelope and call `proxy_submitTransaction`.

***

### Data Encoding

| Concept                   | Format                                                         | Example                     |
| ------------------------- | -------------------------------------------------------------- | --------------------------- |
| **Addresses**             | 32-byte Ed25519 public key, as JSON array of unsigned integers | `[54,128,54,206,...,74,81]` |
| **User-facing addresses** | bech32m with `fast` prefix (SDK only, not used in RPC)         | `fast1qxy2kgdy...`          |
| **Amounts**               | Hex-encoded unsigned 256-bit integer (no `0x` prefix)          | `"de0b6b3a7640000"`         |
| **Timestamps**            | `uint128` nanoseconds since Unix epoch                         | `1769705752161000000`       |
| **Nonces**                | `uint64`, auto-incrementing per account, starting at 0         | `0`, `1`, `2`, ...          |

***

### Data Types

#### Transaction

The core unit submitted to the network.

| Field             | Type                | Description                                                                           |
| ----------------- | ------------------- | ------------------------------------------------------------------------------------- |
| `network_id`      | `string`            | The id of the network (e.g., "fast:mainnet", "fast:testnet"). Follows CAIP-2 standard |
| `sender`          | `Array<uint8; 32>`  | Sender's Ed25519 public key                                                           |
| `nonce`           | `uint64`            | Sequence number — must match the account's `next_nonce`                               |
| `timestamp_nanos` | `uint128`           | Nanoseconds since Unix epoch                                                          |
| `claim`           | `ClaimType`         | The operation to perform                                                              |
| `archival`        | `boolean`           | Currently disabled                                                                    |
| `fee_token`       | `TokenId` or `null` | The fee token to use to pay for this transaction. See more details below.             |

> #### Fee token
>
> You can specify a `fee_token` field in your `Transaction` to indicate what token you want to pay the network fee with. If omitted, then the default token is used (currently USDC). Currently, only USDC is supported as the fee token. More tokens could be supported in the future.

#### ClaimType

Determines the operation packed into a transaction.

| Variant           | Type              | Description                                    |
| ----------------- | ----------------- | ---------------------------------------------- |
| `TokenTransfer`   | `TokenTransfer`   | Transfer tokens to the recipient               |
| `TokenCreation`   | `TokenCreation`   | Create a new custom token                      |
| `TokenManagement` | `TokenManagement` | Modify a custom token (admin, minters)         |
| `Mint`            | `Mint`            | Mint additional supply of a custom token       |
| `Burn`            | `Burn`            | Burn an amount of a custom token               |
| `ExternalClaim`   | `ExternalClaim`   | Submit arbitrary data with verifier signatures |
| `Batch`           | `OperationBundle` | Bundle multiple operations in one transaction  |

#### TokenTransfer

| Field       | Type                         | Description                      |
| ----------- | ---------------------------- | -------------------------------- |
| `recipient` | `Array<uint8; 32>`           | Recipient address                |
| `token_id`  | `Array<uint8; 32>`           | Token ID to transfer             |
| `amount`    | `Amount`                     | Amount in raw units (hex string) |
| `user_data` | `Array<uint8; 32>` or `null` | Optional arbitrary data          |

#### TokenCreation

| Field            | Type                         | Description                              |
| ---------------- | ---------------------------- | ---------------------------------------- |
| `token_name`     | `string`                     | Human-readable name                      |
| `decimals`       | `uint8`                      | Decimal places (0–18)                    |
| `initial_amount` | `Amount`                     | Initial supply, credited to the creator  |
| `mints`          | `Array<Array<uint8; 32>>`    | Addresses authorized to mint more supply |
| `user_data`      | `Array<uint8; 32>` or `null` | Optional arbitrary data                  |

The token ID is derived from the keccak256 hash of the BCS-serialized transaction that creates the token.

#### TokenManagement

| Field       | Type                                       | Description                                          |
| ----------- | ------------------------------------------ | ---------------------------------------------------- |
| `token_id`  | `Array<uint8; 32>`                         | Token to manage                                      |
| `update_id` | `uint64`                                   | Sequencing counter — must increment by 1 each update |
| `new_admin` | `Array<uint8; 32>` or `null`               | New admin address, or `null` to keep current         |
| `mints`     | `Array<[AddressChange, Array<uint8; 32>]>` | Minter addresses to add or remove                    |
| `user_data` | `Array<uint8; 32>` or `null`               | Optional arbitrary data                              |

`AddressChange` is either `{ "Add": [...] }` or `{ "Remove": [...] }`.

#### Mint

Sender must be an authorized minter for the token.

| Field       | Type               | Description       |
| ----------- | ------------------ | ----------------- |
| `recipient` | `Array<uint8; 32>` | Recipient address |
| `token_id`  | `Array<uint8; 32>` | Token to mint     |
| `amount`    | `Amount`           | Amount to mint    |

#### Burn

| Field      | Type               | Description    |
| ---------- | ------------------ | -------------- |
| `token_id` | `Array<uint8; 32>` | Token to burn  |
| `amount`   | `Amount`           | Amount to burn |

#### ExternalClaim

Submit arbitrary data verified by a set of external verifiers.

| Field                | Type                      | Description                              |
| -------------------- | ------------------------- | ---------------------------------------- |
| `verifier_committee` | `Array<Array<uint8; 32>>` | Verifier public keys                     |
| `verifier_quorum`    | `uint64`                  | Minimum verifier signatures required     |
| `claim_data`         | `Array<uint8>`            | Arbitrary data payload                   |
| `signatures`         | `Array<VerifierSig>`      | Verifier signatures over the transaction |

Each `VerifierSig` contains `verifier_addr` (public key) and `sig` (Ed25519 signature over the `Transaction` struct without verifier signatures).

#### OperationBundle

An array of `Operation` objects. Each `Operation` is one of: `TokenTransfer` (with explicit `recipient`), `TokenCreation`, `TokenManagement`, `ExternalClaim`, `Mint` (with explicit `recipient`), or `Burn`.

The `TokenTransfer` and `Mint` variants inside a bundle include a `recipient` field, since the bundle allows operations targeting different recipients within a single transaction.

***

#### Response Types

**AccountInfoResponse**

| Field                    | Type                                      | Description                                 |
| ------------------------ | ----------------------------------------- | ------------------------------------------- |
| `sender`                 | `Array<uint8; 32>`                        | Account address                             |
| `balance`                | `Balance`                                 | Native SET balance (hex string)             |
| `next_nonce`             | `uint64`                                  | Next valid nonce for this account           |
| `pending_confirmation`   | `ValidatedTransaction` or `null`          | Transaction validated but not yet confirmed |
| `requested_state`        | `Array<[StateKey, State]>`                | Requested state fields                      |
| `requested_certificates` | `Array<TransactionCertificate>` or `null` | Certificates in the requested nonce range   |
| `token_balance`          | `Array<[TokenId, Balance]>`               | Custom token balances                       |

**TokenInfoResponse**

| Field                      | Type                              | Description               |
| -------------------------- | --------------------------------- | ------------------------- |
| `requested_token_metadata` | `Array<[TokenId, TokenMetadata]>` | Token ID → metadata pairs |

`TokenMetadata` fields: `update_id`, `admin`, `token_name`, `decimals`, `total_supply`, `mints`.

**TransactionCertificate**

| Field        | Type                                 | Description                             |
| ------------ | ------------------------------------ | --------------------------------------- |
| `envelope`   | `TransactionEnvelope`                | The transaction + sender's signature    |
| `signatures` | `Array<[PublicKeyBytes, Signature]>` | Validator signatures forming the quorum |

`TransactionEnvelope` contains `transaction` (`Transaction`) and `signature` (`SignatureOrMultiSig`).

**ProxySubmitTransactionResult**

| Variant              | Payload                  | Description                                           |
| -------------------- | ------------------------ | ----------------------------------------------------- |
| `Success`            | `TransactionCertificate` | Transaction settled successfully                      |
| `IncompleteMultiSig` | `array`                  | Multisig transaction stored, awaiting more signatures |

***

#### Primitive Types

| Type                  | Format                                                               | Description                                                            |
| --------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| `Amount`              | Hex string (unsigned 256-bit)                                        | Token amount in raw units. Example: `"de0b6b3a7640000"` = 10¹⁸ = 1 SET |
| `Balance`             | Hex string (signed 257-bit)                                          | Like Amount, but may be negative (prefixed with `-`)                   |
| `Nonce`               | `uint64`                                                             | Sequence number                                                        |
| `NonceRange`          | `{ start: Nonce, limit: uint }`                                      | Range query for certificates                                           |
| `PublicKeyBytes`      | `Array<uint8; 32>`                                                   | Ed25519 public key                                                     |
| `Signature`           | `Array<uint8; 64>`                                                   | Ed25519 signature                                                      |
| `SignatureOrMultiSig` | `{ "Signature": [...] }` or `{ "MultiSig": { config, signatures } }` | Single or multisig authentication                                      |
| `TokenId`             | `Array<uint8; 32>`                                                   | Unique token identifier                                                |
| `StateKey`            | `Array<uint8; 32>`                                                   | Account state field key                                                |
| `State`               | `Array<uint8; 32>`                                                   | Account state field value                                              |
| `UserData`            | `Array<uint8; 32>` or `null`                                         | Optional arbitrary data attached to a transaction                      |

***

#### MultiSig

For accounts controlled by multiple signers.

**MultiSigConfig** — determines the multisig account address:

| Field                | Type                    | Description                                                      |
| -------------------- | ----------------------- | ---------------------------------------------------------------- |
| `authorized_signers` | `Array<PublicKeyBytes>` | Accounts that may sign                                           |
| `quorum`             | `uint64`                | Minimum signatures required                                      |
| `nonce`              | `uint64`                | Distinguishes multiple multisig accounts with the same committee |

**MultiSig** — authentication envelope:

| Field        | Type                                 | Description                          |
| ------------ | ------------------------------------ | ------------------------------------ |
| `config`     | `MultiSigConfig`                     | The account's multisig configuration |
| `signatures` | `Array<[PublicKeyBytes, Signature]>` | Signatures from authorized signers   |

***

### Error Codes

Standard JSON-RPC 2.0 error codes plus application-specific codes:

| Code     | Message          | Description                                                                                                                          |
| -------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `-32700` | Parse error      | Malformed JSON in request body                                                                                                       |
| `-32601` | Method not found | The requested method does not exist                                                                                                  |
| `-32602` | Invalid params   | Missing or invalid parameters                                                                                                        |
| `-32014` | Unexpected Nonce | The nonce of the transaction is incorrect                                                                                            |
| `-32015` | Invalid Request  | The transaction exceeds various limits (size, number of signatures, token name length, number of minters, number of claims in batch) |
| `-32000` | General Error    | Other general errors                                                                                                                 |

***

### Architecture Note

The proxy is a convenience layer — it is not part of the trust model. It relays messages, aggregates signatures, and assembles certificates, but it cannot forge signatures or alter transactions. Anyone can run a proxy.

In the current network configuration, validators are not directly accessible. All traffic routes through the proxy service. This is a temporary operational decision to prevent DDoS attacks — not a protocol requirement. The protocol itself is fully functional with direct client-to-validator communication.


# FastSet Protocol

*Note: This page describes how the underlying protocol of Fast works. If you are building with the SDK, you do NOT need to understand any of this — the SDK handles all protocol interactions for you.*

FastSet is the settlement protocol that powers the Fast network. It enables parallel claim processing across independent validators — without consensus, block production, or validator-to-validator communication.

***

### Design Principles

Traditional settlement systems — blockchains, payment networks, clearinghouses — serialize transactions into a single ordered sequence. This creates a bottleneck: every transaction waits for every other transaction, even when they are unrelated.

FastSet takes a different approach. It observes that most real-world transactions are **independent**: Alice paying Bob has nothing to do with Carol paying Dave. Independent transactions can be processed in any order with the same result. FastSet exploits this property — called **weak independence** — to settle claims in parallel, with no global ordering and no consensus protocol.

The result: sub-second finality, zero fees, and throughput that scales with the number of validators rather than being bottlenecked by a single leader.

### Participants

#### Clients (Agents)

A client is any entity that submits claims to the network: a user, an AI agent, a smart contract, an L2 rollup, a bridge, or an oracle. Each client holds an Ed25519 key pair. The public key doubles as the client's account address.

#### Validators

Validators process claims and maintain a local copy of the global state. They validate incoming claims, sign those they accept, and apply state changes when claims are settled.

The protocol assumes **3f+1** total validators, of which at most **f** may be Byzantine (malicious or faulty). A **quorum** is any subset of **2f+1** validators. A claim signed by a quorum becomes a **certificate** — the protocol's unit of finality.

Validators never communicate with each other. Each validator independently receives claims, validates them against its local state, and signs those it accepts. Despite this independence, the protocol guarantees that all honest validators converge to the same final state.

#### Verifiers

Verifiers are specialized clients that perform domain-specific verification before a claim reaches validators. They are optional — most claims are validated directly by validators. Verifiers are useful for heavy or specialized workloads: zero-knowledge proof checking, TEE attestation, semantic verification of execution traces, or off-chain computation.

A client specifies which verifiers must approve its claim and the required quorum. Verifiers sign the claim independently, and their signatures are aggregated before the claim is broadcast to validators.

#### Proxy

The proxy is a convenience layer that handles message routing between clients and validators. It broadcasts claims, collects validator signatures, and assembles certificates. The proxy is **not trusted** — it cannot forge signatures, alter claims, or affect correctness. Anyone can run a proxy. The protocol functions identically without one; it exists purely to simplify network operations.

***

### The Protocol: Seven Steps

The following describes the lifecycle of a single transaction — from creation to settlement.

{% code fullWidth="false" %}

```
                       FastSet Protocol: 7 Steps

   +----------+  1. Claim   +----------+              +------------------------+
   |  Agent   |------------>|          |------------->|      Validators        |
   +----------+             |          |              |                        |
                            |          |              |  +----+ +----+ +----+  |-------------+
   +----------+  2. Verify  |          |              |  |    | |    | |    |  | 3. Validate |
   | Verifier |------------>|  Proxy   |------------->|  +----+ +----+ +----+  |<------------+
   |          |             |          |              |  +----+ +----+ +----+  |
   |  +----+  |             |          |  4. Sign     |  |    | |    | |    |  |
   |  |    |  |             |          |<-------------|  +----+ +----+ +----+  |
   |  +----+  |             |          |  5. Confirm  |                        |
   |  +----+  |             |          |------------->|   . . . . . . . . .    |-------------+
   |  |    |  |             |          |              |                        | 6. Presettle|
   |  +----+  |             |          |              |  +----+ +----+ +----+  |<------------+
   |   . . .  |             |          |              |  |    | |    | |    |  |          
   |  +----+  |             |          |              |  +----+ +----+ +----+  |-------------+
   |  |    |  |             |          |              |                        | 7. Settle   |
   |  +----+  |             |          |              |                        |<------------+
   +----------+             +----------+              +------------------------+ 

   The 7-Step Flow:
   1. Agent submits Claim to Proxy
   2. Verifier sends verification proofs to Validators (via Proxy)
   3. Validators validate the claim
   4. Validators sign and return signature to Proxy
   5. Proxy confirms transaction to Validators
   6. Validators presettle (prepare state)
   7. Validators finalize settlement

```

{% endcode %}

#### Step 1 — Transaction Creation

A client say an agent `a` constructs a transaction: a sequence of one or more claims, bundled with a nonce (a per-account counter that prevents replay and enforces ordering). The client signs the entire transaction with its private key.

```
m = ⟨c₁, c₂, …, cₖ, nonce⟩_a
```

#### Step 2 — Verification (optional)

If the transaction requires verifier approval, the designated verifiers each independently verify and sign it. Their signatures are aggregated into a single compact proof.

#### Step 3 — Validation

Each validator receives the transaction and checks:

1. **Signature** — the client's signature is valid
2. **Nonce** — matches the validator's expected next nonce for this account
3. **No equivocation** — the validator has not already signed a *different* transaction from this account at this nonce
4. **Verifier quorum** — if verifiers are specified, their aggregated signatures are valid and meet the required threshold
5. **Claim validity** — each claim in the transaction is valid against the validator's current local state (e.g., sufficient balance for a transfer)

#### Step 4 — Validator Signature

If all checks pass, the validator signs the transaction and returns its signature to the proxy. It also records the transaction as *pending* for this account, preventing itself from signing a conflicting transaction at the same nonce.

#### Step 5 — Certificate Creation

Once the proxy collects signatures from a quorum of validators (2f+1 out of 3f+1), it assembles them into a **certificate**. The certificate is cryptographic proof that the transaction has been accepted by the network. At this point, settlement is guaranteed — the transaction cannot be reversed.

#### Step 6 — Pre-settlement

The certificate is broadcast to all validators. Each validator verifies the quorum and adds the transaction to its *pre-settled* set — acknowledged but not yet applied to state.

#### Step 7 — Settlement

A validator settles a pre-settled transaction when two conditions are met:

1. **Nonce ordering** — all prior transactions from the same account have already settled
2. **Claim validity** — the claims remain valid in the validator's current local state

Upon settlement, the validator increments the account's nonce, applies the state changes, and moves the transaction to its *settled* set.

***

### Weak Independence

Two claims are **weakly independent** if processing them in either order produces the same final state — whenever both are individually valid.

Formally: claims c₁ and c₂ are weakly independent if, for any state s where both c₁ and c₂ are independently valid, the sequences c₁→c₂ and c₂→c₁ both produce the same resulting state.

Examples:

* **Weakly independent:** Alice pays Bob; Carol pays Dave. Different senders, no shared state — order does not matter.
* **Not weakly independent:** Alice pays Bob 5; Alice pays Carol 5 (and Alice has only 7). The order determines who gets paid.

FastSet requires that claims from *different* accounts are weakly independent. Claims from the *same* account are ordered by nonce, so they never run concurrently.

This property is what eliminates the need for consensus. Validators process claims in whatever order they arrive. Because independent claims commute, all validators converge to the same state — regardless of arrival order.

***

### Correctness Guarantees

Under the assumption that more than two-thirds of validators are honest, the protocol provides four guarantees:

| Property         | Guarantee                                                                                                  |
| ---------------- | ---------------------------------------------------------------------------------------------------------- |
| **Safety**       | At most one certificate exists per account per nonce. Double-spending is impossible.                       |
| **Determinism**  | The order in which a validator receives messages does not affect the final state.                          |
| **Monotonicity** | Once a transaction becomes settleable, it remains settleable regardless of other accounts' activity.       |
| **Liveness**     | If any honest validator makes progress, all honest validators eventually do. The network cannot get stuck. |

These properties hold without global ordering, without a leader, and without validators communicating with each other. They are a direct consequence of weak independence.

***

### Eventual Consistency

Validators do not maintain identical state at any given moment. They converge over time as certificates propagate and settle. This is **eventual consistency** — the same model used by globally distributed databases and CDN networks.

The guarantee: if no new transactions are submitted, all honest validators will eventually reach the same state. In practice, with continuous transaction flow, validators may always have slightly different views — but the weak independence property ensures these differences are harmless and always resolvable.

***

### Performance Benchmark

Our latest load test demonstrated sustained throughput of approximately **160,000 transactions per second (TPS)**, with a peak of **\~168,000 TPS** observed.

#### Machine Specs

<table><thead><tr><th width="187.9765625"></th><th width="212.578125">CPU</th><th width="97.15234375">RAM</th><th width="119.70703125">Bandwidth</th><th>Data Center</th></tr></thead><tbody><tr><td>Validator 1</td><td>AMD EPYC 9454P</td><td>256 GB</td><td>10 Gbps</td><td>FSN1-DC22</td></tr><tr><td>Validator 2-4</td><td>AMD EPYC 9454P</td><td>256 GB</td><td>10 Gbps</td><td>FSN1-DC21</td></tr><tr><td>Load Generator 1</td><td>AMD EPYC 9454P</td><td>128 GB</td><td>10 Gbps</td><td>FSN1-DC19</td></tr><tr><td>Load Generator 2</td><td>AMD Ryzen 9 7950X3D</td><td>128 GB</td><td>10 Gbps</td><td>FSN1-DC16</td></tr><tr><td>Load Generator 3</td><td>AMD Ryzen 9 7950X3D</td><td>128 GB</td><td>1 Gbps</td><td>FSN1-DC12</td></tr></tbody></table>

#### Validator Configuration

4 validators (quorum of 3). The primary validator persists all transactions to a database, while the remaining three operated without database persistence. Note that persistence is not required for running a validator and is not part of the protocol. Validators configured with persistence can be considered an "archive node" in the traditional sense.

The observed CPU utilization on validator 1 reached 100%, while the other three remains stable at around 80%.

#### Load Generator Configuration

* Load generator1: Two load generator programs, each with 40 threads and 200 concurrent accounts. Each of them generated 40-45k TPS. Observed CPU utilization was 80-90%.
* Load generator 2: Three load generator programs, each with 15 threads and 256 concurrent connections. Each of them generated around 15k TPS. CPU utilization was > 95%.
* Load generator 3: A single load generator program with 16 threads and 256 concurrent connections. It generated 10k TPS and it was limited by the external bandwidth

***

### Further Reading

* [FastSet whitepaper](https://arxiv.org/abs/2506.23395) — full formal treatment with proofs


# AllSet Portal

*Note: If you are using the SDK, AllSet works automatically. You do not need to understand any of this to send or receive payments. This page explains what happens under the hood.*

AllSet is Fast's clearing gateway — the interchange layer that connects Fast to external networks like Ethereum, Base, and Arbitrum. It handles all cross-network fund movement so your agent can receive deposits from any supported network and withdraw to any destination, without managing multiple wallets or dealing with cross-network complexity.

***

### What AllSet Does

Fast is a high-performance settlement network. But funds often start somewhere else — a user's Ethereum wallet, a USDC balance on Base, or an agent's holdings on Arbitrum. AllSet connects these external networks to Fast, so funds can flow in and out seamlessly.

Three operations:

| Operation      | What happens                                                                             |
| -------------- | ---------------------------------------------------------------------------------------- |
| **Deposit**    | Funds move from an external network into a Fast account                                  |
| **Withdrawal** | Funds move from a Fast account to an external network                                    |
| **Revoke**     | A failed or cancelled withdrawal is reversed — funds return to the sender's Fast account |

From the user's or agent's perspective, these look like simple transfers. AllSet handles the cross-network coordination, verification, and settlement internally.

***

### How Deposits Work

A deposit moves funds from an external network (e.g., Ethereum) into a Fast account.

**Step by step:**

1. **User sends funds** to an AllSet contract on the external network (e.g., deposits USDC on Base).
2. **AllSet detects the deposit** — a monitoring service watches for deposit events on each supported network.
3. **Verification** — AllSet generates cryptographic proof that the deposit occurred on the external network and submits it to a pool of verifiers.
4. **Settlement on Fast** — once the verifiers confirm the deposit, the equivalent balance is credited to the user's Fast account.

The key guarantee: funds are only credited on Fast after the deposit on the external network is cryptographically verified. No trust assumptions beyond the verification quorum.

**What the user sees:** "I deposited USDC on Base, and it appeared in my Fast account."

***

### How Withdrawals Work

A withdrawal moves funds from a Fast account to an external network (e.g., Arbitrum).

**Step by step:**

1. **User initiates withdrawal on Fast** — the funds are transferred to a designated account on Fast, along with a withdrawal intent specifying the destination network and recipient address.
2. **Relayer detects the intent** — AllSet's relayer service monitors for withdrawal intents and forwards them to the destination network.
3. **Funds released on the destination network** — the AllSet contract on the destination network verifies the intent and releases the equivalent funds to the recipient.
4. **Verification and cleanup** — AllSet generates proof that the withdrawal completed on the destination network. Verifiers confirm it, and the corresponding balance on Fast is burned to maintain the invariant.

**What the user sees:** "I withdrew USDC from Fast, and it arrived in my Arbitrum wallet."

***

### Revokes

If a withdrawal fails — for example, due to invalid parameters or a destination network issue — the user can revoke the withdrawal. The funds are returned to their Fast account. No funds leave the external network's AllSet contract, and the system's balance invariant is maintained.

Revokes are a safety mechanism, not a normal operation. Under typical conditions, withdrawals complete successfully.

***

### The Invariant

AllSet maintains one critical guarantee:

> **The total funds held in AllSet contracts across all external networks always equals the total corresponding balance available on Fast.**

Every deposit increases both sides equally. Every withdrawal decreases both sides equally. Every revoke restores both sides to their pre-withdrawal state. This invariant is enforced by the verification system — it cannot be violated without compromising the verifier quorum.

***

### Supported Networks

| Network          | Status  |
| ---------------- | ------- |
| Ethereum Sepolia | Live    |
| Arbitrum Sepolia | Live    |
| Arbitrum         | Live    |
| Base             | Live    |
| Polygon          | Planned |
| Solana           | Planned |
| Tron             | Planned |

The SDK automatically routes deposits and withdrawals through the appropriate network. Developers do not need to specify AllSet parameters — the SDK selects the optimal path.

***

### Architecture

AllSet consists of three off-chain services and a set of on-chain contracts:

#### Services

| Service       | Role                                                                                                                                                           |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Generator** | Monitors external networks for deposit, withdrawal, and revoke events. Produces cryptographic proofs that these events occurred and submits them to verifiers. |
| **Verifiers** | A quorum of independent verifiers that validate the Generator's proofs and co-sign claims on Fast. A claim is only accepted when enough verifiers agree.       |
| **Relayer**   | Monitors Fast for withdrawal intents and forwards them to the appropriate external network for execution.                                                      |

#### On-chain contracts

Each supported external network has an AllSet contract deployed on it. These contracts:

* Accept deposits (lock or burn the deposited funds)
* Release funds on withdrawal (mint or transfer to the recipient)
* Enforce replay protection (each withdrawal can only be executed once)
* Support arbitrary execution on the destination network — enabling advanced flows like cross-network swaps

#### Flow summary

```
DEPOSIT:    External Network → [AllSet Contract] → Generator → Verifiers → Fast
WITHDRAWAL: Fast → Relayer → [AllSet Contract] → External Network → Generator → Verifiers → Fast (cleanup)
```

***

### Further Reading

* [FastSet Protocol](/advanced/fastset-protocol) — how the underlying settlement network works
* [JSON-RPC API](/api-reference/json-rpc-api) — direct access to the network's protocol-level endpoints


# AllSet Services Prometheus Metrics

All services expose Prometheus-format metrics via HTTP `GET /metrics`.

### Endpoints

URL pattern: `{endpoint}/{chain}/{service}-metrics/metrics`

**Mainnet — `https://allset.fast.xyz`**

**Ethereum**

* Generator: <https://allset.fast.xyz/ethereum/generator-metrics/metrics>
* Verifier: <https://allset.fast.xyz/ethereum/verifier-metrics/metrics>
* Relayer: <https://allset.fast.xyz/ethereum/relayer-metrics/metrics>
* Block Hash: <https://allset.fast.xyz/ethereum/block-hash-metrics/metrics>

**Base**

* Generator: <https://allset.fast.xyz/base/generator-metrics/metrics>
* Verifier: <https://allset.fast.xyz/base/verifier-metrics/metrics>
* Relayer: <https://allset.fast.xyz/base/relayer-metrics/metrics>
* Block Hash: <https://allset.fast.xyz/base/block-hash-metrics/metrics>

**Arbitrum**

* Generator: <https://allset.fast.xyz/arbitrum/generator-metrics/metrics>
* Verifier: <https://allset.fast.xyz/arbitrum/verifier-metrics/metrics>
* Relayer: <https://allset.fast.xyz/arbitrum/relayer-metrics/metrics>
* Block Hash: <https://allset.fast.xyz/arbitrum/block-hash-metrics/metrics>

**Testnet — `https://testnet.allset.xyz`**

**Ethereum Sepolia**

* Generator: <https://testnet.allset.xyz/ethereum-sepolia/generator-metrics/metrics>
* Verifier: <https://testnet.allset.xyz/ethereum-sepolia/verifier-metrics/metrics>
* Relayer: <https://testnet.allset.xyz/ethereum-sepolia/relayer-metrics/metrics>
* Block Hash: <https://testnet.allset.xyz/ethereum-sepolia/block-hash-metrics/metrics>

**Arbitrum Sepolia**

* Generator: <https://testnet.allset.xyz/arbitrum-sepolia/generator-metrics/metrics>
* Verifier: <https://testnet.allset.xyz/arbitrum-sepolia/verifier-metrics/metrics>
* Relayer: <https://testnet.allset.xyz/arbitrum-sepolia/relayer-metrics/metrics>
* Block Hash: <https://testnet.allset.xyz/arbitrum-sepolia/block-hash-metrics/metrics>

***

### Generator

| Metric                   | Type    | Description                                                    |
| ------------------------ | ------- | -------------------------------------------------------------- |
| `total_generate_succeed` | Counter | Cumulative count of successfully generated claims              |
| `total_generate_failed`  | Gauge   | Failed generations since last success (resets to 0 on success) |
| `pending_logs_count`     | Gauge   | Number of log records currently in pending status              |
| `reorged_logs_total`     | Counter | Cumulative count of logs marked failed due to chain reorg      |

* `total_generate_succeed` / `total_generate_failed` — incremented in `utils.rs` during claim generation; failed gauge resets on each success.
* `pending_logs_count` — set in `poller.rs` after each poll cycle.
* `reorged_logs_total` — incremented in `poller.rs` when a reorg is detected and logs are invalidated.

### Verifier

| Metric                 | Type    | Description                                                      |
| ---------------------- | ------- | ---------------------------------------------------------------- |
| `total_verify_succeed` | Counter | Cumulative count of successfully verified claims                 |
| `total_verify_failed`  | Gauge   | Failed verifications since last success (resets to 0 on success) |

* Both metrics are updated in `poller.rs` during the verification loop.

### Relayer

| Metric                | Type    | Description                                                       |
| --------------------- | ------- | ----------------------------------------------------------------- |
| `total_relay_succeed` | Counter | Cumulative count of successfully relayed transactions             |
| `total_relay_failed`  | Gauge   | Failed relay attempts since last success (resets to 0 on success) |
| `queue_size`          | Gauge   | Current number of jobs in the relay queue                         |

* `queue_size` — incremented in `submitter.rs` when a job is enqueued, decremented on dequeue.
* `total_relay_succeed` — incremented in `monitor.rs` when on-chain confirmation is received.
* `total_relay_failed` — incremented in `submitter.rs` / `monitor.rs` on failure; resets on success.

### Block Hash

| Metric                        | Type    | Description                                                                        |
| ----------------------------- | ------- | ---------------------------------------------------------------------------------- |
| `total_processed_blocks`      | Counter | Cumulative count of successfully processed blocks                                  |
| `block_processing_queue_size` | Gauge   | Current number of blocks waiting in the processing queue                           |
| `failed_block_submissions`    | Gauge   | Failed block submissions since last successful processing (resets to 0 on success) |
| `retried_blocks`              | Counter | Cumulative count of blocks that were retried                                       |

* All metrics are updated in `processing.rs` during the block processing loop.


# K Framework and Formal Verification

*Note: This page explains what K Framework and formal verification add to Fast and to agentic payments. If you are building with the SDK, you do NOT need to understand any of this to send or receive payments. This page is about why this matters under the hood.*

[K framework](https://kframework.org/) is the technology used to describe and verify how a system is supposed to behave — precisely enough that the specification itself can be executed and checked by a machine. In practice, this gives payment infrastructure an independent way to validate that critical execution logic is correct, not just that a network accepted the result.

### Why This Matters

A blockchain can prove that:

* a transaction was signed
* a transaction was included
* a state transition was finalized
* the network accepted the result according to its current implementation

Those are useful guarantees. But they answer only one question: *Did the system accept this result?* In many cases, that is not enough. The more important question is: *Was the system actually correct to accept it?*

This is where K framework and formal verification adds value. It helps verify the rules and the implementation behind the result — not just the fact that the result was finalized.

### What K Framework Does

K framework lets engineers write an executable specification of a system such as:

* a virtual machine
* a smart contract language
* a bridge or relayer execution model
* a protocol's state transition rules

An executable specification is more than documentation. It is a precise model of how the system should behave, including edge cases. This matters because most systems are otherwise defined by a mix of code, prose specifications, tests, and implicit assumptions.

K turns those rules into something machine-checkable. That makes it possible to compare a real implementation against a rigorous reference model.

Compared to blockchain and consensus verification, K and formal verification adds additional values as below:

| Blockchain verification tells you... | K and formal verification tell you...            |
| ------------------------------------ | ------------------------------------------------ |
| This transaction was accepted        | The implementation should have accepted it       |
| This block finalized                 | The execution rules were applied correctly       |
| This contract returned a result      | This contract matches the intended specification |

Consensus is very good at making many machines agree. It is not good at telling you whether they are all agreeing on the wrong thing. If every validator or execution node runs the same buggy logic, the network can still finalize the wrong result perfectly consistently. K and formal verification helps catch exactly that class of problem, including but not limited to:

* implementation/spec mismatches
* incorrect handling of edge cases
* bugs introduced during protocol upgrades
* incorrect gas or fee accounting
* differences between a custom VM and the standard it claims to follow
* relayer or bridge logic that depends on ambiguous behavior

### How This Matters More In Agentic Payments

Agentic payments are different from ordinary user-initiated payments.

In a normal payment flow, a human decides to send money, approves the transaction, and the system settles it. In an agentic payment flow, money often moves automatically because another machine claims that something happened:

* a job completed
* a service delivered a result
* an API request consumed billable compute
* a bridge observed an event on another network
* a contract reached a state that should unlock payment

So the question is often not just: Did a payment settle? It is: Was the thing that triggered the payment actually correct? That is where formal verification becomes more valuable. It adds assurance not just to the payment itself, but to the software execution and state transition that caused the payment to happen.

### Summary

K framework and formal verification give Fast an additional layer of trust that ordinary blockchain verification does not provide. They make it possible to check:

* whether implementations match intended semantics
* whether upgrades preserve correctness
* whether relayed or bridged execution results can be trusted
* whether automated payment conditions rest on sound execution logic

For agentic payments, that matters because money increasingly moves in response to software behavior, not human approval. The stronger the automation, the more important it becomes to verify not just that a result was finalized, but that it was correct.

**Further Reading**

* [FastSet Protocol](/advanced/fastset-protocol) — how the underlying Fast settlement protocol works
* [AllSet Layer](/advanced/allset-layer) — how Fast connects to external networks
* [K framework](https://kframework.org/) — official K Framework site


# FAQ

### About Fast

#### What is Fast?

Fast is payment infrastructure for programmatic transactions. It enables agents, APIs, merchants, and services to request, authorize, send, and settle payments — fully programmatically, across both crypto and fiat rails. It processes payments, including agentic payments and micropayments, in a massively parallel manner.

Fast delivers sub-second finality, near-zero fees, and uncapped throughput that scales with the rising agent economy. Fast needs no blocks, no miners, and no consensus protocol. Instead, all transactions are concurrently processed and settled.

#### Is Fast a blockchain?

No. Fast is fundamentally different from blockchains.

Blockchains serialize all transactions into an ordered chain of blocks, even when those transactions have nothing to do with each other. This creates a bottleneck. Fast observes that most transactions are independent — Alice paying Bob has nothing to do with Carol paying Dave — and processes them in parallel. The result is orders of magnitude more throughput without sacrificing security or decentralization.

#### How fast is Fast?

* **Throughput:** Acheived 200,000+ transactions per second on standard hardware
* **Finality:** Sub-100ms for a single transaction to be irreversibly settled

These numbers are achieved without specialized hardware. Validators perform only signature operations — all complex computation happens off-network.

#### How does Fast prevent double-spending without ordering transactions?

Each account has a nonce — a sequence number that increments with every transaction. Validators enforce per-account ordering: they will not sign a second transaction from the same account at the same nonce. This makes double-spending impossible without compromising a quorum of validators. Transactions from different accounts are processed in any order because they are weakly independent — the final state is the same regardless of ordering.

#### Is Fast decentralized?

Yes, but not at the cost of what a blockchain takes. Because Fast validators do not communicate with each other, adding more validators does not slow down the network. Every validator independently processes transactions and converges to the same state. Anyone can run a validator on commodity hardware.

***

### For Developers

#### How do I get started?

Install the SDK and send your first payment in under two minutes:

```bash
npm install @fastxyz/sdk
```

The SDK provides `Signer`, `FastProvider`, and `TransactionBuilder` for building, signing, and submitting transactions. For complete setup instructions and runnable examples, see the [Fast SDK on GitHub](https://github.com/fastxyz/fast-sdk).

No API keys. No account registration. No configuration files.

#### What's the learning curve?

For payments — minimal. Use the CLI for quick interactions (`fast account create`, `fast send`, `fast info balance`) or the SDK for programmatic access (`Signer`, `FastProvider`, `TransactionBuilder`). The SDK handles all the complexity of signing and network communication. If you can call a function, you can use Fast. See the [CLI README](https://github.com/fastxyz/fast-sdk/blob/main/app/cli/README.md) and [SDK README](https://github.com/fastxyz/fast-sdk/blob/main/packages/fast-sdk/README.md) for details.

For advanced use cases — custom tokens, cross-network transfers, or direct JSON-RPC access — see the [SDK Reference](/sdk-references/overview).

#### How do payments work for AI agents?

An agent uses the SDK or CLI to create a signer, and starts sending and receiving payments immediately. The signer is created locally — no registration, no approval process. Agents can:

* **Pay other agents** for services (data, compute, API access)
* **Receive payments** from other agents or users
* **Manage balances** autonomously

All payments settle in under a second with no fees, making micropayments viable. An agent can make thousands of sub-cent payments per hour without batching or accumulating debt.

***

### Security and Trust

#### What cryptographic guarantees does Fast provide?

Fast uses Ed25519 digital signatures and a Byzantine fault-tolerant quorum model (3f+1 validators, at most f faulty). Four guarantees hold under this model:

* **Safety:** Only one transaction can be settled per account per nonce — double-spending is impossible
* **Determinism:** The order validators receive messages does not affect the final state
* **Monotonicity:** Once a transaction becomes settleable, it stays settleable
* **Liveness:** If any honest validator makes progress, all honest validators eventually do

#### How is the protocol verified?

The FastSet protocol has been mathematically proved correct in the [FastSet whitepaper](https://arxiv.org/abs/2506.23395).


# Legal

FastSet is a payment and settlement network that currently uses an initial limited operator/validator set, which may expand over time. Do not claim mature or fully decentralized operation unless approved by legal.

[Terms of Service](https://pi2labs.org/terms-of-service)

[Privacy Policy](https://pi2labs.org/privacy-policy)

[Acceptable Use Policy](https://pi2labs.org/acceptable-use-policy)

[Risk Disclosure](https://pi2labs.org/risk-disclosure)

[Cookie Policy](https://pi2labs.org/cookie-policy)

[Merchant and Seller Terms](https://pi2labs.org/merchant-seller-terms)

[Legal Center](https://pi2labs.org/legal)


# Quickstart

Add payments to your AI agent in under 2 minutes.


# Core Concepts


# Use Cases


# Overview

Fast is a distributed settlement protocol designed for parallel claim processing at internet speed.

It is inspired by blockchains, but built to overcome their core performance limitation: global consensus and sequential execution. Fast does not require validator-to-validator communication, consensus rounds, or a globally enforced transaction order.

Instead, it enables independent, parallel validation while preserving security and correctness.

## Not just another blockchain

Fast shares some characteristics with blockchains. It is decentralized. It is permissionless. It relies on cryptographic verification.

But it does not operate like a traditional chain.

Blockchains maintain a single globally ordered ledger. Every transaction must be placed into one total sequence agreed upon by the network. This guarantees consistency, but it introduces coordination overhead and limits throughput.

In a blockchain:

* Transactions are broadcast to the network
* Nodes run a consensus algorithm
* A global order is established
* All nodes append transactions in the same sequence

This global coordination step is the bottleneck.

<figure><img src="/files/UJhdjuBcD9rbu5jPGf7C" alt=""><figcaption><p><strong>Figure 1:</strong> Blockchain consensus, an oversimplified view.</p></figcaption></figure>

Figure 1 depicts blockchain consensus.

Transactions (colored stripes) are submitted to the network, blue first and yellow last. Once accepted by the consensus algorithm (vortex), they become blocks settled on the chain (rectangles at the top, with genesis block depicted as light purple). Transactions are also propagated to all the nodes in the network (purple boxes) which append them to their local copy of the blockchain in the same order (transaction stack, with bottom transaction being processed first).

### So, how is Fast different?

Fast, instead, does not enforce a global order on transaction processing, nor does it require its nodes to communicate with each other to propagate the global state change.

Fast nodes, which we call validators, use and maintain their own local state. They verify, validate, and settle the claims in an optimal way: independently and in parallel with any other claim.

Since validators do not communicate with each other, there is no consensus in the strict sense of the word as used in blockchains. More specifically, Fast is not strongly consistent, but it is *strongly eventually consistent*, due to the requirement on claims to be **weakly independent**.

<figure><img src="/files/9lO4W4h4ZdEFYvu32GTl" alt=""><figcaption><p><strong>Figure 2:</strong> Fast consensus, an oversimplified view.</p></figcaption></figure>

Figure 2 depicts Fast consensus.

Transactions (colored stripes) are submitted to the network, blue first and yellow last. Once validated by the network (vortex), transactions are processed in the order they are *received* by the validators (purple boxes). This order is represented by the transaction stack, with the bottom transaction being processed first, and may not be the same on all nodes.

Due to this processing order flexibility, Fast enables different kinds of decentralized applications, such as payments, verifiable computation, digital identity, or voting, through an infrastructure which:

* achieves high throughput and scalability with massively parallel settlement
* ensures decentralization through validators which are independent and deterministic
* avoids global consensus overhead while still ensuring safety and correctness.

Whether you're building in Web3, Web2.5, or working with oracles, appchains, or AI agents, Fast gives you a programmable, verifiable foundation for decentralized logic and settlement.

## What’s next?

* [**Fast protocol**](/fast-archived/core-concepts/fast-protocol) → Get a detailed overview of Fast protocol and its settlement process.
* [**Core concepts**](/fast-archived/core-concepts) → Familiarize yourself with key concepts in Fast such as weak independence and claims.
* [**Developers**](/fast-archived/developers) → Dive deep into the inner-workings of our implementation of Fast and get accustomed with our APIs.
* [**Applications**](/fast-archived/applications/block-verification-explorer) → Discover current applications built on Fast.
* [**FAQ**](/fast-archived/faq) → Check out the most frequently asked questions.


# Core Concepts

Fast is a distributed protocol built around a few key ideas that enable parallel, consistent claim settlement without traditional consensus. These concepts such as validators, node state, claim ordering, and [weak independence](/fast-archived/core-concepts/weak-independence), define how the system achieves scalability and determinism.

### Validators and their role

Fast runs on a network of independent validators.

Each validator receives claims from clients, verifies their validity, and updates its local copy of the global state. Unlike blockchains, there is no leader or voting phase. Validators make progress independently and in parallel, provided claims from the same account are processed in the order they were issued.

This independence eliminates the need for global synchronization, greatly improving throughput.

### Node state and replication

Every validator maintains a complete replica of the system state, from balances, to client data, and protocol-wide records.

While processing claims, validators’ states may diverge temporarily but always converge once they have processed the same set of valid claims. This “eventual agreement without coordination” is a key strength of Fast.

### Ordering and concurrency

Fast does not impose a global order on all claims. Instead, it follows two simple rules. First, claims that originate from the same account must be applied in the order they were created. This prevents an account from issuing two conflicting claims at the same time, such as trying to spend the same balance twice. Second, claims that come from different accounts can be processed in any order. The order may vary from one validator to another, depending on how those claims arrive, but this does not cause any conflict.

This relaxation of global ordering is what makes Fast different. Two validators may apply the same set of claims in different sequences, and even interleave them.

For example, one validator might see claims arrive in the order A1, B1, A2, B2, while another might see B1, A1, B2, A2. Instead of forcing them into the same sequence, Fast allows them to proceed in parallel. You can understand more about this [here](/fast-archived/core-concepts/weak-independence#total-ordering).

### Convergence without coordination

Weak independence guarantees that this parallelism does not break the system. If all the claims involved are weakly independent, then the final state after applying all of them will be the same, no matter which order was used. This means validators can operate without constant coordination, yet still converge on a single shared outcome once they have processed the same claims.

What results from this model is a system that supports massive throughput without sacrificing determinism. Validators avoid the bottleneck of block production and the overhead of global consensus protocols, but they do not lose correctness.

### Why these concepts matter

The combination of independent validators, local state replication, minimal ordering rules, and weak independence, is what makes Fast capable of handling the volume and speed of modern decentralized applications.

These core concepts remove the trade-off between consistency and performance that has defined blockchain-based systems for over a decade. In Fast, consistency emerges naturally from the way claims are structured and processed.

In the next section, you will see how these concepts come together in detail, with formal definitions and examples of weak independence. That section shows why this property is powerful enough to ensure that, no matter how validators interleave claims, the network ends up in a single consistent state.


# Claims

Claims are statements that are either true or false. Only true statements can be validated and settled on Fast.

In this lesson, you will learn about claims, what they are and who produces them. If you’re interested in the validation or settlement process, read our tutorial on the [Fast protocol](/fast-archived/core-concepts/fast-protocol).

## What are claims?

Claims are statements that are either true or false. They can be verified by external third parties and then settled on Fast. They may carry additional evidence to support the verification process, but any discussion on how that is handled is outside the scope of this tutorial.

Before a claim is validated and settled, it can optionally go through a *verification phase* performed by **verifiers.** These are specialized clients that confirm whether the claim’s data or proofs are valid.

These verifiers act as customizable verification services that can perform checks like:

* **Cryptographic or ZK proof validation**
* **TEE (Trusted Execution Environment) attestation**
* **Semantic or domain-specific validation** of computations or contracts

Once a verifier confirms a claim’s correctness and issues a signed proof, the claim can then be processed by validators for settlement.

This separation of *verification* and *validation* allows applications to handle complex or computation-heavy verification tasks off-chain or on parallel services, keeping the Fast core lightweight and scalable.

The simplest type of claims are signatures, where the statement is signed by a signer:

<div align="center"><img src="/files/62wfNGfPfrBfYXu16Pg0" alt=""></div>

For example, the signature below:

<div align="center"><img src="/files/3Y0igMoHlONG5uQxE91G" alt=""></div>

states that *I, Grigore, pay Xiaohong 10 USD*.

More generally, a claim referring to a payment transaction would be a signature by `$sender`

<div align="center"><img src="/files/x5qZRCaP490itx6oajlO" alt=""></div>

which specifies `$sender` is transferring `$value` tokens to `$recipient`.

Payments are claims because they state the change of asset balances. However, claims are not just about payments. Voting, escrow, verifiable computing, custom assets, auctions, app-chains or blockchains are all examples of claims and all of them are supported by Fast.

Let’s be more specific and take a look at a few other examples of claims you can settle in Fast.

* *I am Grigore Rosu* - a fact where the signer is important
* *Pythagoras theorem* - a fact where the signer is less important
* *The price of gold is 100 USD* - an oracle
* *The next random number is 17* - a verifiable random function
* *I want to buy a ticket to the Iron Maiden concert* - an intent
* *The result of your query is 42* - an AI service provided
* *Python program fibonacci on input 10 evaluates to 55* - the result of a computation requiring re-execution or a mathematical or zero-knowledge (ZK) proof based on Python formal semantics
* *My Angry Birds score is 739* - a fact requiring a 3rd party or ZK proof
* *My next move in this chess game with Alice is Nf3* - a fact modifying a shared storage location sequentially
* *I vote YES for that petition* - a fact modifying a shared storage location non-sequentially

## Who produces claims?

Users write claims and send them to Fast for validation and settlement. However, users can also write messages that instruct the Fast validators on how to generate their claims.

Fast allows two types of accounts, similarly to Ethereum: user-owned accounts and contract-based accounts. Claims can be initiated directly from a user-owned account and indirectly by the validators through contract-based accounts.

Accounts are required to sign any claims they issue, and these signatures allow validators to confirm both the authenticity and integrity of the claim.

{% hint style="success" %}
Some claims may also involve **verifiers** before they reach validators. In these cases, the verifier’s job is to independently check the claim’s correctness and issue a signed verification proof. Validators then use these verified claims to update state securely and deterministically. This pattern is common in workloads involving AI outputs, oracles, or zero-knowledge proofs.
{% endhint %}


# Accounts

FastSet allows two types of accounts: user-driven and contract-based.

If you’re familiar with Ethereum accounts, you’ll notice FastSet accounts are similar to the externally-owned and contract accounts from Ethereum. Both user-driven and contract-based accounts can receive, hold, and send native tokens and interact with deployed contracts. Their key differences are also similar to those between Ethereum’s externally-owned accounts and contract accounts, listed as follows:

* User-driven accounts
  * cost nothing to create;
  * can submit any claim block;
  * are controlled by a pair of public and private keys.
* Contract-based accounts
  * incur a creation cost because they are using network storage;
  * can only submit claim blocks according to the prescribed scripts;
  * respond to messages from other accounts.

There can only be one user-driven account, but as many as desired contract accounts associated with it. The user-driven account has as address its public (primary) key *pk*, while the contract accounts have as address other public keys generated from the same private key *sk* of the user-driven account.

From the user-driven account, you can submit any type of claim, but contract-based accounts are specialized and can submit only the type of claims they have been instructed to. ~~What this means is that contract-based accounts have a SETL script associated with them at creation time and can only submit claims generated by that script. We’ll discuss more on this in a later section.~~


# Weak Independence

Fast allows claims to be processed and settled in any order, unless they originate from the same account, in which case, the claim order is preserved.

Although the ordering is relaxed, Fast provides the same correctness guarantees as systems that enforce a total order. However, it does not employ a strong consistency consensus algorithm like blockchains do to achieve correctness. Instead, Fast adopts an [eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency) consensus, sometimes called "weak consensus". And this is possible because of the weak independence requirement on claims it enforces.

This section explains weak independence and how it enables the next generation of decentralized and concurrent infrastructure for digital assets.

## Total ordering

There has been a long-held belief that decentralized payment systems are required to enforce a total order on transactions in order to prevent the double-spending attack.

{% hint style="info" %}
A **double-spending attack** is one in which an account sends two concurrent transactions attempting to spend the same coin with two different recipients.
{% endhint %}

This is why all blockchains are built the way they are. Validated transactions are chained together to preserve the historical order and to solve the double-spending issue.

However, it turns out that payments can be generated and settled in different orders by different nodes in the network and still prevent the attack from taking place. See recent work on [The consensus number of a cryptocurrency](https://link.springer.com/content/pdf/10.1007/s00446-021-00399-2.pdf) and [FastPay](https://arxiv.org/pdf/2003.11506) introducing this idea. The insight here is that the order in which an account **receives** payments is irrelevant. Moreover, even the order in which *different* accounts **send** payments is irrelevant, provided each account stays valid for every transaction, i.e., no double-spending and sufficient balance. As long as the nodes/validators are in agreement on the set of locally valid transactions that took place in the system, consensus on a total order is unnecessary.

Fast extends this idea beyond payments to voting, auctioning, and basically any type of verifiable statement, which we call [claim](/fast-archived/core-concepts/claims). Moreover, it generalizes the property of commutativity on payments mentioned above to arbitrary state-effectful computations and introduces this generalization as the notion of [weak independence](/fast-archived/core-concepts/weak-independence).

## Payment transactions as claims

Although Fast is more than payments, in this section we will focus mostly on payment transactions. Payments are a special instance of a claim because a transaction is simply a claim on the change of account balance.

Like in blockchains, every Fast account has a state (for example, a token balance) and is required to sign any claims it issues. These signatures allow validators to confirm both the authenticity and integrity of the claim.

A claim referring to a payment transaction would be a signature by `$sender`

<figure><img src="/files/x5qZRCaP490itx6oajlO" alt="" width="375"><figcaption></figcaption></figure>

which specifies `$sender` is transferring `$value` tokens to `$recipient`.

## Node state

Nodes in Fast maintain their own state, which is a consistent copy of the system’s state.

{% hint style="info" %}
**Fast node state vs. Blockchain node state**

For a sequence of claims waiting to be settled, the states of the Fast nodes may diverge temporarily and get out of sync (at most) until the entire sequence is processed. This is in contrast to the blockchain approach, which requires the same transaction order on all nodes. This is also why in blockchains strong consistency is enforced and why in Fast we can do away with eventual consistency consensus. But more on this later in the section.
{% endhint %}

Through their states, nodes in Fast keep the balances of all the tokens in the system, but also the state of all clients and the global state of the protocol, such as the set of all the claims that were settled.

For simplicity, let’s just focus on particular claims which are token transfers, that is, the state of the system at a certain time is just the token balances corresponding to the various accounts:

<p align="center"><em>s</em> = <img src="/files/hpxJ85DKiLwvUJvkfEty" alt="" data-size="original"></p>

Nodes process the claims issued by the clients. However, two points are worth mentioning. The first is that only valid claims are processed and the second that the system’s (or individual node’s) state may change after a claim is processed. Let’s take a look at each point and see what it means.

### 1. A claim may or may not be valid in a given state.

{% hint style="info" %}
**Valid payment transaction**

A payment transaction is valid if the sender’s balance is enough and the value it sends is positive.
{% endhint %}

We use a color palette to distinguish valid claims (green) from invalid ones (red).

<figure><img src="/files/Squ57uKHZsn2K9zCRf7y" alt=""><figcaption><p><strong>Figure 1:</strong> Invalid and valid claims in a certain state.</p></figcaption></figure>

In the state above, claim <img src="/files/rrqn32pAN2tV1jYygyxn" alt="" data-size="line"> is invalid as `balance`(Charlie) < 60, while claim <img src="/files/9O3vnZjISzXVdsaE5QUF" alt="" data-size="line"> is valid because `balance`(Alice) ≥ 80.

### 2. Processing a claim can (and usually does) change the state.

Processing valid claim <img src="/files/9O3vnZjISzXVdsaE5QUF" alt="" data-size="line"> in state *s* (left) gives state *s’* (right):

<figure><img src="/files/TJ70gVNlcpCEnHxtwryR" alt=""><figcaption></figcaption></figure>

In this new state *s'*, balances of both Alice and Bob are updated—Alice’s decreases by 80, while Bob’s increases by the same amount.

Processing a claim may lead to a state change. However, a state change may also lead to validity status change for other claims.

### 3. An invalid claim becomes valid.

<figure><img src="/files/R4NBQlnUyj4CoazZV7j5" alt=""><figcaption></figcaption></figure>

Initially, Charlie’s balance would not allow him to send 60 tokens to Dave (`balance`(Charlie) < 60). However, Bob’s valid transaction increased Charlie’s balance, so now Charlie can perform his payment to Dave.

### 4. A valid claim becomes invalid.

<figure><img src="/files/45NpvIw47Hk6oVfuKJZj" alt=""><figcaption></figcaption></figure>

In the initial state, Alice has enough balance to perform either of the transactions (`balance`(Alice) ≥ 45 and `balance`(Alice) ≥ 80), hence both claims are valid. After performing the payment to Bob, Alice does not have enough tokens to perform the transaction to Charlie too, and the claim for this payment becomes invalid.

{% hint style="info" %}
**Double-spending attack prevention**

In Fast transactions can be executed in any order, with a minor caveat. They need to originate from different accounts. Thus, the double-spending attack is prevented by enforcing transactions from the same account to be processed sequentially in the original order they have been issued. In order to enforce this, signatures are required to carry a nonce which increases with every signature the user creates.

If Alice tries to cheat and use the same nonce for both claims above, some validators could process the payment to Bob first (as in the diagram above) and validate it, others could process the payment to Charlie first and validate it. Half of validators processed a transfer, the other half the other and thus could never reach a quorum. In this case Alice’s account gets stuck. This is an adequate behavior, albeit different from blockchains, because Alice attempted to cheat. An honest user would never try to send two messages using the same nonce.
{% endhint %}

## Any order and weak independence

We said that, in Fast, the claims from different accounts may be processed in a different order and that we can achieve strong eventual consistency if the claims are weakly independent. But what does it mean for two claims to be weakly independent?

Intuitively, the weak independence of payments by different clients says that the overall state of the system will be the same independently of the order in which they are processed, provided that the initial state of the system allows for each payment to be independently made.

We would like to stress that although we give the intuition for weak independence of claims as payment transactions, weak independence is a general concept covering all the other verifiable statements one can settle in Fast.

<figure><img src="/files/OKfrBCh2wmFpi1EsHfNv" alt=""><figcaption><p><strong>Figure 2:</strong> Weak independence, a schematic view.</p></figcaption></figure>

The diagram in Figure 2 depicting weak independence of claims *c*<sub>*1*</sub> and *c*<sub>*2*</sub> says the following: Suppose that both *c*<sub>*1*</sub> and *c*<sub>*2*</sub> are valid in initial state *s*. If we process any of these claims in *s*, the other claim will continue to be valid in the subsequent state, meaning *c*<sub>*2*</sub> will be valid in *s*<sub>*1*</sub> and *c*<sub>*1*</sub> will be valid in *s*<sub>*2*</sub>. Moreover, processing the remaining claims from the states they are valid into (*c*<sub>*2*</sub> from *s*<sub>*1*</sub> and *c*<sub>*1*</sub> from *s*<sub>*2*</sub>) leads to the same final state *s’*. Or, simply put, processing both claims in any order leads to the same final state.

**Example 1 (Weak independence):** Let’s see what this means by having a look at a concrete example. Claims <img src="/files/T0eEttmWn5ffSMBSwS9P" alt="" data-size="line"> and <img src="/files/2B1HeAaRSQ794dzmlxZL" alt="" data-size="line"> are weakly independent in state *s* below:

<p align="center"><em>s</em> = <img src="/files/hpxJ85DKiLwvUJvkfEty" alt="" data-size="original"></p>

\
Let’s prove that.

First, both claims are valid in state *s,* as `balance`(Alice) ≥ 80 and `balance`(Dave) ≥ 20:

<div align="center"><img src="/files/Wbk4sk05vxrEJSKAO0a9" alt=""></div>

Now, processing the claims in either order leads to the same final state:

<figure><img src="/files/Njy38pzGSgMcVhJa56Kc" alt=""><figcaption></figcaption></figure>

While this is a proof by example, a general proof would follow a similar reasoning.

{% hint style="info" %}
**Weak independence general proof**\
\
Take two claims originating from different accounts a<sub>1</sub> and a<sub>2</sub> ⟨`transfer`(b<sub>1</sub>, v<sub>1</sub>)⟩a<sub>1</sub> and ⟨`transfer`(b<sub>2</sub>, v<sub>2</sub>)⟩a<sub>2</sub> and let’s prove they are weakly independent.

If both are valid claims, then v<sub>1</sub> > 0 and `balance`(a<sub>1</sub>) >= v<sub>1</sub> and, respectively, v<sub>2</sub> > 0 and `balance`(a<sub>2</sub>) >= v<sub>2</sub>. We have to prove that the balances of a<sub>1</sub>, a<sub>2</sub>, b<sub>1</sub>, and b<sub>2</sub> are, respectively, the same no matter in which order the two transfer claims are processed.

We distinguish several cases, depending on whether b<sub>1</sub> and b<sub>2</sub> are equal or not, or if any of them or both are equal to any of a<sub>1</sub> or a<sub>2</sub>.

* b<sub>1</sub> and b<sub>2</sub> are distinct and also distinct from a<sub>1</sub> and a<sub>2</sub>.

Then in both cases the balances are clearly the same: a<sub>1</sub> - v<sub>1</sub>, a<sub>2</sub> - v<sub>2</sub>, b<sub>1</sub> + v<sub>1</sub>, b<sub>2</sub> + v<sub>2</sub>. This case is a generalization of the example we have presented above.

* b<sub>1</sub> = b<sub>2</sub> = b and are different from a<sub>1</sub> and a<sub>2</sub>.

Then the balances are also the same: a<sub>1</sub> - v<sub>1</sub>, a<sub>2</sub> - v<sub>2</sub>, and b + v<sub>1</sub> + v<sub>2</sub>.

* b<sub>1</sub> = a<sub>2</sub> and b<sub>2</sub> are distinct.

Then the balances are also the same: a<sub>1</sub> - v<sub>1</sub>, a<sub>2</sub> - v<sub>2</sub> + v<sub>1</sub>, and b<sub>2</sub> + v<sub>2</sub>.

* b<sub>1</sub> = a<sub>2</sub> and b<sub>2</sub> = a<sub>1</sub>.

Then the balances are the same, too: a<sub>1</sub> - v<sub>1</sub> + v<sub>2</sub>, a<sub>2</sub> - v<sub>2</sub> + v<sub>1</sub>.

* b<sub>1</sub> = b<sub>2</sub> = a<sub>2</sub>.

Then the balances are: a<sub>1</sub> - v<sub>1</sub>, a<sub>2</sub> + v<sub>1</sub>.

The remaining cases are similar. Consequently, the two claims satisfy the weak independence requirement that guarantees its determinism no matter how the transfer claim blocks by different accounts are permuted. Because the (atomic) addition and subtraction operations on integers are commutative, an even stronger property holds: the individual claims in different blocks can also be further interleaved. This gives validators the freedom to maximize the parallelism and thus the throughput of token transfers.
{% endhint %}

**Example 2 (Vacuous weak independence):** Recall the example from before with the invalid claim becoming valid:

<figure><img src="/files/FhiIeKAM6FMnkOf5iVVg" alt=""><figcaption></figcaption></figure>

Weak independence holds *vacuously* in this case. Recall that weak independence requires both claims to be valid in the current state, and then if they are processed independently from the same state, the claim not processed in one state will continue to be valid in the subsequent state. Then, the final state will be the same in both cases. In this example, the payment claim from Charlie to Dave is not valid in the initial state, so it satisfies the weak independence of any claim vacuously.

{% hint style="info" %}
**Vacuous truth**

In mathematical logic, a [vacuously true](https://en.wikipedia.org/wiki/Vacuous_truth) statement is a conditional statement in which the antecedent cannot be satisfied.
{% endhint %}

## Strong eventual consistency

Fast ensures the correctness of the protocol, including its node/validator transaction processing determinism, whenever the weak independence property holds. More specifically, in Fast, we achieve strong eventual consistency whenever weak independence holds.

Basically, strong eventual consistency is a generalization of weak independence to claim sequences of arbitrary length, not just 2, where one sequence is an interleaving of the other. This means that both sequences contain the same claims, but in different order.

For example, two interleaving equivalent claim sequences are γ and γ' below:

γ = <img src="/files/cOSqqpZmviTbyY7SLxX0" alt="" data-size="line">

γ'= <img src="/files/9BV4FVoitUVxqC7fGaWv" alt="" data-size="line">

They contain the same payment transactions, but the order they should be processed in differs, with the exception of the payment transfers of Alice, which are in the same order in which they were initiated in both sequences.

Assuming the current state of the system to be state *s* specified above, processing the two sequences of transactions γ and γ' leads to the following two series of node state change:

<figure><img src="/files/PAXYOfFPOvPbzD8yOJha" alt=""><figcaption><p><strong>Figure 3a:</strong> State change when processing sequence γ.</p></figcaption></figure>

<figure><img src="/files/yz0xuZyq6kLt6gqFmcoy" alt=""><figcaption><p><strong>Figure 3b:</strong> State change when processing sequence γ'.</p></figcaption></figure>

As you can see in Figures 3a and 3b, the intermediate states are different, as the transactions are processed in different sequences. However, the initial and final states are the same. And this is what strong eventual consistency is about, whenever the claims they process are weakly independent, nodes eventually converge to the same global state.

For Fast, this means that if two different nodes/validators process the same claim sequences for the same clients, then they end up in the same state regardless of how the claim sequences were interleaved. That is, from the collective perspective of the clients, validators behave deterministically and do not diverge. Or put differently, they are in “consensus”.

<figure><img src="/files/d4YOxuEdDryUrtlpNoDx" alt=""><figcaption><p><strong>Figure 4:</strong> Strong eventual consistency, in an oversimplified view.</p></figcaption></figure>

In the diagram above, the sequences of colored stripes represent two different sequences of the same set of transactions to be processed by two nodes (depicted as cubes) in Fast, initially in the same state.

While the intermediate states of the individual nodes are out of sync as the sequence of transactions is processed, **eventually**, the states become again in sync, or achieve **consensus**, once they all process their last transaction in the sequence. In their final states, the nodes will have processed the same set of transactions, albeit in different order.

A more detailed and formal explanation of weak independence you can find in our [whitepaper](https://pi2.network/papers/fastset) on Fast.


# Fast Protocol

Fast is a distributed protocol for parallel claim settlement. In short, it allows a set of clients to settle verifiable claims consistently, using a set of validators. Clients broadcast their claims to all validators. Validators validate the received claims and replicate the system state based on the order in which they receive the claims. The Fast validators do not need to communicate with each other, nor directly achieve consensus on any values, orders, blocks, or computations. More specifically, in Fast, we achieve strong eventual consensus due to the weak independence on claims we require.

If you're interested in what types of claims one can settle in Fast and how to express them head to our [Claims](/fast-archived/core-concepts/claims) section. Weak independence is the property we require claims to satisfy, and which allows Fast to process them in any order, which facilitates decentralization and scalability. Read about it in our section on [Weak independence](/fast-archived/core-concepts/weak-independence). In this section, we will focus on the inner workings of Fast.

Figure 1 below depicts the participants and steps of the protocol. In the following, we’ll discuss each in more detail.

<figure><img src="/files/h8uPE78IwoRY3Q8VtVKu" alt=""><figcaption><p><strong>Figure 1:</strong> Fast protocol.</p></figcaption></figure>

## Participants

### Agent (Client)

A client is any account or address holder who can make claims. Clients can be more than individual users; they can be apps (such as contracts, web2, or games), L1s, L2s, micro-chains, AI agents, service providers, oracles, provers (such as mathematical or zero-knowledge), verifiers (such as execution, semantics, and/or zero-knowledge proof based), etc.

Each client possesses a key pair consisting of a private signature key *sk* and its corresponding public verification key *pk*. The private key is used to sign messages

<p align="center">⟨<em>msg</em>⟩<sub><em>sk</em></sub></p>

while the public key is used to publicly verify the authenticity of the signatures. Similarly to blockchains, the public key of a client also serves as its public account number, or its address.

### Validators

Validators are responsible for processing the claims made by the clients, while at the same time maintaining consistency in the global knowledge about the overall system, or, more specifically, in the global state of the system.

Validators maintain a local copy of the global state, which they update independently based on the side effects of the claims they process. Due to the eventual consistency consensus we achieve in Fast, local states of validators may temporarily diverge when processing the same set of claims. However, by the time they process the entire claim set, their states converge to the same final state, achieving determinism.

For example, for a payment system, validators keep balances of all tokens and additional data/state of all clients, global state of the entire protocol, like the set of all the claims that were settled, etc.

### Verifiers

Verifiers are specialized **clients** that perform *customizable verification* of claims and their proofs before those claims are processed by validators.

They serve as the trust layer of Fast, confirming that a claim’s data, logic, or cryptographic proof is correct, without requiring validators to do the heavy lifting.

Verification can happen in real time and is highly flexible, supporting a wide range of mechanisms such as:

* **TEE attestation**, ensuring claims originated from trusted hardware environments
* **Zero-Knowledge (ZK) proof verification**, confirming private computations without revealing inputs
* **Semantic verification**, validating that a computation or execution trace follows expected logic (e.g., Python semantics)
* **Off-chain verification**, for workloads that are better handled outside the main network

{% hint style="warning" %}
Verifiers are **optional**.

Most claims can be directly validated by the Fast validators. However, in cases that involve heavy computation, domain-specific checks, or off-chain verification workloads, verifiers play an essential role in offloading that process and providing signed verification proofs back to the network.
{% endhint %}

Once a verifier confirms a claim and issues its signed verification result, the claim is broadcast to validators. Validators then validate and settle it as part of the Fast protocol, achieving consistency without consensus.

This two-step approach: verification first, validation second, lets Fast process complex or high-demand verification workloads in parallel, maintaining scalability and security without global coordination.

### Proxy

The proxy is responsible for two services: broadcasting messages to validators and aggregating verifier signatures (#{sig1 , sig2 , ...}).

{% hint style="warning" %}
Proxy is **optional**.

Just like the verifiers, the proxy is not required for protocol functionality. It simply acts as a helper in the protocol. The proxy can be a client (the sender of the original message containing the claim sequence, or a different client such as a beneficiary or a verifier or a service provider), a validator, or any combination of these.
{% endhint %}

## Protocol steps

{% stepper %}
{% step %}
**Claim**

Client A signs a sequence of claims c<sub>1</sub> c<sub>2</sub> ... c<sub>k</sub> and sends the signature m = \<c<sub>1</sub> c<sub>2</sub> ... c<sub>k</sub>,T><sub>A</sub> to the proxy.
{% endstep %}

{% step %}
**Verify**

The set of verifiers T requested by the client verifies the message m and signs it individually \<m>t1, \<m>t2, … \<m>tl.
{% endstep %}

{% step %}
**Validate**

The proxy receives the signatures from the verifiers and computes an aggregated signature \<m><sub>#T</sub>, which it sends to the validators.
{% endstep %}

{% step %}
**Sign**

Validators validate the signature by checking that the signatures are valid and the quorum specified by the client has been reached. Then they send their responses \<m><sub>v</sub> to the proxy.
{% endstep %}

{% step %}
**Confirm**

As more validators sign the message, a collection of their signatures continues to grow and eventually forms a quorum.

Once the required quorum is met, the proxy issues the certificate \<m><sub>#</sub>.

Technically, at this stage, the claim settlement request is final in the sense that it cannot be cancelled.
{% endstep %}

{% step %}
**Pre-settle**

Upon receipt of \<m><sub>#</sub>, each VSL validator checks the signature and the quorum # of the settlement certificate.
{% endstep %}

{% step %}
**Settle**

Each VSL validator settles the claim and updates its internal state.
{% endstep %}
{% endstepper %}

## Guarantees and properties

### Safety from double-spending

As stated in the previous section, Fast prevents double-spending through its validator design and local state checking. If an actor issues two conflicting claims such as trying to spend the same tokens twice, validators will detect the conflict during validation.

Because each validator independently checks whether a claim is valid before signing it, conflicting claims cannot both reach quorum. Only one of the claims will gather enough validator support to be certified, while the other will be rejected or remain unfinalized.

This approach ensures that only one version of a conflicting action can become part of the global state, even without needing all validators to agree in advance or coordinate execution.

### Quorum-based settlement

In Fast, a claim is not considered settled just because it was received or validated by a single party. Settlement only happens when a claim gathers enough validator signatures to meet a quorum threshold. These signatures are bundled into a certificate, which proves that the claim has been accepted by a sufficient portion of the network.

This model makes it easy to distinguish between claims that are pending and those that are final. Any system or client can rely on a certified claim with confidence, without needing to verify the state of the entire network. The quorum size and validator set can also be configured to meet the trust or decentralization goals of a specific deployment.

### No forks or reorganizations

Fast’s design avoids the possibility of forks and chain reorganizations, issues that often arise in blockchain systems that rely on longest-chain rules or probabilistic finality.

Because Fast does not operate on a chain of blocks, and because a claim becomes final once certified by a quorum, there is no risk of an already settled claim being reversed. There are no rollbacks or reorganizations of the system state. Once a claim is certified, it is final and immutable.

This adds a level of predictability and stability that is particularly important in high-stakes applications like payments, AI verification, or data access control.

### Verifiability and auditability

Every settled claim in Fast includes a certificate, which is simply a cryptographic proof that the claim was accepted by a quorum of validators. These certificates can be verified by any third party without needing access to the full validator set or network history.

This gives developers and system designers a reliable way to track and audit changes, verify outcomes, and build systems that can interface with Fast as a source of truth. Whether you are proving a payment happened, confirming an attestation, or recording the result of a verifiable computation, certificates provide tamper-proof, portable evidence.

## In summary

Although Fast gives up traditional consensus and global ordering, it maintains clear, strong guarantees. It ensures that honest validators eventually converge to the same state, prevents double-spending, enforces finality through certificates, and eliminates the possibility of forks or rollbacks. All while enabling fast, parallel processing and cryptographic verifiability.

These properties make Fast a powerful protocol for modern decentralized applications, especially those that demand scale, reliability, and trust without consensus overhead.


# Guarantees and Properties

FastSet does away with global consensus and strict ordering, two cornerstones of traditional blockchain systems, yet it still manages to offer strong guarantees around consistency, safety, and trust.

This section explains what FastSet promises, how those promises are upheld, and why developers can confidently build on it.

### Safety from double-spending

As stated in the previous section, FastSet prevents double-spending through its validator design and local state checking. If an actor issues two conflicting claims such as trying to spend the same tokens twice, validators will detect the conflict during validation.

Because each validator independently checks whether a claim is valid before signing it, conflicting claims cannot both reach quorum. Only one of the claims will gather enough validator support to be certified, while the other will be rejected or remain unfinalized.

This approach ensures that only one version of a conflicting action can become part of the global state, even without needing all validators to agree in advance or coordinate execution.

### Quorum-based settlement

In FastSet, a claim is not considered settled just because it was received or validated by a single party. Settlement only happens when a claim gathers enough validator signatures to meet a quorum threshold. These signatures are bundled into a certificate, which proves that the claim has been accepted by a sufficient portion of the network.

This model makes it easy to distinguish between claims that are pending and those that are final. Any system or client can rely on a certified claim with confidence, without needing to verify the state of the entire network. The quorum size and validator set can also be configured to meet the trust or decentralization goals of a specific deployment.

### No forks or reorganizations

FastSet’s design avoids the possibility of forks and chain reorganizations, issues that often arise in blockchain systems that rely on longest-chain rules or probabilistic finality.

Because FastSet does not operate on a chain of blocks, and because a claim becomes final once certified by a quorum, there is no risk of an already settled claim being reversed. There are no rollbacks or reorganizations of the system state. Once a claim is certified, it is final and immutable.

This adds a level of predictability and stability that is particularly important in high-stakes applications like payments, AI verification, or data access control.

### Verifiability and auditability

Every settled claim in FastSet includes a certificate, which is simply a cryptographic proof that the claim was accepted by a quorum of validators. These certificates can be verified by any third party without needing access to the full validator set or network history.

This gives developers and system designers a reliable way to track and audit changes, verify outcomes, and build systems that can interface with FastSet as a source of truth. Whether you are proving a payment happened, confirming an attestation, or recording the result of a verifiable computation, certificates provide tamper-proof, portable evidence.

### In summary

Although FastSet gives up traditional consensus and global ordering, it maintains clear, strong guarantees. It ensures that honest validators eventually converge to the same state, prevents double-spending, enforces finality through certificates, and eliminates the possibility of forks or rollbacks. All while enabling fast, parallel processing and cryptographic verifiability.

These properties make FastSet a powerful protocol for modern decentralized applications, especially those that demand scale, reliability, and trust without consensus overhead.<br>


# Developers

This page is your starting point if you're interested in building applications and services on top of the Fast network.

Here you find information on how to interact with the network using our APIs and several tutorials to guide you through specific tasks.

{% content-ref url="/pages/DoKl7ypdNXGtunH2lcnL" %}
[Tutorials](/fast-archived/developers/tutorials)
{% endcontent-ref %}

{% content-ref url="/pages/LR7CJITdvG2vWBTWhZVK" %}
[Fast API](/fast-archived/developers/fast-api)
{% endcontent-ref %}


# Tutorials

Below is the list of tutorials we provide to teach you about the inner-workings of Fast.

<table><thead><tr><th width="280.2003173828125">Tutorial title</th><th>Description</th></tr></thead><tbody><tr><td><a href="/pages/Z3VZwcKRWucEseCeObCv">Create an account</a></td><td>Learn how to create an account.</td></tr><tr><td><a href="/pages/GKkWCXZQPwGggXLJwNTm">Submit a transaction to proxy</a></td><td>Learn how to submit a transaction to proxy.</td></tr><tr><td><a href="/pages/x8Cl7q1FDQsGkshIHVN8">Fund account from faucet</a></td><td>Learn how funding the account from the faucet works.</td></tr></tbody></table>

{% hint style="danger" %}
For a hands-on walkthrough, check out the [Fast RPC examples repository](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/tree/main) with ready-to-use Rust and JavaScript code you can clone and run.
{% endhint %}


# Create an account

Validators do not distinguish between single-signer and multisig accounts. Rather, all the multisig configuration is encoded in the multisig account's address. The only difference from the validator's perspective is when it is checking the signature. If it is passed a transaction with a `SignatureOrMultiSig::`[`Signature`](/fast-archived/developers/fast-api/data-types#signature), it will do the normal signature check, but if it is passed a `SignatureOrMultiSig::`[`MultiSig`](/fast-archived/developers/fast-api/data-types#multisig), it will do the multisig check.

This tutorial describes how to create a Fast single-signer or multisig account.

## Create a single-signer account

```rust
  use fast_rust_examples::fastset_types::get_key_pair;
  let (sender_pub_key, sender_priv_key) = get_key_pair();
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/create-an-account.rs#L3-L4)

## Create a multisig account

A multisig account is a special type of account. It is controlled by multiple key pairs, meaning it can accept and/or require signatures from different entities to submit claims.

When creating a multisig account, you first need to define the configuration. This contains the following information:

* the list of public keys that are authorized signers for the multisig,
* the quorum: this represents the minimum number of signatures from the list of authorized signers required to be submitted along with any transaction for it to pass the multisig check, and
* a nonce, whose purpose will be explained below. See [`MultiSigConfig`](/fast-archived/developers/fast-api/data-types#multisigconfig) for more information.

After defining the configuration, you need to hash it on the client side to figure out the address of that multisig. This is the Keccak256 hash of the [`MultiSigConfig`](/fast-archived/developers/fast-api/data-types#multisigconfig) object as BCS serialized. Then, you can fund this address like any other account using a faucet endpoint or transferring funds from an existing account.

Then, you can fund this address like any other account, either using a faucet endpoint, or by transferring funds from an existing account.


# Fetch next nonce

Recall that Fast doesn't enforce a total global order on transaction processing. However, it does require a per-account sequencing to protect against double-spending. To ensure the sequencing is respected, transactions initiated from the same account are to carry an increasing nonce. For example, transaction *t*<sub>1</sub> carries nonce 1, transaction *t*<sub>2</sub> nonce 2, etc.

Through nonces, the validators can enforce a processing order on transactions originating from the same account. If the nonce is not the expected one, then the validators reject the transaction. Therefore, you must submit the transaction to Fast with the correct nonce to be accepted.

In simple applications, one can just keep track of this locally and increment it before building each transaction, but what if you lose track of this number? Or what if you have multiple users submitting transactions from the same account, e.g., using a multisig account or just a shared key?

In this case, you would simply query a proxy or one or more validators to find out what the next expected nonce is for your account. This tutorial describes how to fetch the next nonce for a transaction.

## Fetch from proxy

When querying the proxy to get the next expected nonce of a given account, you need to use the [`proxy_getAccountInfo`](/fast-archived/developers/fast-api/proxy-api#set_proxy_getaccountinfo) endpoint.

Parameters `token_balances_filter` and `certificate_by_nonce` can be ignored, since the next nonce is always returned regardless of options.

```rust
use crate::base_types::*;
use crate::messages::*;
use crate::proxy::client::ProxyRpcClient;

let account: FastSetAddress = ...

let client = HttpClient::builder().build(&proxy_rpc_url).unwrap();
let nonce = client
    .get_account_info(account, None, None)
    .await.unwrap().next_nonce;

println!("Next nonce for account {:?} is {:?}", account, nonce);
```

## Fetch from validator

This is very similar to using the proxy. However, you need to use the validator-specific endpoint, [`getAccountInfo`](/fast-archived/developers/fast-api/validator-api#set_getaccountinfo).

```rust
use crate::base_types::*;
use crate::messages::*;
use crate::validator::rpc_interface::RpcClient;

let account: FastSetAddress = ...

let client = HttpClient::builder().build(validator_rpc_url).unwrap();
let nonce = client.get_account_info(address, None, None)
    .await
    .unwrap().next_nonce;
println!("Next nonce for account {:?} is {:?}", account, nonce);
```

## Validator desynchronization and incorrect next nonce

Due to the any processing order of transactions and the strong eventual consensus Fast enforces, validators' view of what the `next_nonce` is may temporarily differ.

When querying for the next nonce, either from a validator or the proxy, you will get the view of a single validator. In the case of the validator, its own view. In the case of the proxy, the process is a bit more involved, but with a similar outcome. Specifically, the proxy will request the account info from all validators until it has a quorum of them, but then will only return the first response.

Since the response may be incorrect, a transaction submitted with that nonce will fail, even if otherwise valid. Due to the risk of account locking when submitting incorrect transactions, you should not blindly submit transactions with the nonce obtained from just one validator. Some of the validators may be dishonest (our security model assumes up to 1/3 are dishonest validators) and may maliciously return any number.

{% hint style="danger" %}

### How account locking can occur

Let's assume you submit two different transactions t<sub>1</sub> and t<sub>2</sub> with same nonce N to a committee of four validators v<sub>0</sub>, v<sub>1</sub>, v<sub>2</sub>, and v<sub>3</sub>.

To validators v<sub>0</sub> and v<sub>1</sub>, you send t<sub>1</sub>, and to validators v<sub>2</sub> and v<sub>3</sub>, you send t<sub>2</sub>. Both transactions are valid in the current account state, both have the correct nonce, and both are signed correctly, so two validators will sign t<sub>1</sub> and the other two will sign t<sub>2</sub>.

However, validators v<sub>0</sub> and v<sub>1</sub> will never sign another transaction with nonce N, nor will validators v<sub>2</sub> and v<sub>3</sub>. This means that a certificate will never be able to be produced for neither of the transactions because obtaining a certificate from a pool of four validators means getting the signatures of three of them on the same transaction.

To prevent this, you should make sure that you never send different valid transactions with the same nonce.
{% endhint %}


# Sign a transaction

In this tutorial, you will learn how to sign a transaction in FastSet.

Signing a transaction involves several steps:

#### 1. Construct the `Transaction` data type and serialize it.

Recall a [`Transaction`](/fast-archived/developers/fast-api/data-types#transaction) data type contains several fields. We construct each individually first, and we serialize the structure at the end.

In order to perform a transaction, we need a sender and a receiver and their addresses.

In FastSet, the public keys of the accounts are also their addresses. The private keys are, as their name says, private and they should be kept as such.

Let's assume the public address of the sender is `senderPublicKey` and the public address of the receiver is `recipientPublicKey` .

In FastSet we distinguish between addresses native to FastSet and addresses owned by external entities such as blockchains. In this example, we assume the recipient is native.

The address of the recipient is constructed from their public key:

```typescript
const Address = { FastSet: recipientPublicKey };
```

In FastSet, only the order of transactions originating from the same account is enforced. For this, every transaction carries a nonce denoting the transaction number.

The nonce on FastSet is similar to Ethereum's nonce.

```typescript
const Nonce = bcs.u64();
```

FastSet is more than settling payment transactions. In FastSet, you can settle what we call *claims*, independently verifiable statements. Claims include, but are not limited to voting, verifiable computing, or auctions. As such, the data type for claims `ClaimType` comes in different variants. In this example, we focus on a token transfer:

```typescript
const ClaimType = bcs.enum("ClaimType", {
    TokenTransfer: TokenTransfer,
});
```

```typescript
const Transaction = bcs.struct("Transaction", {
    sender: senderPublicKey,
    recipient: {FastSet: recipientPublicKey},
    nonce: Nonce,
    timestamp_nanos: bcs.u128(),
    claim: ClaimType,
});
```

#### 2. Sign the transaction

Before a transaction is sent, it has to be signed by the sender.

```typescript
const msgBytes = Transaction.toBytes();

// FastSet uses a prefix to identify the type of the message. For transactions, the prefix is always
// "Transaction::"
const prefix = new TextEncoder().encode("Transaction::");
// The data to sign is the prefix followed by the message (the serialized transaction)
const dataToSign = new Uint8Array(prefix.length + msgBytes.length);
dataToSign.set(prefix, 0);
dataToSign.set(msgBytes, prefix.length);
const signature = { Signature: ed.sign(dataToSign, senderPrivateKey) };
```


# Fund account from faucet

You might have noticed that in our [Testnet Fast Wallet](https://wallet.fastset.xyz/), you have a default balance and even before performing a transaction yourself, your account had already benefited from 6 default token transfer transactions.

In addition, you can always add money to your account "from thin air" whenever you press plus `+` on the button corresponding to the desired token. This corresponds to funding your account from the faucet and in this tutorial we describe how it works.

## Fund a single-signer account from faucet

The faucet mechanism is attached to a proxy. The proxy controls an account with a large amount of funds and users can then call a special endpoint on the proxy that will distribute those funds for free.

Using the faucet is straightforward. The code below transfers 10 native tokens from the faucet proxy to the account `account`, provided the proxy has a faucet enabled and it has enough funds.

```rust
  use jsonrpsee::http_client::HttpClient;
  use fast_rust_examples::{fastset_types::*, client::ProxyRpcClient};

  let (sender_pub_key, _sender_priv_key) = get_key_pair();

  let client = HttpClient::builder().build("https://proxy.fastset.xyz")?;
  client.faucet_drip(sender_pub_key, 10.into(), None).await?;
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/fund-account-from-faucet.rs#L4-L10)

Note that there are per-account limitations on the proxy. There is a cool-down for calling the endpoint (often 1 day), and there is a limit for how much you can request in one call.

It is also possible to use the faucet to obtain custom tokens, if the faucet is set up correctly to disperse them. For example:

```rust
  use jsonrpsee::http_client::HttpClient;
  use fast_rust_examples::{fastset_types::*, client::ProxyRpcClient};

  let (sender_pub_key, _sender_priv_key) = get_key_pair();

  let client = HttpClient::builder().build("https://proxy.fastset.xyz")?;
  let my_token_id = TokenId::native(); // can replace this with your custom token ID
  client.faucet_drip(sender_pub_key, 10.into(), Some(my_token_id.clone())).await?;
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/fund-account-from-faucet-custom-token.rs#L4-L11)

## Fund a multisig account from faucet

The code below demonstrates how to compute the address of a multisig account and send initial funds to it.

```rust
  use jsonrpsee::http_client::HttpClient;
  use fast_rust_examples::{fastset_types::*, client::ProxyRpcClient};

  let multisig_config = MultiSigConfig {
      nonce: Nonce::from(0),
      quorum: Quorum::from(2),
      authorized_signers: vec![get_key_pair().0,get_key_pair().0,get_key_pair().0],
  };

  let multisig_address = PublicKeyBytes(multisig_config.address());

  let client = HttpClient::builder().build("https://proxy.fastset.xyz").unwrap();
  client.faucet_drip(multisig_address, 10.into(), None).await?;
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/fund-account-from-faucet-multisig.rs#L4-L16)


# Submit a transaction to proxy

Fast network reaches consensus on a transaction in two stages:

1. A transaction is checked by individual validators and if it is valid, i.e., doesn't overspend, has the correct nonce, has a valid signature by the transaction sender, etc., the validator signs it. Once a quorum (2/3 of validators + 1) have provided their signature, the second stage can begin.
2. A certificate is constructed containing this quorum of validator signatures, and then this certificate is passed along to all the validators, who then check that there is indeed a quorum of validator signatures, and that these are correct, and only then update their local views of the account's state according to the transaction.

A proxy is used to handle this process for you, collapsing both steps into a single one. By providing the transaction with your sender signature on it, the proxy can then drive the whole process to completion.

This tutorial shows how to submit/confirm transactions using the [proxy RPC](/fast-archived/developers/fast-api/proxy-api).

## Fetch the next nonce

Fast doesn't enforce a total global order on transaction processing. However, it does require a per-account sequencing to protect against double-spending. To ensure the sequencing is respected, transactions initiated from the same account should carry an increasing nonce. For example, transaction *t*<sub>1</sub> carries nonce 1, transaction *t*<sub>2</sub> nonce 2, etc.

Through nonces, the validators can enforce a processing order on transactions originating from the same account. If the nonce is not the expected one, then the validators reject the transaction. Therefore, you must submit the transaction to Fast with the correct nonce to be accepted.

In simple applications, one can just keep track of this locally and increment it before building each transaction, but what if you lose track of this number? Or what if you have multiple users submitting transactions from the same account, e.g., using a multisig account or just a shared key?

In this case, you would simply query the proxy to find out what the next expected nonce is for your account.

When querying the proxy to get the next expected nonce of a given account, you need to use the [`proxy_getAccountInfo`](/fast-archived/developers/fast-api/proxy-api#proxy_getaccountinfo) endpoint.

Parameters `token_balances_filter` and `certificate_by_nonce` can be ignored, since the next nonce is always returned regardless of options.

```rust
  use std::time::{SystemTime, UNIX_EPOCH};
  use jsonrpsee::http_client::HttpClient;
  use fast_rust_examples::{fastset_types::*, client::ProxyRpcClient};

  let (sender_pub_key, sender_priv_key) = get_key_pair();
  let client = HttpClient::builder().build("https://proxy.fastset.xyz")?;
  let next_nonce = client.get_account_info(sender_pub_key, None, None, None).await?.next_nonce;
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/submit-a-transaction.rs#L5-L11)

## Submit a transaction

Sumitting a transaction is now straightforward. First, you construct the transaction with the fields you want, i.e., sender, recipient, and amount. For simplicity, we will use a native token transfer of 100 tokens as an example.

```rust
  let (recipient_pub_key, _recipient_priv_key) = get_key_pair();
  let txn_fee = 10_u64.pow(16);
  let amount = 100;
  client.faucet_drip(sender_pub_key, (txn_fee + amount).into(), None).await?;

  let claim = ClaimType::TokenTransfer(TokenTransfer {
    amount: amount.into(),
    user_data: UserData(None),
    token_id: TokenId::native(),
  });

  let tx = Transaction {
      sender: sender_pub_key,
      recipient: recipient_pub_key,
      nonce: next_nonce,
      claim,
      timestamp_nanos: SystemTime::now()
          .duration_since(UNIX_EPOCH)
          .expect("Current time is before the unix epoch")
          .as_nanos(),
      archival: false,
  };
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/submit-a-transaction.rs#L15-L36)

Then, you sign the transaction using your private key.

```rust
  let signature = SignatureOrMultiSig::Signature(Signature::new(&tx, &sender_priv_key));
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/submit-a-transaction.rs#L40-L40)

Then you submit both the transaction and the signature to the [`proxy_submitTransaction`](/fast-archived/developers/fast-api/proxy-api#set_proxy_submittransaction) endpoint. If everything goes well, this will submit and confirm the transaction `tx` on the Fast network.

```rust
  let res = client.submit_transaction(tx.clone(), signature).await?;
```

[<sup>source</sup>](https://github.com/Pi-Squared-Inc/fastset-rpc-docs/blob/457bbf314a5de50486483b04d4930f5d73c05a5f/rust-examples/examples/submit-a-transaction.rs#L44-L44)

{% hint style="warning" %}
Note a couple of complications that might occur.

If the network is out of sync in its view of your account, the proxy could fail because some of the validators need to be caught up on the transaction history for your account by submitting missing certificates.

However, if only some validators are behind, and behind by only one nonce, the proxy will be able to attempt to recover from this by itself, because it can query the pending transaction from the validators.
{% endhint %}

This is done with the [`proxy_submitTransaction`](/fast-archived/developers/fast-api/proxy-api#set_proxy_submittransaction) and [`proxy_submitVerifierSig`](/fast-archived/developers/fast-api/proxy-api#set_proxy_submitverifiersig) endpoints.

## Submit a transaction from a multisig account

To send transactions with the multisig account as the sender, use the same [`proxy_submitTransaction`](/fast-archived/developers/fast-api/proxy-api#set_proxy_submittransaction) endpoint as you would for single-signer accounts, but instead of the signature being `SignatureOrMultisig::Signature`, set it to `SignatureOrMultiSig::MultiSig` where the multisig contains enough signatures plus the same [`MultiSigConfig`](/fast-archived/developers/fast-api/data-types#multisigconfig) you created before. The sender field in the transactions must be set to the hash of the [`MultiSigConfig`](/fast-archived/developers/fast-api/data-types#multisigconfig) as described above.

Currently, for efficient validating of the multisigs, the list of signatures must be sorted by the address or public key of the signer.


# Fast API

With the Fast APIs, you can submit and process transactions on the Fast network, or query for information about the current state of the network.

While the high level functionality of the APIs is similar to that of other cryptocurrency platforms, particularities of the Fast network which make it differ from existing blockchain systems necessitate changes in the underlying APIs:

* Fast does not globally order transactions: this means each Fast validator is free to process transactions in parallel.
* To unlock the maximum potential parallelism enabled by the Fast protocol, all work that *can* be offloaded from the validators *is* offloaded.

One consequence of this is that Fast validators (for the most part) do not gossip among themselves. Instead, the protocol is client-driven. This means that clients must communicate individually with each validator in the current validator set to drive transaction processing to completion.

To simplify the communication with the network, recall that the protocol allows for a proxy, an intermediate entity responsible for broadcasting messages from clients to validators and aggregating signatures. Read more in the description of [Fast protocol](/fast-archived/core-concepts/fast-protocol). For this, we offer a special API variant that simplifies talking with the network.

Currently, Fast API is available in the following variants:

### Proxy RPC

When a client calls a Proxy RPC method, internally, the proxy will:

1. Forward an appropriate RPC call to each validator in the current validator set.
2. Aggregate the RPC responses from each validator queried in (1).
3. Return the aggregated results to the client.

The Proxy RPC lets builders move fast, without needing to worry about tracking current validator sets, connection failure handling and retry policies, response aggregation, etc.

Later documentation will cover these APIs in more detail.

## Prerequisites

Fast APIs are based on the [JSON-RPC protocol](https://www.jsonrpc.org/), a transport-agnostic server/client RPC protocol that uses JSON-encoded payloads.

In Fast, our JSON-RPC APIs currently use an HTTP transport.

To use the Fast APIs, apps must be able to initiate a JSON-RPC over HTTP (i.e., act as JSON-RPC HTTP clients).

While the JSON-RPC specification itself is quite simple and easy to implement, there are already existing JSON-RPC client libraries available for popular programming languages like Python, Javascript, and Rust. Here are some in no particular order:

* Python: [json-rpc](https://github.com/pavlov99/json-rpc), [jsonrpc2-pyclient](https://gitlab.com/mburkard/jsonrpc2-pyclient), [pjrpc](https://github.com/dapper91/pjrpc)
* JavaScript/TypeScript: [client-js](https://github.com/open-rpc/client-js), [json-rpc-2.0](https://github.com/shogowada/json-rpc-2.0), [yerpc](https://github.com/chatmail/yerpc) (TypeScript on the client-side)
* Rust: [jsonrpsee](https://github.com/paritytech/jsonrpsee), [elite-rpc](https://github.com/vincenzopalazzo/elite-rpc)

JSON-RPC requests can also be performed directly from your terminal using `curl` which is available by default on almost all modern OS distributions.

Below is a real JSON-RPC command written using `curl` that you can execute against the Fast network proxy, just by copying and pasting the text below into your terminal.

```bash
curl -X POST 'https://proxy.fastset.xyz' \ 
  --header 'Content-Type: application/json' \ 
  --data '{ 
     "jsonrpc": "2.0", 
     "id": 1, "method": 
     "proxy_getAccountInfo", 
     "params": { 
       "address": [182, 124, 38, 177, 220, 153, 3, 0, 245, 40, 35, 137, 166, 139, 10, 70, 139, 86, 145, 149, 240, 249, 195, 22, 40, 21, 144, 31, 133, 107, 3, 168] 
      } 
     }' 
```

You'll see more such examples in the API documentation.

## Contents

* [**Proxy API**](/fast-archived/developers/fast-api/proxy-api): the complete API documentation for the Fast Proxy RPC interface.
* [**Data types**](/fast-archived/developers/fast-api/data-types): cross-referenced type definitions.


# Validator API

## Submitting to Validator

<table data-header-hidden><thead><tr><th width="225.89984130859375">Method</th><th>Action</th></tr></thead><tbody><tr><td><a href="#submittransaction">submitTransaction</a></td><td>Submit a transaction to the validator.</td></tr><tr><td><a href="#submittransactioncertificate">submitTransactionCertificate</a></td><td>Submit a transaction certificate to the validator.</td></tr></tbody></table>

### submitTransaction

Submit a signed transaction to the validator. The validator will check that the signed transaction is valid and then will return its own signature.

The sender's transaction signature is computed using Ed25519 where:

* the public key is stored in [`Transaction`](/fast-archived/developers/fast-api/data-types#transaction).`sender` .
* the message to be signed is the [`Transaction`](/fast-archived/developers/fast-api/data-types#transaction) struct serialized using the [BCS format](https://github.com/zefchain/bcs) with the following special rule:
  * Numerical string fields [`Amount`](/fast-archived/developers/fast-api/data-types#amount)/[`Balance`](/fast-archived/developers/fast-api/data-types#balance)) are encoded as a little-endian unsigned 256-bit number as an array of `uint8` of length 32.

BCS serialization libraries are available for several languages:

* Rust: the [zefchain BCS library](https://github.com/zefchain/bcs) as a [`serde`](https://serde.rs/) backend
* Typescript/Javascript: the [Mysten Labs BCS library](https://www.npmjs.com/package/@mysten/bcs)

<table><thead><tr><th width="225.9246826171875">Parameters</th><th></th></tr></thead><tbody><tr><td><code>transaction</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#transaction"><code>Transaction</code></a>: It can be of any <a href="/pages/IdxpRMWVoW4rOtpzzgTS#claimtype"><code>ClaimType</code></a>.</td></tr><tr><td><code>signature</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#signatureormultisig"><code>SignatureOrMultiSig</code></a>: Created by <a href="/pages/IdxpRMWVoW4rOtpzzgTS#transaction"><code>Transaction</code></a>.<code>sender</code> and having the verifier signatures field set to the empty list in the case of <a href="/pages/IdxpRMWVoW4rOtpzzgTS#externalclaim"><code>ExternalClaim</code></a>s.</td></tr></tbody></table>

<table><thead><tr><th width="225.9246826171875">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#submittransactionresponse"><code>SubmitTransactionResponse</code></a></td><td>If the signed transaction was successfully submitted and validated.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / submitTransaction</summary>

**Curl:**

```bash
curl -X POST 'https://rpc.fastset.xyz/' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "submitTransaction",
       "params":
         {
           "transaction":
             {
               "sender": [200,200,191,145,217,203,135,199,251,88,121,96,64,156,203,156,136,57,94,12,155,183,22,116,8,165,72,238,49,233,30,23],
               "recipient": [198,116,158,101,182,199,132,204,46,62,203,247,99,237,110,191,133,193,183,69,227,236,255,231,240,147,33,121,90,170,152,69],
               "nonce": 0,
               "timestamp_nanos": 1761039590871000000,
               "claim":
                 {
                   "TokenTransfer":
                     {
                       "token_id": [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
                       "amount": "ffff",
                       "user_data": null
                     }
                 }
             },
           "signature":
             {
               "Signature": [243,31,62,0,151,90,232,58,19,85,223,180,108,88,58,96,121,162,10,170,165,106,79,50,100,191,137,166,203,176,149,113,211,75,182,33,30,9,1,223,166,3,97,72,62,45,39,110,168,47,70,26,87,33,39,58,152,91,56,129,149,18,172,14]
             }
         }
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result":
    {
      "validator": [253,112,52,72,100,69,192,75,235,211,175,165,191,201,31,106,19,138,251,42,229,209,213,131,100,19,223,27,90,91,223,47],
      "signature": [63,103,129,188,17,174,83,78,181,10,105,211,249,200,181,150,97,89,88,58,183,39,181,191,193,91,147,215,81,68,118,251,125,107,169,146,23,54,68,229,114,85,186,33,224,69,4,201,127,248,201,125,31,208,209,211,47,220,57,27,101,44,60,0],
      "next_nonce": 0,
      "transaction_hash": [12,222,137,95,78,167,83,27,133,214,112,214,243,176,118,49,123,178,141,227,199,150,166,113,197,153,215,94,184,120,208,197]
    }
}
```

</details>

***

### submitTransactionCertificate

Submit a transaction certificate to the validator.

<table><thead><tr><th width="225.6441650390625">Parameters</th><th></th></tr></thead><tbody><tr><td><code>transaction</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#transaction"><code>Transaction</code></a>: The transaction submitted previously via <a href="#submittransaction"><code>submitTransaction</code></a>.</td></tr><tr><td><code>signature</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#signatureormultisig"><code>SignatureOrMultiSig</code></a>: The (multi)signature submitted previously via <a href="#submittransaction"><code>submitTransaction</code></a>.</td></tr><tr><td><code>validator_signatures</code></td><td><code>Vec&#x3C;(</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#validatorname"><code>ValidatorName</code></a><code>,</code> <a href="/pages/IdxpRMWVoW4rOtpzzgTS#signature"><code>Signature</code></a><code>)></code>: A list of validator signatures.</td></tr><tr><td></td><td></td></tr></tbody></table>

<table><thead><tr><th width="225.9246826171875">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#confirmtransactionresponse"><code>ConfirmTransactionResponse</code></a></td><td>If the transaction was successfully submitted.</td></tr></tbody></table>

***

## Querying the Validator

<table data-header-hidden><thead><tr><th width="226.4644775390625"></th><th></th></tr></thead><tbody><tr><td><a href="#gettransactions">getTransactions</a></td><td>Return a range of transactions stored by this validator.</td></tr><tr><td><a href="#getperformanceinfo">getPerformanceInfo</a></td><td>Return information regarding the validator's recent performance..</td></tr><tr><td><a href="#getaccountinfo-example-update-needed">getAccountInfo</a></td><td>Return information regarding a specific account from the validator.</td></tr><tr><td><a href="#gettokeninfo">getTokenInfo</a></td><td>Return information regarding a set of tokens from the validator.</td></tr><tr><td><a href="#getversion">getVersion</a></td><td>Return the version number of the validator.</td></tr></tbody></table>

### getTransactions

Return a range of transactions previously processed and currently stored by the validator.

<table><thead><tr><th width="225.92474365234375">Parameters</th><th></th></tr></thead><tbody><tr><td><code>page</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#pagerequest"><code>PageRequest</code></a>: Defines the range of items to be returned.</td></tr></tbody></table>

<table><thead><tr><th width="225.9246826171875">Returns</th><th></th></tr></thead><tbody><tr><td><code>Page&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#timed"><code>Timed</code></a><code>&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#transactioninfo"><code>TransactionInfo</code></a><code>>></code></td><td>Contains all transactions in the requested range.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / getTransactions</summary>

**Curl:**

```bash
curl -X POST 'https://rpc.fastset.xyz/' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "getTransactions",
       "params": {
         "page": {
           "limit": 5,
           "token": null
         }
       }
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result":
    {
      "data":
        [
          {
            "data": 
              {
                "hash": [144,15,75,119,138,196,94,26,15,189,206,26,253,108,106,107,230,167,51,167,114,141,248,90,161,193,169,241,12,111,45,122],
                "sender": [0,2,244,118,98,244,212,43,39,148,218,101,140,250,137,112,152,171,103,216,120,255,201,123,92,174,237,47,29,109,81,161],
                "recipient": [119,54,233,140,96,2,218,41,212,150,255,50,222,139,98,11,170,231,81,164,151,242,244,82,119,183,13,201,133,203,103,7],
                "nonce": 0,
                "claim":
                  {
                    "TokenTransfer":
                      {
                        "token_id": [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
                        "amount": "100000",
                        "user_data": null
                      }
                  },
                "submission_timestamp_nanos": 1761074416134788600
              },
            "timing":
              {
                "signing_duration_nanos": 13429702,
                "user_time_nanos": 1569064,
                "settlement_duration_nanos": 28672802
              }
          },
          {
            "data":
              {
                "hash": [228,207,99,134,54,59,189,83,9,79,194,230,223,114,14,38,107,107,13,157,232,124,72,57,24,203,26,132,252,231,217,226],
                "sender": [119,54,233,140,96,2,218,41,212,150,255,50,222,139,98,11,170,231,81,164,151,242,244,82,119,183,13,201,133,203,103,7],
                "recipient": [163,96,54,175,29,21,35,215,53,18,81,181,115,86,16,107,148,24,149,51,18,166,173,45,18,28,185,85,225,164,179,239],
                "nonce": 0,
                "claim":
                  {
                    "TokenTransfer":
                      {
                        "token_id": [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
                        "amount": "ffff",
                        "user_data": null
                      }
                  },
                "submission_timestamp_nanos": 1761074416182000000
              },
            "timing":
              {
                "signing_duration_nanos": 15058725,
                "user_time_nanos": 54509131,
                "settlement_duration_nanos": 29008247
              }
          }],
      "next_page_token":2
    }
}
```

</details>

***

### getPerformanceInfo

Return information regarding the validator's recent performance.

<table><thead><tr><th width="225.9246826171875">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#rpcperformanceinforesponse"><code>RpcPerformanceInfoResponse</code></a></td><td></td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / getPerformanceInfo</summary>

**Curl:**

```bash
curl -X POST 'https://rpc.fastset.xyz/' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "getPerformanceInfo",
       "params": {}
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result":
    {
      "weak_finality_nanos": 14244213,
      "strong_finality_nanos": 71123835,
      "tps_last_second": 0,
      "tps_last_minute": 0,
      "tps_last_hour": 0,
      "ops_last_second": 0,
      "ops_last_minute": 0,
      "ops_last_hour": 0,
      "signed_transactions": 2,
      "settled_transactions": 2,
      "accounts_count": 20002,
      "db_stats":
        {
          "channel_buffer_size": 0,
          "rocksdb_props":
            {
              "rocksdb.cur-size-all-mem-tables": 8192,
              "rocksdb.estimate-pending-compaction-bytes": 0,
              "rocksdb.block-cache-pinned-usage": 348,
              "rocksdb.estimate-table-readers-mem": 0,
              "rocksdb.block-cache-usage": 348
            }
        }
    }
}
```

</details>

***

### getAccountInfo

Return information regarding a specific account from the validator.

<table><thead><tr><th width="225.9815673828125">Parameters</th><th></th></tr></thead><tbody><tr><td><code>address</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#fastsetaddress"><code>FastSetAddress</code></a>: The designated account's Fast address.</td></tr><tr><td><code>token_balance_filter</code></td><td><code>Option&#x3C;Vec&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokenid"><code>TokenId</code></a><code>>></code>: The set of token types for which a balance request will be made. If this parameter is omitted, no custom token balances will be returned. If it is present and empty, the balance of all tokens owned by this account will be queried.</td></tr><tr><td><code>state_key_filter</code></td><td><code>Option&#x3C;Vec&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#statekey"><code>StateKey</code></a><code>>></code>: The set of state fields created by this account to be returned. If this parameter is omitted, no state fields will be returned. If it is present and empty, all state fields created by this account will be returned.</td></tr><tr><td><code>certificate_by_nonce</code></td><td><code>Option&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#noncerange"><code>NonceRange</code></a><code>></code>: If passed, a list of transaction certificates within the nonce range specified by this parameter submitted by account address will be returned (omitting those which do not exist or have been pruned from the validator database).</td></tr></tbody></table>

<table><thead><tr><th width="225.9246826171875">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#accountinforesponse"><code>AccountInfoResponse</code></a></td><td></td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / getAccountInfo</summary>

**Curl:**

```bash
curl -X POST 'https://rpc.fastset.xyz/' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "getAccountInfo",
       "params": {
         "address": [200,200,191,145,217,203,135,199,251,88,121,96,64,156,203,156,136,57,94,12,155,183,22,116,8,165,72,238,49,233,30,23],
         "token_balance_filter": null,
         "certificate_by_nonce": null
       }
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result":
    {
      "sender": [200,200,191,145,217,203,135,199,251,88,121,96,64,156,203,156,136,57,94,12,155,183,22,116,8,165,72,238,49,233,30,23],
      "balance": "0",
      "state": null,
      "next_nonce": 0,
      "pending_confirmation": null,
      "requested_certificate": null,
      "requested_validated_transaction": null,
      "requested_received_transfers": [],
      "token_balance": [],
      "requested_claim_by_id": null,
      "requested_claims": []
    }
}
```

</details>

***

### getTokenInfo

Return information regarding a set of tokens from the validator.

<table><thead><tr><th width="225.83984375">Parameters</th><th></th></tr></thead><tbody><tr><td><code>token_ids</code></td><td><code>Vec&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokenid"><code>TokenId</code></a><code>></code>: An array of <a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokenid"><code>TokenId</code></a>s to look up.</td></tr></tbody></table>

<table><thead><tr><th width="225.9246826171875">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokeninforesponse"><code>TokenInfoResponse</code></a></td><td>Contains data for all requested tokens.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / getTokenInfo</summary>

**Curl:**

```bash
curl -X POST 'https://rpc.fastset.xyz/' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "getTokenInfo",
       "params": {
         "token_ids": [
           [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
         ]
       }
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": 
    {
      "requested_token_metadata": 
        [
          [
            [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            null
          ]
        ]
    }
}
```

</details>

***

### getVersion

Return the version number of the validator.

<table><thead><tr><th width="225.9246826171875">Returns</th><th></th></tr></thead><tbody><tr><td><code>String</code></td><td></td></tr></tbody></table>


# Proxy API

Submitting to Proxy

<table data-header-hidden><thead><tr><th width="226.336669921875"></th><th></th></tr></thead><tbody><tr><td><a href="#set_submittransaction">proxy_submitTransaction</a></td><td>Submits a signed transaction to the proxy.</td></tr><tr><td><a href="#proxy_faucetdrip">proxy_faucetDrip</a></td><td>Distribute funds from the proxy's account to the specified account.</td></tr><tr><td><a href="#proxy_evmsigncertificate">proxy_evmSignCertificate</a></td><td>Cross-sign a transaction certificate using secp256k1 for EVM verification.</td></tr></tbody></table>

### proxy\_submitTransaction

Submit a transaction to the proxy to be forwarded to and settled on the network. Upon receipt of the transaction, if the transaction is complete, the proxy will perform the following steps:

* Submit the signed transaction to all validators known to the proxy.
* Accumulate signatures from all validators which attest that the transaction is valid.
* Submit a transaction certificate (composed of the transaction and a quorum of validator signatures) to all validators known to the proxy.

If the transaction is incomplete, the proxy will store the transaction and await additional requests which provide the missing information.

The sender's transaction signature is computed using Ed25519 where:

* the public key is stored in [`Transaction`](/fast-archived/developers/fast-api/data-types#transaction).`sender` .
* the message to be signed is the [`Transaction`](/fast-archived/developers/fast-api/data-types#transaction) struct serialized using the [BCS format](https://github.com/zefchain/bcs) with the following special rule:
  * Numerical string [`Amount`](/fast-archived/developers/fast-api/data-types#amount)/[`Balance`](/fast-archived/developers/fast-api/data-types#balance) fields are encoded as a litte-endian unsigned 256-bit number as an array of uint8 of length 32.

BCS serialization libraries are available for several languages:

* Rust: the [zefchain BCS library](https://github.com/zefchain/bcs) as a [`serde`](https://serde.rs/) backend
* Typescript/Javascript: the [Mysten Labs BCS library](https://www.npmjs.com/package/@mysten/bcs)

<table><thead><tr><th width="226.20880126953125" valign="top">Parameters</th><th></th></tr></thead><tbody><tr><td valign="top"><code>transaction</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#transaction"><code>Transaction</code></a>: A transaction of any <a href="/pages/IdxpRMWVoW4rOtpzzgTS#claimtype"><code>ClaimType</code></a>.</td></tr><tr><td valign="top"><code>signature</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#signatureormultisig"><code>SignatureOrMultiSig</code></a>: A (multi)signature over the transaction created by <a href="/pages/IdxpRMWVoW4rOtpzzgTS#transaction"><code>Transaction</code></a><code>.sender</code> and having the verifier signatures field set to the empty list prior to signing in the case of <a href="/pages/IdxpRMWVoW4rOtpzzgTS#externalclaim"><code>ExternalClaim</code></a>s.</td></tr></tbody></table>

<table><thead><tr><th width="226">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#proxysubmittransactionresult"><code>ProxySubmitTransactionResult</code></a></td><td><code>Success</code>: with a transaction certificate if the transaction is complete and was successfully submitted and validated. <code>IncompleteMultiSigs</code>: A flag indicating that the transaction is incomplete and has been stored on the proxy for eventual completion and submission.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / proxy_submitTransaction</summary>

**Curl:**

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "proxy_submitTransaction",
       "params": {
         "transaction": {
           "sender": [54,128,54,206,88,243,124,101,147,238,105,180,78,172,190,12,193,195,118,236,177,124,79,251,192,63,114,196,255,73,74,81],
           "recipient": [75,164,223,195,221,101,117,31,251,60,194,50,41,1,83,17,79,28,61,165,140,36,12,127,122,60,161,218,118,145,112,210],
           "nonce": 0,
           "timestamp_nanos": 1769705752161000000,
           "claim": {
             "TokenTransfer": {
               "token_id": [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
               "amount": "ffff",
               "user_data": null
             }
           },
           "archival": true
         },
         "signature": {
           "Signature": [228,162,180,83,46,167,133,230,176,100,60,110,57,65,23,113,101,204,242,193,125,59,88,232,122,6,90,118,41,159,94,108,20,181,224,234,57,42,35,95,4,186,62,128,68,213,212,46,214,155,241,163,147,120,155,69,201,1,29,63,106,22,75,15]
         }
       }
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": 
    {
      "Success": 
        {
          "envelope":
            {
              "transaction":
                {
                  "sender": [54,128,54,206,88,243,124,101,147,238,105,180,78,172,190,12,193,195,118,236,177,124,79,251,192,63,114,196,255,73,74,81],
                  "recipient": [75,164,223,195,221,101,117,31,251,60,194,50,41,1,83,17,79,28,61,165,140,36,12,127,122,60,161,218,118,145,112,210],
                  "nonce": 0,
                  "timestamp_nanos": 1769705752161000000,
                  "claim": 
                    {
                      "TokenTransfer":
                        {
                          "token_id": [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
                          "amount": "ffff",
                          "user_data": null
                        }
                    },
                  "archival": true
              },
            "signature":
              {
                "Signature": [228,162,180,83,46,167,133,230,176,100,60,110,57,65,23,113,101,204,242,193,125,59,88,232,122,6,90,118,41,159,94,108,20,181,224,234,57,42,35,95,4,186,62,128,68,213,212,46,214,155,241,163,147,120,155,69,201,1,29,63,106,22,75,15]
              }
          },
          "signatures": 
            [
              [
                [223,165,168,37,72,213,141,191,209,124,158,179,40,24,196,122,92,162,184,248,231,218,132,148,44,167,202,12,126,87,249,141],
                [95,227,196,114,53,242,118,17,88,202,2,186,132,39,158,203,199,42,252,162,208,162,93,83,168,79,145,250,225,228,244,45,131,200,28,80,73,80,213,164,50,7,240,158,32,196,163,193,225,15,169,236,149,62,228,13,149,125,53,158,20,74,115,1]
              ],
              [
                [236,249,103,252,146,0,130,223,133,72,40,87,67,21,187,13,100,52,193,194,242,152,67,181,8,2,150,72,51,230,245,169],
                [80,65,124,70,9,222,103,175,74,243,129,191,79,205,119,80,41,194,224,73,214,119,154,64,107,201,247,238,110,98,151,185,156,47,5,75,247,176,90,179,158,127,26,149,215,45,142,235,120,11,235,165,86,205,247,219,34,166,149,186,163,111,94,9]
              ],
              [
                [150,20,92,12,163,133,206,208,191,189,42,178,133,120,224,172,183,116,145,47,243,232,221,22,110,243,38,177,23,139,10,120],
                [26,229,199,218,49,147,173,149,87,246,144,213,22,73,18,80,3,122,177,18,83,197,212,112,188,76,155,161,2,206,135,224,43,13,117,143,53,255,153,249,50,12,85,129,13,14,128,73,159,238,21,14,19,61,122,202,203,5,247,35,134,61,38,9]
              ]
            ]
        }
    }
}
```

</details>

***

### proxy\_faucetDrip

Distribute funds from the proxy's account to the specified account.

<table><thead><tr><th width="226.20880126953125" valign="top">Parameters</th><th></th></tr></thead><tbody><tr><td valign="top"><code>recipient</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#fastsetaddress"><code>FastSetAddress</code></a>: Account that should receive the funds.</td></tr><tr><td valign="top"><code>amount</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#amount"><code>Amount</code></a>: Amount of funds that should be added.</td></tr><tr><td valign="top"><code>token_id</code></td><td><code>Option&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokenid"><code>TokenId</code></a><code>></code>: If <code>None</code>, funds will be in the default token. If a <code>TokenId</code> is passed, funds will be in that token.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / proxy_faucetDrip</summary>

**Curl:**

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "proxy_faucetDrip",
       "params": {
         "recipient": [54,128,54,206,88,243,124,101,147,238,105,180,78,172,190,12,193,195,118,236,177,124,79,251,192,63,114,196,255,73,74,81],
         "amount": "3635c9adc5dea00000",
         "token_id": null
       }
     }'
```

Note: `3635c9adc5dea00000` = 1000 × 10¹⁸ = 1000 SET in raw units.

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": null
}
```

</details>

***

### proxy\_evmSignCertificate

Cross-sign a transaction certificate using secp256k1 for EVM verification. Produces a signature that can be verified by EVM smart contracts, used for bridging and cross-chain verification.

<table><thead><tr><th width="226.20880126953125" valign="top">Parameters</th><th></th></tr></thead><tbody><tr><td valign="top"><code>certificate</code></td><td><code>TransactionCertificate</code>: The certificate to cross-sign.</td></tr></tbody></table>

<table><thead><tr><th width="226">Returns</th><th></th></tr></thead><tbody><tr><td>EVM signature</td><td>An EVM-compatible signature object that can be verified by EVM smart contracts, used for bridging and cross-chain verification.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / proxy_evmSignCertificate</summary>

**Curl:**

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "proxy_evmSignCertificate",
       "params": {
         "certificate": {
           "envelope": {
             "transaction": { "..." : "..." },
             "signature": { "Signature": ["..."] }
           },
           "signatures": [["...", "..."]]
         }
       }
     }'
```

</details>

***

## Querying the Validator

<table data-header-hidden><thead><tr><th width="225.88568115234375"></th><th></th></tr></thead><tbody><tr><td><a href="#proxy_getaccountinfo">proxy_getAccountInfo</a></td><td>Returns information regarding a specific account from a validator known to the proxy.</td></tr><tr><td><a href="#proxy_gettokeninfo">proxy_getTokenInfo</a></td><td>Returns information regarding a set of tokens from some validator known to the proxy.</td></tr></tbody></table>

### proxy\_getAccountInfo

Return information regarding a specific account from some validator known to the proxy.

<table><thead><tr><th width="226.1058349609375">Parameters</th><th></th></tr></thead><tbody><tr><td><code>address</code></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#fastsetaddress"><code>FastSetAddress</code></a>: The designated account to query.</td></tr><tr><td><code>token_balances_filter</code></td><td><code>Option&#x3C;Vec&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokenid"><code>TokenId</code></a><code>>></code>: The set of token types for which a balance request will be made. If this parameter is omitted, no custom token balances will be returned. If it is present and empty, the balance of all tokens owned by this account will be queried.</td></tr><tr><td><code>state_key_filter</code></td><td><code>Option&#x3C;Vec&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#statekey"><code>StateKey</code></a><code>>></code>: The set of state fields created by this account to be returned. If this parameter is omitted, no state fields will be returned; if it is present and empty, all state fields created by this account will be returned.</td></tr><tr><td><code>certificate_by_nonce</code></td><td><code>Option&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#noncerange"><code>NonceRange</code></a><code>></code>: If passed, a list of transaction certificates within the nonce range specified by this parameter submitted by account address will be returned (omitting those which do not exist or have been pruned from the validator database).</td></tr></tbody></table>

<table><thead><tr><th width="226.48577880859375">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#accountinforesponse"><code>AccountInfoResponse</code></a></td><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#accountinforesponse"><code>AccountInfoResponse</code></a> for the requested account.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / proxy_getAccountInfo</summary>

**Curl:**

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "proxy_getAccountInfo",
       "params": {
         "address": [54,128,54,206,88,243,124,101,147,238,105,180,78,172,190,12,193,195,118,236,177,124,79,251,192,63,114,196,255,73,74,81],
         "token_balances_filter": null,
         "state_key_filter": null,
         "certificate_by_nonce": null
       }
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": 
    {
      "sender": [54,128,54,206,88,243,124,101,147,238,105,180,78,172,190,12,193,195,118,236,177,124,79,251,192,63,114,196,255,73,74,81],
      "balance": "0",
      "next_nonce": 0,
      "pending_confirmation": null,
      "requested_state": [],
      "requested_certificates": null,
      "requested_validated_transaction": null,
      "token_balance": []
    }
}
```

</details>

***

### proxy\_getTokenInfo

Return information regarding a set of tokens from some validator known to the proxy.

<table><thead><tr><th width="226.08447265625">Parameters</th><th></th></tr></thead><tbody><tr><td><code>token_ids</code></td><td><code>Vec&#x3C;</code><a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokenid"><code>TokenId</code></a><code>></code>: An array of <a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokenid"><code>TokenId</code></a>s to look up.</td></tr></tbody></table>

<table><thead><tr><th width="226.48577880859375">Returns</th><th></th></tr></thead><tbody><tr><td><a href="/pages/IdxpRMWVoW4rOtpzzgTS#tokeninforesponse"><code>TokenInfoResponse</code></a></td><td>Contains data for all requested tokens.</td></tr></tbody></table>

<details>

<summary><mark style="background-color:green;">POST</mark> / proxy_getTokenInfo</summary>

**Curl:**

```bash
curl -X POST 'https://testnet.api.fast.xyz/proxy' \
     --header 'Content-Type: application/json' \
     --data '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "proxy_getTokenInfo",
       "params": {
         "token_ids": [
           [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
         ]
       }
     }'
```

**Server response:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result":
    {
      "requested_token_metadata":
        [
          [
            [250,87,94,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            null
          ]
        ]
    }
}
```

</details>

***

## Error Codes

The proxy uses standard JSON-RPC 2.0 error codes, plus custom codes for application-specific errors.

| Code     | Message          | Description                                                                 |
| -------- | ---------------- | --------------------------------------------------------------------------- |
| `-32700` | Parse error      | Malformed JSON in request body                                              |
| `-32601` | Method not found | The requested method does not exist                                         |
| `-32602` | Invalid params   | Missing or invalid parameters                                               |
| `-32000` | Server error     | Transaction validation failure (e.g., nonce mismatch, insufficient balance) |
| `-32003` | Throttled        | Rate limit exceeded (e.g., faucet cooldown)                                 |

Error response format:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32000,
    "message": "expected nonce is 1 but tx has 0"
  }
}
```

Some errors include an additional `data` field with details:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid params",
    "data": "missing field `certificate` at line 1 column 2"
  }
}
```


# Data types

## AccountInfoResponse

Data associated to one account. Contains optional fields for returning account-related info from various types of queries. Reflects the view of a single validator, which may be lagging behind the rest of the network.

<table><thead><tr><th width="226.13067626953125" valign="top">Fields</th><th></th></tr></thead><tbody><tr><td valign="top"><code>sender</code></td><td><a href="#publickeybytes"><code>PublicKeyBytes</code></a>: The address of the account.</td></tr><tr><td valign="top"><code>balance</code></td><td><a href="#balance"><code>Balance</code></a>: Balance in native tokens of the account.</td></tr><tr><td valign="top"><code>next_nonce</code></td><td><a href="#nonce"><code>Nonce</code></a>: The next transaction from the account is required to have this nonce.</td></tr><tr><td valign="top"><code>pending_confirmation</code></td><td><a href="#validatedtransaction"><code>ValidatedTransaction</code></a> (optional): The transaction that has been validated by the current validator, but not yet confirmed (if requested).</td></tr><tr><td valign="top"><code>requested_state</code></td><td><code>Array&#x3C;(</code> <a href="#statekey"><code>StateKey</code></a><code>,</code><a href="#state"><code>State</code></a><code>)></code>: The keys and values of the account's state as requested.</td></tr><tr><td valign="top"><code>requested_certificates</code></td><td><code>Option&#x3C;Array&#x3C;</code><a href="#transactioncertificate"><code>TransactionCertificate</code></a><code>>></code> (optional): A single transaction certificate (if requested).</td></tr><tr><td valign="top"><code>requested_validated_transaction</code></td><td><a href="#validatedtransaction"><code>ValidatedTransaction</code></a> (optional): A single validated transaction (if requested).</td></tr><tr><td valign="top"><code>token_balance</code></td><td><code>Array&#x3C;(Array&#x3C;uint8; length=32>,</code><a href="#balance"><code>Balance</code></a><code>)></code>: Token balances of tokens held by this account (may not be all tokens held).</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/rqy5odd00okTpa3XTyyk" %}

***

## AddressChange

<table><thead><tr><th width="226.13067626953125" valign="top">Variants</th><th></th></tr></thead><tbody><tr><td valign="top"><code>Add</code></td><td><code>array</code></td></tr><tr><td valign="top"><code>Remove</code></td><td><code>array</code></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/VCgRKOI9SqplRwWxgOQi" %}

***

## Amount

256-bit unsigned integer encoded as a hex string.

`string`

**JSON Schema:**

{% file src="/files/Ab7rlvrJ9XA99xervnBp" %}

***

## Balance

257-bit signed integer with the magnitude encoded in hex preceded by `-` sign if applicable.

`string`

**JSON Schema:**

{% file src="/files/lva62U7L6rqoyldYzi08" %}

***

## ClaimType

A claim is a concept on Fast that drives state changes on the Fast network. It is akin to\
the "calldata" of a transaction on Ethereum.

There are many types of claims, denoting the actions that can be packed into a transaction, so `ClaimType` comes with several variants.

<table><thead><tr><th width="225.98223876953125">Variants</th><th width="553.6136474609375"></th></tr></thead><tbody><tr><td><code>TokenTransfer</code></td><td><a href="#tokentransfer"><code>TokenTransfer</code></a>: Transfer or burn tokens (that is, transfer tokens to the burn address)</td></tr><tr><td><code>TokenCreation</code></td><td><a href="#tokencreation"><code>TokenCreation</code></a>: Create custom token</td></tr><tr><td><code>TokenManagement</code></td><td><a href="#tokenmanagement"><code>TokenManagement</code></a>: Modify custom token</td></tr><tr><td><code>ExternalClaim</code></td><td><a href="#externalclaim"><code>ExternalClaim</code></a>: Arbitrary byte data</td></tr><tr><td><code>Mint</code></td><td><a href="#mint"><code>Mint</code></a>: Mint funds in a custom token</td></tr><tr><td><code>Burn</code></td><td><a href="#burn"><code>Burn</code></a>: burns the amount of token specified</td></tr><tr><td><code>Batch</code></td><td><a href="#operationbundle"><code>OperationBundle</code></a>: Perform several operations</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/TUxDiAq238aCQLKzU8g5" %}

***

<table><thead><tr><th width="225.5234375" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>verifier_committee</code></td><td valign="top"><code>Array&#x3C;</code><a href="#publickeybytes"><code>PublicKeyBytes</code></a><code>></code>: Set of verifiers (regular Fast addresses) that can sign for this <a href="#externalclaim">ExternalClaim</a>.</td></tr><tr><td valign="top"><code>verifier_quorum</code></td><td valign="top"><a href="#quorum"><code>Quorum</code></a>: Minimum number of verifiers in <code>verifier_committee</code> for which Fast validators will sign this transaction.</td></tr><tr><td valign="top"><code>claim_data</code></td><td valign="top"><a href="#claimdata"><code>ClaimData</code></a>: Arbitrary data that the verifiers are signing.</td></tr></tbody></table>

## FastAddress

A byte sequence that names an entity on or off the Fast network, depending on the name of type which stores this value.

It is typically encoded as an Ed25519 public key, but may have other formats, including but not limited to, a 32-byte string composed of all 0x00 bytes (burn address). Note that any funds sent to the burn address will be permanently lost!

`Array<uint8; length=32>`

**JSON Schema:**

{% file src="/files/4MssfrQv2xxN3Huq4Ns5" %}

***

## Mint

Create more funds of a token. The sender of the [Transaction](#transaction) must be a current mint of the token.

{% hint style="warning" %}
**Warning:** This is not independent of a token management operation that removes the sender of this transaction from the list of mints.
{% endhint %}

<table><thead><tr><th width="225.7152099609375" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>token_id</code></td><td valign="top"><code>Array&#x3C;uint8; length=32></code>: The hash of the <a href="#tokencreation"><code>TokenCreation</code></a> transaction that created the token. This is calculated using the keccak256 hash over the data encoded in the same way as for signing.</td></tr><tr><td valign="top"><code>amount</code></td><td valign="top"><a href="#amount"><code>Amount</code></a>: Amount to mint.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/4OCMevQG4yUqMaZWGucq" %}

***

## MintOperation

Create more funds of a token. The sender of the [`Transaction`](#transaction) must be a current mint of the token.

{% hint style="warning" %}
**Warning:** This is not independent of a token management operation that removes the sender of this transaction from the list of mints. This is a variant of [`Mint`](#mint) that adds a recipient field.
{% endhint %}

<table><thead><tr><th width="225.7152099609375" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>token_id</code></td><td valign="top"><code>Array&#x3C;uint8; length=32></code>: The hash of the <a href="#tokencreation">TokenCreation</a> transaction that created the token. This is calculated using the keccak256 hash over the data encoded in the same way as for signing.</td></tr><tr><td valign="top"><code>recipient</code></td><td valign="top"><a href="#publickeybytes"><code>PublicKeyBytes</code></a>: Recipient of the new funds.</td></tr><tr><td valign="top"><code>amount</code></td><td valign="top"><a href="#amount"><code>Amount</code></a>: Amount to mint.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/sb2THKFjqK5nBvKoVYfp" %}

## Burn

Burn an amount of some custom token.

| Fields     |                                          |
| ---------- | ---------------------------------------- |
| `token_id` | [`TokenId`](#tokenid): The token to burn |
| `amount`   | [`Amount`](#amount): The amount to burn  |

**JSON Schema:**

{% file src="/files/a6sLNhw8oBVzUNIaEG7i" %}

## BurnOperation

Burn an amount of some custom token.

| Fields     |                                          |
| ---------- | ---------------------------------------- |
| `token_id` | [`TokenId`](#tokenid): The token to burn |
| `amount`   | [`Amount`](#amount): The amount to burn  |

**JSON Schema:**

{% file src="/files/130BydzmNYWdrungDao0" %}

***

## MultiSig

<table><thead><tr><th width="225.9140625">Fields</th><th></th></tr></thead><tbody><tr><td><code>config</code></td><td>​<a href="https://app.gitbook.com/o/6QvwPhkSuFHVCt22CHAH/s/PLmwKHYt9IQXlVvNGdPk/~/diff/~/changes/221/~/revisions/gCInqu9cV36lr9Af1DiP/fastset/developers/fastset-api/data-types#multisigconfig"><code>MultiSigConfig</code></a>​</td></tr><tr><td><code>signatures</code></td><td><code>Array&#x3C;(</code><a href="https://app.gitbook.com/o/6QvwPhkSuFHVCt22CHAH/s/PLmwKHYt9IQXlVvNGdPk/~/diff/~/changes/221/~/revisions/gCInqu9cV36lr9Af1DiP/fastset/developers/fastset-api/data-types#publickeybytes"><code>PublicKeyBytes</code></a><code>,</code> <a href="https://app.gitbook.com/o/6QvwPhkSuFHVCt22CHAH/s/PLmwKHYt9IQXlVvNGdPk/~/diff/~/changes/221/~/revisions/gCInqu9cV36lr9Af1DiP/fastset/developers/fastset-api/data-types#signature"><code>Signature</code></a><code>)></code></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/KeIio69A1gYmFEouOllB" %}

***

## MultiSigConfig

Determines the address of a multisig account.

<table><thead><tr><th width="226.41015625">Fields</th><th></th></tr></thead><tbody><tr><td><code>authorized_signers</code></td><td><code>Array&#x3C;</code><a href="https://app.gitbook.com/o/6QvwPhkSuFHVCt22CHAH/s/PLmwKHYt9IQXlVvNGdPk/~/diff/~/changes/221/~/revisions/gCInqu9cV36lr9Af1DiP/fastset/developers/fastset-api/data-types#publickeybytes"><code>PublicKeyBytes</code></a><code>></code>: The accounts which may sign for a multisig transaction to be accepted.</td></tr><tr><td><code>quorum</code></td><td>​<a href="https://app.gitbook.com/o/6QvwPhkSuFHVCt22CHAH/s/PLmwKHYt9IQXlVvNGdPk/~/diff/~/changes/221/~/revisions/gCInqu9cV36lr9Af1DiP/fastset/developers/fastset-api/data-types#quorum"><code>Quorum</code></a>: The minimum number of accounts that must sign.</td></tr><tr><td><code>nonce</code></td><td>​<a href="https://app.gitbook.com/o/6QvwPhkSuFHVCt22CHAH/s/PLmwKHYt9IQXlVvNGdPk/~/diff/~/changes/221/~/revisions/gCInqu9cV36lr9Af1DiP/fastset/developers/fastset-api/data-types#nonce"><code>Nonce</code></a>: Arbitrary data. Useful for creating multiple distinct multisig accounts with the same committee/quorum.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/XejUNAeA4v69kgwPtwkv" %}

***

## Nonce

`uint64`

**JSON Schema:**

{% file src="/files/8bnKLgnZT7yqyH4MCLxw" %}

***

## NonceRange

<table><thead><tr><th width="226.1058349609375" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>start</code></td><td valign="top"><a href="#nonce"><code>Nonce</code></a></td></tr><tr><td valign="top"><code>limit</code></td><td valign="top"><code>uint</code></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/8bnKLgnZT7yqyH4MCLxw" %}

***

## Operation

One of various types of actions that be put in a multi-operation transaction. Payload structs are different from the top-level [`ClaimType`](#claimtype) where we need to support multiple operations with different receivers.

<table><thead><tr><th width="226.1953125">Variants</th><th></th></tr></thead><tbody><tr><td><code>TokenTransfer</code></td><td><a href="#tokentransferoperation"><code>TokenTransferOperation</code></a>: Transfer or burn tokens, that is transfer tokens to the burn address.</td></tr><tr><td><code>TokenCreation</code></td><td><a href="#tokencreation"><code>TokenCreation</code></a>: Create custom token</td></tr><tr><td><code>TokenManagement</code></td><td><a href="#tokenmanagement"><code>TokenManagement</code></a>: Modify custom token</td></tr><tr><td><code>ExternalClaim</code></td><td><a href="#externalclaim"><code>ExternalClaim</code></a>: Arbitrary byte data</td></tr><tr><td><code>Mint</code></td><td><a href="#mintoperation"><code>MintOperation</code></a>: Mint funds in a custom token</td></tr><tr><td><code>Burn</code></td><td><a href="#burn"><code>Burn</code></a>: burns the amount of token specified</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/MLPrqfobovK4tZownTfj" %}

***

## OperationBundle

`Array<`[`Operation`](#operation)`>`

**JSON Schema:**

{% file src="/files/1XlMUm416Ts73qGPdKh0" %}

***

## ProxySubmitTransactionResult

<table><thead><tr><th width="225.7578125">Variants</th><th></th></tr></thead><tbody><tr><td><code>Success</code></td><td><a href="#transactioncertificate"><code>TransactionCertificate</code></a></td></tr><tr><td><code>IncompleteMultiSig</code></td><td><code>array</code></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/lpEsGWakUYHKje9rs4EN" %}

***

## PublicKeyBytes

A byte sequence that names an entity on or off the Fast network, depending on the name of type which stores this value.

It is typically encoded as an Ed25519 public key, but may have other formats, including but not limited to, a 32-byte string composed of all 0x00 bytes (burn address). Note that any funds sent to the burn address will be permanently lost!

`Array<uint8; length=32>`

**JSON Schema:**

{% file src="/files/4MssfrQv2xxN3Huq4Ns5" %}

***

## Quorum

`uint64`

**JSON Schema:**

{% file src="/files/LKrua7V6bOgl6MiaFGe2" %}

***

## Signature

An Ed25519 signature.

`Array<uint8; length=64>`

**JSON Schema:**

{% file src="/files/7pRbCZaCsY3Xz0Nz4Nzn" %}

***

## SignatureOrMultiSig

<table><thead><tr><th width="226.1058349609375" valign="top">Variants</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>Signature</code></td><td valign="top"><a href="#signature"><code>Signature</code></a></td></tr><tr><td valign="top"><code>MultiSig</code></td><td valign="top"><a href="#multisig"><code>MultiSig</code></a></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/rkjBK6BiTcbOVjJaUCeF" %}

***

## State

`Array<uint8; length=32>`

**JSON Schema:**

{% file src="/files/8JwnfQg46LYvcGhytYaJ" %}

***

## StateKey

`Array<uint8; length=32>`

**JSON Schema:**

{% file src="/files/qrJv0f8lr2TiYjUy1c7l" %}

***

## TokenCreation

Create a new token. The token ID is derived from the [`Transaction`](#transaction) , thus it also depends on the creator and the [`Nonce`](#nonce).

<table><thead><tr><th width="226.05255126953125" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>token_name</code></td><td valign="top"><code>string</code>: Human-readable name</td></tr><tr><td valign="top"><code>decimals</code></td><td valign="top"><code>uint8</code>: Power of 10 that should be considered a full unit of this token. An <a href="#amount"><code>Amount</code></a> is still always in least units.</td></tr><tr><td valign="top"><code>initial_amount</code></td><td valign="top"><a href="#amount"><code>Amount</code></a>: Initial balance, which will be held by the creator of the token.</td></tr><tr><td valign="top"><code>mints</code></td><td valign="top"><code>Array&#x3C;</code><a href="#publickeybytes"><code>PublicKeyBytes</code></a><code>></code>: Addresses which will be able to create more of this token.</td></tr><tr><td valign="top"><code>user_data</code></td><td valign="top"><a href="#userdata"><code>UserData</code></a>: Arbitrary userdata attached to this transaction</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/lIuDSwg0XDFnTVGAZtSC" %}

***

## ExternalClaim

A claim on some arbitrary data. A set of verifiers (external to the Fast network) verify the claim and attach their signatures to it. Then, Fast validators validates these signatures upon receiving such claim.

| Field      | Description                               |
| ---------- | ----------------------------------------- |
| claim      | [`ExternalClaimBody`](#externalclaimbody) |
| signatures | `Array<`[`VerifierSig`](#verifiersig)`>`  |

**JSON Schema:**

{% file src="/files/uilAq5wnvwLrAGFFZLYG" %}

***

## ExternalClaimBody

| Fields               |                                                |
| -------------------- | ---------------------------------------------- |
| `verifier_committee` | `Array<`[`FastSetAddress`](#fastsetaddress)`>` |
| `verifier_quorum`    | [`Quorum`](#quorum)                            |
| `claim_data`         | [`ClaimData`](#claimdata)                      |

**JSON Schema:**

{% file src="/files/BjNoxRPpzvULdACHeOmd" %}

## ClaimData

`Array<uint8>`

**JSON Schema:**

{% file src="/files/32U58RzEMAWVi0OpR7EE" %}

***

## VerifierSig

| Fields          |                                                                                                                                   |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `verifier_addr` | [`PublicKeyBytes`](#publickeybytes): the public key (address) of the verifier                                                     |
| `sig`           | [`Signature`](#signature): ED25519 signature over the entire [`Transaction`](#transaction) struct without any verifier signatures |

**JSON Schema:**

{% file src="/files/s2aKr9s8ASsgkf2vD8NK" %}

***

## TokenId

`Array<uint8; length=32>`

**JSON Schema:**

{% file src="/files/BZAUOWHht1UUVVQVQPgR" %}

***

## TokenInfoResponse

<table><thead><tr><th width="232.26702880859375">Fields</th><th></th></tr></thead><tbody><tr><td><code>requested_token_metadata</code></td><td><code>Array&#x3C;(Array&#x3C;uint8; length=32>,</code><a href="#tokenmetadata"><code>TokenMetadata</code></a><code>)></code></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/FFY5BQAlJRIWbKWnTd9X" %}

***

## TokenManagement

Manage an existing token.

<table><thead><tr><th width="225.9246826171875" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>token_id</code></td><td valign="top"><code>Array&#x3C;uint8; length=32></code>: The id of the token to be managed</td></tr><tr><td valign="top"><code>update_id</code></td><td valign="top"><a href="#nonce"><code>Nonce</code></a>: The update id for this token (used for sequencing). Each update id must be one greater than the last.</td></tr><tr><td valign="top"><code>new_admin</code></td><td valign="top"><a href="#publickeybytes"><code>PublicKeyBytes</code></a> (optional): The new admin address; preserves existing admin if <code>None</code>.</td></tr><tr><td valign="top"><code>mints</code></td><td valign="top"><code>Array&#x3C;(</code><a href="#addresschange"><code>AddressChange</code></a><code>,</code><a href="#publickeybytes"><code>PublicKeyBytes</code></a><code>)></code>: The minter addresses to be added/removed.</td></tr><tr><td valign="top"><code>user_data</code></td><td valign="top"><a href="#userdata"><code>UserData</code></a>: Arbitrary userdata attached to this transaction.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/8Mje8pVm5rHZnjMBivMM" %}

***

## TokenMetadata

Encodes metadata about a custom token.

<table><thead><tr><th width="225.796875" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>update_id</code></td><td valign="top"><a href="#nonce"><code>Nonce</code></a>: The number of management operations applied to some token.</td></tr><tr><td valign="top"><code>admin</code></td><td valign="top"><a href="#publickeybytes"><code>PublicKeyBytes</code></a>: The current token admin.</td></tr><tr><td valign="top"><code>token_name</code></td><td valign="top"><code>string</code>: The name of the token.</td></tr><tr><td valign="top"><code>decimals</code></td><td valign="top"><code>uint8</code>: The number of decimals for this token.</td></tr><tr><td valign="top"><code>total_supply</code></td><td valign="top"><a href="#amount"><code>Amount</code></a>: The total supply for this token.</td></tr><tr><td valign="top"><code>mints</code></td><td valign="top"><code>Array&#x3C;</code><a href="#publickeybytes"><code>PublicKeyBytes</code></a><code>></code>: The authorized minting addresses for this token.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/IEjQjfT7zCEnFGv2uYU1" %}

***

## TokenTransfer

Transfer tokens to another address.

<table><thead><tr><th width="226.44317626953125">Fields</th><th></th></tr></thead><tbody><tr><td><code>token_id</code></td><td><code>Array&#x3C;uint8; length=32></code>: Token ID to transfer.</td></tr><tr><td><code>amount</code></td><td><a href="#amount"><code>Amount</code></a>: Amount to transfer.</td></tr><tr><td><code>user_data</code></td><td><a href="#userdata"><code>UserData</code></a>: Extra data field to associate with this transfer.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/pZrg98aVtuFfVmCnG5h6" %}

***

## TokenTransferOperation

Transfer tokens to another address. This is a variant of [`TokenTransfer`](#tokentransfer) that adds a recipient field.

<table><thead><tr><th width="226.44317626953125">Fields</th><th></th></tr></thead><tbody><tr><td><code>token_id</code></td><td><code>Array&#x3C;uint8; length=32></code>: Token ID to transfer.</td></tr><tr><td><code>recipient</code></td><td><a href="#publickeybytes"><code>PublicKeyBytes</code></a>: Recipient.</td></tr><tr><td><code>amount</code></td><td><a href="#amount"><code>Amount</code></a>: Amount to transfer.</td></tr><tr><td><code>user_data</code></td><td><a href="#userdata"><code>UserData</code></a>: Extra data field to associate with this transfer.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/AkuTyVNmgLGTlWt6NHPR" %}

***

## Transaction

Action that can be submitted and confirmed on the network.

<table><thead><tr><th width="225.69390869140625" valign="top">Fields</th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><code>sender</code></td><td valign="top"><a href="#publickeybytes"><code>PublicKeyBytes</code></a>: Address of sender, and intended signer of this transaction.</td></tr><tr><td valign="top"><code>recipient</code></td><td valign="top"><a href="#address"><code>Address</code></a>: Address of the recipient or the burn address.</td></tr><tr><td valign="top"><code>nonce</code></td><td valign="top"><a href="#nonce"><code>Nonce</code></a>: A sequence number. Transactions sent by the same account are ordered by nonce.</td></tr><tr><td valign="top"><code>timestamp_nanos</code></td><td valign="top"><code>uint128</code>: Nanos since the Unix epoch.</td></tr><tr><td valign="top"><code>claim</code></td><td valign="top"><a href="#claimtype"><code>ClaimType</code></a>: Type-dependent data.</td></tr><tr><td valign="top"><code>archival</code></td><td valign="top"><code>boolean</code>: Specifies whether this transaction should be archived. When an archived transaction is confirmed on a validator, subsequent <code>is_settled</code> requests to that validator must succeed.</td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/XjnbNf7RhuGcHkljHquK" %}

***

## TransactionCertificate

A [`Transaction`](#transaction) along with a quorum of validator signatures.

<table><thead><tr><th width="225.57318115234375">Fields</th><th></th></tr></thead><tbody><tr><td><code>envelope</code></td><td><a href="#transactionenvelope"><code>TransactionEnvelope</code></a></td></tr><tr><td><code>signatures</code></td><td><code>Array&#x3C;(</code><a href="#publickeybytes"><code>PublicKeyBytes</code></a><code>,</code><a href="#signature"><code>Signature</code></a><code>)></code></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/O740Jy4V0SK8pncP608v" %}

***

## TransactionEnvelope

A [`Transaction`](#transaction) along with its sender's signature.

<table><thead><tr><th width="225.750732421875">Fields</th><th></th></tr></thead><tbody><tr><td><code>transaction</code></td><td><a href="#transaction"><code>Transaction</code></a></td></tr><tr><td><code>signature</code></td><td><a href="#signatureormultisig"><code>SignatureOrMultiSig</code></a></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/1tbhLdS2S0hTDzRjQEee" %}

***

## UserData

`Option<Array<uint8; length=32>>`

**JSON Schema:**

{% file src="/files/1aQgTrALAhebiRBvps6v" %}

***

## ValidatedTransaction

A [`Transaction`](#transaction) along with the signature from one validator.

<table><thead><tr><th width="226.17333984375">Fields</th><th></th></tr></thead><tbody><tr><td><code>value</code></td><td><a href="#transactionenvelope"><code>TransactionEnvelope</code></a></td></tr><tr><td><code>validator</code></td><td><a href="#publickeybytes"><code>PublicKeyBytes</code></a></td></tr><tr><td><code>signature</code></td><td><a href="#signature"><code>Signature</code></a></td></tr></tbody></table>

**JSON Schema:**

{% file src="/files/WsFQp6UfWC9ghQSgg6B0" %}

A byte sequence that names an entity on or off the Fast network, depending on the name of type which stores this value.


# RPC Endpoints

## Mainnet

<table><thead><tr><th width="176.296875"></th><th>URL</th></tr></thead><tbody><tr><td>Proxy JSON-RPC</td><td>https://api.fast.xyz/proxy</td></tr></tbody></table>

## Testnet

<table><thead><tr><th width="176.296875"></th><th>URL</th></tr></thead><tbody><tr><td>Proxy JSON-RPC</td><td>https://testnet.api.fast.xyz/proxy</td></tr></tbody></table>


# Applications

This section highlights real-world systems built on the **Fast network**.

Each application demonstrates how Fast's claim-proof and verification model can be applied to enable trust-minimized computation, data validation, and cross-chain interaction.

In this section, you will find information on:

* **Block Verification Explorer:** A Fast application that verifies and records the state of external blockchains, starting with Ethereum.
* **AllSet:** A cross-chain application that provides a universal liquidity layer and enables verifiable, bridge-free asset movement across blockchains.

Use this section to understand how Fast’s technology powers applications that extend beyond the protocol itself, offering developers practical examples of how to build on and integrate with Fast.

<table data-card-size="large" data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/VKGgmzHYf7VXNxtK7v9q">/pages/VKGgmzHYf7VXNxtK7v9q</a></td><td><a href="/files/1CjikgJRUoWjxaoeiirx">/files/1CjikgJRUoWjxaoeiirx</a></td></tr><tr><td><a href="/pages/YDhAljYVDZXtmegtePIj">/pages/YDhAljYVDZXtmegtePIj</a></td><td><a href="/files/ch8OieiGj8Ud5EglRg9q">/files/ch8OieiGj8Ud5EglRg9q</a></td></tr></tbody></table>


# Block Verification Explorer

The Block Verification Explorer is a Fast application that verifies and records the state of external blockchains, starting with Ethereum.

Instead of relying on a single node as the source of truth, the explorer creates cryptographically signed claims for every block and state update. These claims are validated and settled on Fast, producing a permanent, auditable record of blockchain history.

The result is a trust-minimized way to query blockchain data: developers and applications can access a verified view of Ethereum without the costs, risks, or complexity of running a node themselves.

{% hint style="info" %}
For background on the motivation behind this project, see our [blog post.](https://blog.pi2.network/what-is-the-block-verification-explorer/)
{% endhint %}

### Architecture

The Block Verification Explorer is built on top of Fast, with several components working together to mirror and verify a blockchain like Ethereum.

The diagram below shows the full architecture:

<figure><img src="/files/5l9nnlt2l2WpMLuhgvag" alt=""><figcaption><p><strong>Figure 1:</strong> Block Verification Architectural Diagram</p></figcaption></figure>

Below is a quick overview of each part:

* **Client Node EVM**: A standard Ethereum node (such as Geth or Reth) that streams new blocks to the system.
* **Block verification**: The core application that generates witnesses from an Ethereum block, where the computation claim is to be verified, and the state claim is to be settled in Fast.
* **KEVM Verifier**: Independent verifier(s) that replay blocks using stateless validation with KEVM and sign the result that it can attest as being correct.
* **Fast**: The settlement layer where both computational and state update claims are validated, signed, and permanently recorded.
* **Explorer**: The backend and interface that stores claim certificates and makes them available to developers.
* **AllSet**: Consumes settled certificates to enable cross-chain transfers with strong guarantees.
* **dApps**: Applications that query the Explorer to access verified blockchain data.

Together, these components provide a way to maintain a transparent, verifiable copy of a blockchain that can be trusted by developers, applications, and cross-chain systems.

### Claims and verification model

As you’ve seen earlier from Figure 1, at the heart of the Block Verification Explorer are two kinds of claims: computational claims and state claims.

These claims are how the system proves what happened on Ethereum (or any mirrored chain) and keeps the verified copy in sync.

#### Computational claims

These are all about block execution. You can think of them as statements like: “Block 12345 is a valid successor to Block 12344, because all of its transactions execute correctly.”\
\
To make this trustworthy, multiple independent verifiers replay the block using KEVM, which guarantees the execution was correct according to the EVM semantics. Then, each one signs off if it checks out.\
\
A claim only goes through, once enough signatures are collected to meet the quorum. That way, no single verifier can push through a bad block.

#### State update claims

Before the Explorer can start moving the chain forward, it needs to know where to begin. This is done with a state initialization claim, which is a special claim that sets the very first block of the verified chain (usually the genesis block or another chosen checkpoint). The initialization claim is only used once, which is at the very beginning.

From that point on, the system relies on state update claims to move the chain forward. Once a block is proven valid through a settled computational claim, a state update claim is issued to advance the “tip” of the verified chain.

For example: “The verified chain has advanced from Block 12344 to Block 12345.”

Fast only accepts a state update claim if there’s already a computational claim proving that transition is correct. This ensures the recorded chain tip is always consistent with the verified history.

Together, the initialization claim (one-time) and the sequence of state update claims (ongoing) keep the Explorer’s record of the blockchain aligned and auditable from the very first block.

By splitting these into two kinds of claims, the explorer gains flexibility. You can have multiple computational claims floating around (different candidate blocks) before deciding which one actually updates the chain tip. This design is especially useful for chains that don’t finalize instantly, like Solana.

### But, how does all this work?

When a new block is produced on Ethereum, it flows directly from the Client Node EVM into the block verification application, which acts as the coordination hub. The application takes this block and turns it into a computational claim, which is essentially a statement that the block correctly follows from its parent.

{% hint style="info" %}
If at any point, you want to know more about Computational claims, you can refer to sections 4.8 and 4.16 of our [Fast whitepaper](https://pi2.network/papers/fastset).
{% endhint %}

That claim is then sent to a network of independent KEVM Verifiers. Each verifier replays the block using stateless validation. If the block checks out, the verifier signs the claim. Once enough signatures are collected to meet the required quorum, the application submits the claim to Fast for settlement. At this point, Fast validates that quorum rules have been met, records the claim, and produces a settlement certificate that serves as permanent proof that the block was correctly verified.

With the block validated, the application then issues a state update claim. This updates the chain tip in Fast, moving it forward from the previous block to the newly verified one. Fast validates this claim as well, ensuring both correctness and consistency with the settled computational claim. The result is a live, cryptographically guaranteed record of the blockchain’s state as it advances block by block.

These settled certificates are then stored and made queryable by the Explorer, giving developers a transparent way to inspect the chain’s verified history. Other systems, such as OmniSet, can consume these certificates to power secure cross-chain transfers, while dApps can build directly on top of this trusted data.

This loop repeats for every new block, creating a live, cryptographically guaranteed record of Ethereum’s state.

### What can you build on top of this?

The Explorer isn’t just a behind-the-scenes service. It’s meant to be a foundation; something other systems can plug into and immediately trust.

Here are a few ways you can use it:

* **Querying verified history**: You’ll no longer need to spin up a full node or worry about whether the data you’re reading is accurate. With the Explorer, you can fetch proofs of blocks and state directly and know they’ve already been cryptographically verified.
* **Cross-chain transfers with OmniSet**: When moving assets across chains, trust is everything. OmniSet relies on the Explorer’s settled certificates as its source of truth, so transfers can happen without depending on external oracles or unverified nodes.
* **dApp integrations**: For applications whether they be DeFi protocols, analytics dashboards, or even experimental cross-chain services, the Explorer provides a base layer of trustworthy state.
* **General-purpose verification layer**: Looking ahead, the Explorer could also serve as a verification layer for blockchains themselves. By replacing the need for long optimistic proof windows or complex zk-proof systems, it can help chains reach global finality in less than 100 ms while maintaining the same level of security.

### Next steps

If all of this sounds exciting, the best way to understand it, is to see it in action. Head over to the [Block Verification Explorer interface](https://ethereum-verification.fastset.xyz/) and watch Ethereum being verified in real time.

Curious about how to use the interface? You can check out our [user guide](https://docs.pi2.network/fastset-dev/block-verification-explorer/block-verification-usage-guide), where we’ll walk you through what each part of it does and how you can make the most of it.


# AllSet and AllSwap

A unified layer for cross-chain liquidity and verifiable swaps

AllSet and AllSwap are two core applications built on FastSet that make cross-chain interactions simple and verifiable.

AllSet acts as a universal liquidity layer that lets users deposit, withdraw, or revoke assets across chains, all backed by FastSet’s claim-proof system. AllSwap on the other hand builds on AllSet to enable seamless cross-chain swaps, discovering the best rates and settling them instantly through verifiable proofs instead of bridges.

{% hint style="success" %}

#### Want to get your hands dirty?

If you want to skip all the architectural bits & pieces, head over to the [AllSet usage docs](https://docs.pi2.network/user-guides/omniset-and-omniswap/omniset-usage-guide), where we outline instructions to get you started!
{% endhint %}

### AllSet

As earlier stated, AllSet is a universal liquidity and settlement layer built on top of [FastSet](https://docs.pi2.network/fastset/overview). It allows users to deposit assets on one chain and withdraw them on another without using traditional bridges. It connects fragmented liquidity across blockchains into a single verifiable layer, ensuring value can move freely while keeping the same security guarantees of traditional bridges: transaction integrity and immutability, decentralization, and robust validation.

<figure><img src="/files/i44NXsCqFi5zStfWA0wJ" alt=""><figcaption><p><strong>Figure 1:</strong> AllSet high-level architecture</p></figcaption></figure>

The diagram above shows how AllSet links two blockchains, say, Chain X and Chain Y, through FastSet bridge contracts.

To understand the diagram above, you need to know the following legends:

* xAsset is a representation of an Asset on Chain X
* yAsset is a representation of an Asset on Chain Y
* setAsset is a wrapped representation of an Asset on FastSet

Now, when a user deposits tokens on one chain (for example, 10 xAsset on Chain X), AllSet detects that deposit and mints an equivalent amount of the wrapped version (setAsset), in the user’s FastSet account.

Later, if the user chooses to withdraw, AllSet relays the withdraw intent to the FastSet bridge contract on the destination chain (say, Chain Y), which releases 10 yAsset to the user’s wallet.

This flow ensures that every deposit and withdrawal is fully backed and that total liquidity across all connected chains remains balanced.

Each cross-chain action happens through verifiable claims and proofs instead of traditional cross-chain consensus. In this setup, verifiers and relayers play a key role by monitoring deposits and withdrawals, verifying proofs, and confirming that every transaction is backed by real assets.

### AllSwap

AllSwap, on the other hand, builds on top of AllSet’s liquidity layer to enable seamless cross chain swaps. It aggregates decentralized exchanges (DEXs) across networks, identifies the best available rates, and executes swaps instantly, powered by FastSet’s verifiable claim system.

<figure><img src="/files/Hm6JYlxgiwcxJqUQiVtK" alt=""><figcaption><p><strong>Figure 2:</strong> AllSwap architecture or workflow</p></figcaption></figure>

This diagram shows how AllSwap interacts with AllSet. It begins by retrieving the best DEX rates and forming a swap intent on the source chain. That intent is then relayed through AllSet, where FastSet verifiers confirm the claim and proof. Once validated, AllSwap mints or burns the appropriate assets on the destination chain to complete the swap.

Together, AllSet and AllSwap make it possible to move and trade assets across chains with the same security and speed that FastSet provides.

### How does AllSet work?

AllSet operates through three core workflows: deposit, revoke, and withdraw. Each workflow contributes to maintaining liquidity accuracy, proof validity, and balanced asset distribution across chains.

#### Deposit

As earlier explained, the deposit workflow begins when a user sends assets to a FastSet Bridge Contract on the source chain (for example, 10 xAsset on Chain X). AllSet monitors this deposit event and mints an equivalent amount of the wrapped version (setAsset) in the user’s FastSet account.

<figure><img src="/files/7qPO9CNQcrsfjLqFyLFs" alt=""><figcaption><p>Figure 3: AllSet deposit workflow</p></figcaption></figure>

From the diagram above, you’ll notice how the flow moves upward:

1. The user deposits from their wallet to the bridge contract.
2. AllSet detects the deposit, generates the proof, and relays it to the FastSet network.
3. FastSet mints the same amount of setAsset for the user.

This structure ensures that every deposit is traceable and fully backed by on-chain assets, maintaining total liquidity across the network.

#### Withdraw

When a user wants to move assets from FastSet back to another chain, AllSet uses the Withdraw workflow.

The user initiates a withdraw intent to AllSet, specifying the amount of setAsset to be withdrawn. AllSet then relays this intent to the FastSet Bridge Contract on the target chain (for example, Chain Y). Once the intent is verified, the bridge contract releases the corresponding yAsset to the user’s wallet.

<figure><img src="/files/Ff8JVfIgcoV6j2vdmzsT" alt=""><figcaption><p><strong>Figure 4:</strong> AllSet withdraw workflow</p></figcaption></figure>

The flow goes like this:

1. The user initiates a withdraw intent for their setAsset balance.
2. AllSet relays the message to the target chain’s bridge contract.
3. The bridge contract verifies the transaction and executes the transfer, releasing yAsset to the user's wallet.
4. Once the yAsset is released to the user's wallet, a corresponding proof will be generated to burn the setAsset on Fastset.

This workflow ensures that every withdrawal is fully backed by existing setAsset on FastSet, keeping cross-chain balances consistent and verifiable.

#### Revoke

Sometimes, users may want to reverse a withdraw that hasn’t yet been claimed or fully processed. The Revoke workflow handles that.

Here, AllSet creates a revoke intent and passes it to the FastSet bridge. The system then verifies that the previous withdraw event is still valid and unclaimed, and once confirmed, the user’s original tokens are released back to their wallet.

<figure><img src="/files/FL6SK8zbe29G5XK5EOLP" alt=""><figcaption><p><strong>Figure 5:</strong> AllSet revoke workflow</p></figcaption></figure>

In the diagram:

1. The user initiates a revoke intent for their previous (failed) transfer intent.
2. AllSet relays the message to the target chain’s bridge contract.
3. The bridge contract verifies the transaction and revokes the previous transfer intent.
4. Once the revoke event has been triggered, a corresponding proof will be generated to transfer the setAsset back to the user account on FastSet.

The revoke path prevents liquidity from staying locked when a withdraw is unused.

By separating deposit, revoke, and withdrawal into independent, verifiable actions, AllSet provides a robust structure for liquidity flow while maintaining full transparency through FastSet’s claim-proof system.

### Key features and capabilities

The following are some features of AllSet/AllSwap:

* **Cross-chain liquidity**: Move assets between blockchains without bridges.
* **Verifiable settlements**: Every transaction, whether a deposit, revoke, or withdraw, is validated through FastSet proofs.
* **Unified liquidity layer**: AllSet pools liquidity across chains, providing a foundation for applications like AllSwap.
* **High performance:** FastSet’s parallel claim validation makes AllSet scalable even at high transaction volumes.
* **Developer-friendly**: Exposes simple deposit and withdrawal interfaces for integration into wallets, DEXs, and DeFi platforms.

{% hint style="info" %}

#### What’s next?

Now that you’ve seen how AllSet works under the hood, head over to the [AllSet usage docs](https://docs.pi2.network/user-guides/omniset-and-omniswap/omniset-usage-guide) to explore it in action!
{% endhint %}


# FAQ

### What is (not) Fast?

<details>

<summary>Is Fast a blockchain?</summary>

No. Fast is an infrastructure for other blockchains to integrate with. While it is a decentralized network for transaction settlement, Fast doesn’t settle the transactions in ordered blocks via a consensus algorithm, like blockchains do. In Fast, transactions are seen as elements in a set and are processed individually by nodes in the order they are received. We do enforce the same order on transactions initiated from the same account. You can read more [here](http://blog.pi2.network/fastset-to-blockchain-or-not/).

</details>

<details>

<summary>Is Fast a Layer 0 (L0)?</summary>

Yes, to some extent. Fast is designed as an infrastructure for various blockchains to integrate with, offering customizable verifiability. This gives Web3 a scalable, verifiable, interoperable, and decentralized foundation for blockchains.

However, Fast is more than L0. Fast also natively supports asset creation, transfers, and operations, so DeFi apps can thrive on it. With multi-language programmability coming soon, any apps—not just DeFi—can be built on Fast, all while bridging different blockchains. Essentially, Fast is not just Layer 0, 1, or 2. Fast is The Layer.

</details>

<details>

<summary>Is Fast a Layer 2 (L2)?</summary>

No. L2s are responsible for sequencing, i.e., ordering transactions, and computing and proving the next state. The sequencer collects, orders, and batches user transactions. The batch is then executed, resulting in an updated state, which is then settled on an L1.

Fast does not order, nor batches the transactions. Instead, transactions are processed by nodes individually and in the order they are received. Each node updates its state individually and as such, Fast guarantees strong eventual consistency, rather than strong consistency. Transactions are settled on Fast, there is no need for an L1.

</details>

<details>

<summary>Is Fast a Distributed Ledger Technology (DLT)?</summary>

Yes, with some add-ons. DLT is defined as a system where data is replicated, shared, and synchronized across geographically distributed nodes (ideally) via a consensus mechanism that maintains data validity. Blockchain is just one well-known example under this umbrella.

Unlike blockchains, Fast doesn’t settle transactions through blocks (which require total ordering). Instead, it treats transactions as elements in a set (no total ordering needed), allowing parallel settlement that scales with more nodes for lightning-fast transactions.

Fast supports customized verifiers in the network to handle specific claim types. So yes, Fast is a blazing-fast DLT, with built-in customizable verifiability.

</details>

<details>

<summary>Is Fast a payment infrastructure?</summary>

Yes. However, Fast is more than that. Fast is built to handle any type of transactions, from asset operations to zero-knowledge proofs, mathematical claims, and beyond, all treated as the core data it maintains.

Due to lightning-fast speeds of parallel settlement, Fast is ideal for payments, swiftly moving assets from one party to another. But it can do so much more, unleashing possibilities far beyond just payments.

</details>

### Terminology

<details>

<summary>What are local and global finality?</summary>

Finality refers to network latency, from the perspective of a single transaction. Local finality refers to the time it takes a validator to validate a claim, while global finality denotes the time it takes a validator to settle a claim. It collects all the claim signatures after local finality, aggregates them into one aggregated signature—the validation certificate for the claim, sends the certificate back to all validators, and settles the claim by applying its effect (e.g., updating the balances). One important aspect to mention is that while global finality is as final as it can be, meaning that the state of the validator is changed irreversibly, for local finality, there is no state change yet.

</details>

<details>

<summary>What is TPS and how is it computed?</summary>

TPS stands for Transactions per Second. In Fast, it refers to the number of claims per second that can be effectively settled. Or the number of claims reaching global finality in one second. You can find out more [here](https://blog.pi2.network/what-does-tps-actually-mean-for-fastset/)

</details>

<details>

<summary>What are verifiers/validators?</summary>

Verifiers are clients on the network, whose role is to provide specialized verification services of more complex claims. They are responsible for verifying the truthfulness of the claim.

Validators are the nodes of the network responsible for claim validation after the quorum of verifiers has been met and for actual settlement of the claims.

</details>

<details>

<summary>What are proxy services?</summary>

Proxies are facilitators of the interaction between clients, verifiers and validators. They broadcast messages signed by the participants and blindly aggregate signatures.

</details>

<details>

<summary>Are claims the same as payment transactions?</summary>

Yes and no. Payment transactions are a type of claims, but claims can be more than that. They can be asset transfers, mathematical proofs, zero-knowledge proofs, TEE attestations, etc. Any verifiable statement you can think of can be a claim.

</details>

<details>

<summary>What is weak independence?</summary>

Weak independence is a property we require the claims to satisfy in order to be settled on Fast. Basically, weak independence allows us to ditch global ordering of claims and still provide the same guarantees as traditional blockchains. You can read more about it [here](/fast-archived/core-concepts/weak-independence).

</details>

<details>

<summary>How can you not have global ordering and still defend against double spending?</summary>

In Fast, we enforce same order transaction processing for transactions originating from the same account. Transactions carry a nonce, specifying the issuance number and transactions originating from the same account are processed in increasing order of the nonce. For example, claim *c*<sub>*1*</sub> has nonce 1, claim *c*<sub>*2*</sub> nonce 2, etc.

</details>


# Overview

AllSet is an application for light-speed asset movement across any chain. It acts as a universal liquidity layer that lets users deposit, withdraw, or revoke assets across chains, with all interactions verifiable due to AllSet being built on [Fast](broken://pages/J26hp8766EpgiVNGw7bO).

AllSet powers AllSwap, an application which enables cross-chain swaps, discovering the best rates and settling them instantly through verifiable proofs instead of bridges.

## Key features and capabilities

The following are some features of AllSet/AllSwap:

* **Cross-chain liquidity**: Move assets between blockchains without bridges.
* **Verifiable settlements**: Every transaction, whether a deposit, revoke, or withdraw, is validated through Fast proofs.
* **Unified liquidity layer**: AllSet pools liquidity across chains, providing a foundation for applications like AllSwap.
* **High performance:** Fast’s parallel claim validation makes AllSet scalable even at high transaction volumes.
* **Developer-friendly**: Exposes simple deposit and withdrawal interfaces for integration into wallets, DEXs, and DeFi platforms.

## What's next?

* [**Architecture**](/allset-archived/architecture) → Get a detailed overview of AllSet's architecture.
* [**Developers**](/allset-archived/developers) → Dive deep into the inner-workings of our implementation of Fast and get accustomed with our APIs.
* [**Applications**](/allset-archived/applications) → Learn about applications built on AllSet, such as AllSwap.
* [**FAQ**](/allset-archived/faq) → Check out the most frequently asked questions.


# Architecture

AllSet is a universal liquidity and settlement layer which allows users to deposit assets from one chain into another without using traditional bridges.

Being built on top of [Fast](broken://pages/J26hp8766EpgiVNGw7bO), it connects fragmented liquidity across blockchains into a single verifiable layer, ensuring value can move freely while keeping the same security guarantees of traditional bridges: transaction integrity and immutability, decentralization, and robust validation.

Read this section to learn about the inner-workings of AllSet and how we achieve the same guarantees *sans* bridges. If you're more interested in a dynamic interaction with AllSet, head to the [AllSet Portal](https://omniset.fastset.xyz/).

## AllSet protocol

AllSet allows you to send assets across chains by depositing them on Fast and withdrawing them at a later time.

When transferring assets between chains with AllSet, the workflow is straightforward. The sender connects their wallet to AllSet, selects the desired asset from their source chain, and specifies the token amount to send. AllSet and Fast interact to perform this operation securely, while settling any resulting transactions on Fast as well. Finally, the recipient receives an identical quantity of the same asset on their own target chain. The diagram in Figure 1 below depicts this flow.

<figure><img src="/files/Ajp80P0EKxHvASH8m4am" alt=""><figcaption><p><strong>Figure 1:</strong> AllSet high-level architecture.</p></figcaption></figure>

Note that sending assets across chains with AllSet requires two flows **deposit** and **withdraw**. Deposit because the assets[^1] are going to be minted on Fast, and withdraw as the assets[^2] will be withdrawn from Fast to the target chain.

We will discuss each flow separately.

### Deposit

<figure><img src="/files/fvAKf8xORJpp3C0A5uoi" alt=""><figcaption><p><strong>Figure 2:</strong> AllSet deposit workflow.</p></figcaption></figure>

{% stepper %}
{% step %}

#### Send «Deposit transaction»

At the start of the asset movement, a **deposit** flow is initiated by the sender by issuing a deposit transaction. For example, `deposit(xAsset, amt, sender)`, which means sending to the sender's Fast account `amt` xAsset tokens, where xAsset is the representation of Asset on chain X.
{% endstep %}

{% step %}

#### Monitor «Deposit event»

AllSet Claim-Proof Generator, which constantly monitors Fast Contract X, detects the deposit event. Fast Contract X is a Fast contract responsible for receiving the deposit transactions from chain X to AllSet.
{% endstep %}

{% step %}

#### Send claim & proof «Deposit event»

Upon detecting the deposit, AllSet's Claim-Proof Generator creates two claims for the deposit:

**i.** The deposit event is logged in some block hash.

**ii.** The block hash resides on the canonical chain X.

and a proof for each of them and sends all to a pool of AllSet verifiers.
{% endstep %}

{% step %}

#### Send signed mintClaim

Upon successful verification of the claims, the AllSet verifiers send to the Fast network a mint claim and a quorum of signatures for it. The mint claim specifies that an equivalent amount `amt` of the Asset's AllSet's wrapped version (omniAsset) should be minted to the sender's Fast account.

The deposit flow ends with Fast settling the claim and updating the balance of the sender with `amt` omniAsset.
{% endstep %}
{% endstepper %}

### Withdraw

<figure><img src="/files/RGZSs03WBhznBuIl06y5" alt=""><figcaption><p><strong>Figure 3:</strong> AllSet withdraw workflow.</p></figcaption></figure>

{% stepper %}
{% step %}

#### Send transferClaim and withdrawIntentClaim

Once the mint claim is settled on Fast and the sender chooses to withdraw, two claims are sent from the AllSet front-end to the Fast network:

**i.** A transferClaim specifying that `amt` yAsset tokens have to be transferred from the sender's account to the target chain account (Chain Y Bridge Account).

**ii.** A withdrawIntentClaim specifying the withdraw intent of the same amount `amt` yAsset tokens.

And this begins the **withdraw** workflow.
{% endstep %}

{% step %}

#### Receive transferClaim and withdrawIntentClaim

AllSet, through its Relayer component, gets notified about the two claims: transferClaim and withdrawIntentClaim.
{% endstep %}

{% step %}

#### Relay «Withdraw intent»

Next, AllSet Relayer forwards the withdraw intent to Fast Contract Y, a contract responsible for the withdrawal transaction to the receiver's wallet.
{% endstep %}

{% step %}

#### Send «Withdraw transaction»

Once the intent is verified, Fast Contract Y releases the corresponding yAsset to the recipient’s wallet. The withdraw flow of amount `amt` of yAsset tokens to address `receiver` on chain Y is performed.

Similarly to xAsset, yAsset denotes the representation of Asset on chain Y.
{% endstep %}

{% step %}

#### Monitor «Withdraw event»

As soon as the yAsset tokens are released to the recipient's wallet, AllSet's Proof-Claim Generator, constantly monitoring Fast Contract Y, detects the withdraw event.
{% endstep %}

{% step %}

#### Send claim & proof «Burn event»

The AllSet Proof-Claim Generator will then submit to the pool of AllSet verifiers two claims:

**i.** The withdraw event is logged in some block hash.

**ii.** The block hash is in the canonical chain Y.

and a proof for each of them and sends all to a pool of AllSet verifiers.
{% endstep %}

{% step %}

#### Send signed burnClaim

Upon successful verification of the claims, the AllSet verifiers send to the Fast network a burn claim and a quorum of signatures for it. The burn claim specifies that an equivalent amount `amt` of the Asset's AllSet's wrapped version (omniAsset) should be burned from the Chain Y Bridge Account.
{% endstep %}
{% endstepper %}

## Revoke

Typically, AllSet operates through two core workflows—deposit and withdraw—we have seen above. However, there are cases when you may want to cancel a *withdraw* that hasn't been fully processed. These situations are handled through the **revoke** workflow.

<figure><img src="/files/utCmjRF95ZiXIWR926J0" alt=""><figcaption><p><strong>Figure 4:</strong> AllSet revoke workflow.</p></figcaption></figure>

{% stepper %}
{% step %}

#### Send revokeClaim

Once the sender chooses to revoke a withdraw, a claim is sent from the AllSet front-end to the Fast network: a revokeClaim to cancel a previously initiated withdraw.
{% endstep %}

{% step %}

#### Receive revokeClaim

AllSet, through its Relayer component, gets notified about the revokeClaim.
{% endstep %}

{% step %}

#### Relay «Revoke intent»

Next, AllSet Relayer forwards the revoke intent, together with the previous transferClaim (received at Step W<sub>2</sub> during withdrawal) to Fast Contract Y.
{% endstep %}

{% step %}

#### Send «Revoke transaction»

Fast Contract Y verifies whether the transferClaim has been used before or not for withdrawal. If not, then it revokes it.
{% endstep %}

{% step %}

#### Monitor «Revoke event»

As soon as the revoke transaction has been sent, AllSet's Proof-Claim Generator, constantly monitoring Fast Contract Y, detects the revoke event.
{% endstep %}

{% step %}

#### Submit claim & proof «Revoke event»

The AllSet Proof-Claim Generator will then submit to the pool of AllSet verifiers two claims:

**i.** The revoke event is logged in some block hash.

**ii.** The block hash is in the canonical chain Y.

and a proof for each of them and sends all to a pool of AllSet verifiers.
{% endstep %}

{% step %}

#### Send signed transferClaim

Upon successful verification of the claims, the AllSet verifiers send to the Fast network a transfer claim and a quorum of signatures for it. Finally, the asset transfer from the Chain Y Bridge Account to the sender's account is performed.
{% endstep %}
{% endstepper %}

## Conclusion

The AllSet workflow ensures that every deposit and withdrawal is fully backed and that total liquidity across all connected chains remains balanced.

Each cross-chain action happens through verifiable claims and proofs instead of traditional cross-chain consensus. In this setup, AllSet verifiers and relayer play a key role by monitoring deposits and withdrawals, verifying proofs, and confirming that every transaction is backed by real assets.

By separating deposit, revoke, and withdrawal into independent, verifiable actions, AllSet provides a robust structure for liquidity flow while maintaining full transparency through Fast's claim-proof system.

[^1]: Actually, an AllSet representation of the asset is going to be minted.

[^2]: Actually, an AllSet representation of the asset is going to be burn.


# Developers

Coming soon. Stay tuned.


# Applications

In this section we introduce applications built on top of AllSet.

[**AllSwap**](/allset-archived/applications/allswap) builds on AllSet to enable seamless cross chain swaps. It aggregates decentralized exchanges (DEXs) across networks, identifies the best available rates, and executes swaps instantly, leveraging Fast's verifiable claim system.


# AllSwap

AllSwap builds on top of AllSet's liquidity layer to enable seamless cross chain swaps. It aggregates decentralized exchanges (DEXs) across networks, identifies the best available rates, and executes swaps instantly, powered by Fast's verifiable claim system.

<figure><img src="/files/uG9F9IFCkf4H2yh2ud9Z" alt=""><figcaption><p><strong>Figure 1:</strong> AllSwap high-level architecture.</p></figcaption></figure>

This diagram shows how AllSwap benefits from the interactions with AllSet and Fast to provide secure and verifiable swaps. It begins by retrieving and ranking the best DEX rates and forming a swap intent on the source chain. That intent is then relayed through AllSwap, where AllSet verifiers confirm the claim and proof. Once validated by Fast, AllSwap mints/burns the appropriate assets on the destination chain to complete the swap.

## AllSwap protocol

AllSwap makes it possible to move and trade assets across chains with the same security and speed that Fast provides.

<figure><img src="/files/OR13X1qORjZci76n8Q0T" alt=""><figcaption><p><strong>Figure 2:</strong> AllSwap workflow.</p></figcaption></figure>

AllSwap's workflow can be split into three categories: 1) retrieve and rank, 2) swap, and 3) withdrawal and deposit.

### Retrieve and Rank

{% stepper %}
{% step %}

#### Retrieve

AllSwap retrieves the best DEX rates accross all chains.
{% endstep %}

{% step %}

#### Rank

AllSwap ranks the best DEX rates for the user to choose.
{% endstep %}
{% endstepper %}

### Swap

{% stepper %}
{% step %}

#### Send transferClaim and swapIntentClaim

Once the user chooses the desired decentralized exchange, say DEX Y, two claims are sent to the Fast network:

**i.** A transferClaim specifying that `amt1` xAsset tokens have to be transferred from the sender's account to the target chain account (Chain Y Bridge Account).

**ii.** A swapIntentClaim specifying the swap intent of the same amount `amt1` xAsset tokens.

And this begins the **swap** workflow.
{% endstep %}

{% step %}

#### Receive transferClaim and swapIntentClaim

AllSet, through its Relayer component, gets notified about the two claims: transferClaim and swapIntentClaim.
{% endstep %}

{% step %}

#### Relay «Swap intent»

Next, AllSet Relayer forwards the withdraw intent to Fast Contract Y, a contract responsible for the swap transaction on the DEX Y.
{% endstep %}

{% step %}

#### Send «Swap transaction»

Once the intent is verified, Fast Contract Y initiates a swap transaction. `amt1` yAsset1 to be exchanged for `amt2` yAsset2.\
\
The swap transaction comprises of the following:

* Withdrawal from the Fast Contract Y, for the swap transaction to be taken place at DEX Y. Hence, this triggers the arrows as represented by W<sub>5</sub>-W<sub>7</sub>.
* Deposit back to the Fast Contract Y, indicating that it is meant to be deposited back to the Sender Account on Fast. Hence, this triggers the arrows as represented by D<sub>2</sub>-D<sub>4</sub>.

Recall that *y*Asset denotes the representation of Asset on chain Y.
{% endstep %}
{% endstepper %}

Observe that steps S<sub>1</sub>-S<sub>4</sub> are similar to Steps W<sub>1</sub>-W<sub>4</sub> in [AllSet's withdraw workflow](/allset-archived/architecture#withdraw), with the difference that the intent claim and transaction in last step are now about swapping and not just withdrawing.

### Withdrawal and Deposit

The swap transaction triggers a withdraw flow for `amt1` xAsset and a deposit flow for `amt2` yAsset. Steps W<sub>5</sub>-W<sub>7</sub> and D<sub>2</sub>-D<sub>4</sub> correspond to the homonym steps in AllSet's [withdraw](/allset-archived/architecture#withdraw), respectively [deposit](/allset-archived/architecture#deposit) workflow.


# FAQ

<details>

<summary>What is AllSet?</summary>

AllSet is an application for light-speed asset movement across any chain. It acts as a universal liquidity layer that lets users deposit, withdraw and swap assets across chains, with all interactions verifiable due to AllSet being built on [Fast](broken://pages/J26hp8766EpgiVNGw7bO).

</details>

<details>

<summary>How does AllSet compare to traditional bridges?</summary>

Traditional bridging in Web3 usually involves locking and minting through centralized entities such as Circle, etc. Using these entities it can take up to **several minutes** for a single asset to be bridged from one chain (L1/L2) to another.

AllSet acts as a universal liquidity layer, with liquidity pools on all chains (L1/L2) it is connected to. Deposit and withdrawal are done at **light-speed** and verifiably due to the infrastructure provided by [Fast](broken://pages/J26hp8766EpgiVNGw7bO).

</details>

<details>

<summary>How do AllSet and Fast interact?</summary>

AllSet uses Fast as a universal liquidity ledger.

AllSet monitors chain activities and generates the appropriate claims and proofs for asset representations to be minted, burnt, or moved. However, these operations happen on Fast.

Finally, AllSet relays from Fast to chains the intents for execution, such as withdrawing or swapping assets, and verification.

</details>

<details>

<summary>Can AllSet use another L1/L2 instead of Fast as a universal liquidity ledger?</summary>

Yes. The idea behind AllSet is general and it is not strictly tied to Fast.

However, the advantage of using Fast as the universal liquidity ledger is that deposit from/withdraw to different chains can be processed in parallel to increase the overall throughput. Moreover, when assets are "bridged" to Fast, they are performed at light-speed.

As such, Fast is the ideal solution for AllSet to connect and provide interoperability between chains.

</details>

<details>

<summary>What wallets do you currently support?</summary>

To access assets on Fast, please use the [Fast Wallet extension](https://chromewebstore.google.com/detail/fastset-wallet/ghibjknldlhfffnckpencpcjbhefblbe?pli=1).

To access assets on any chains connected to AllSet, EVM compatible wallet applications such as MetaMask, Phantom, etc., are supported.

</details>


# Overview

*If you’ve been around Pi*<sup>*2*</sup>*&#x20;Labs for a while, you must have heard us talking about the K framework. It lies at the heart of our firm belief and persistent pursue of correctness: correctness of programs and programming tools. In this guide, we break it down for you.*

K is a language framework. It allows people to write formal definitions of programming languages and automatically derive language tools from them. This is illustrated below.

<figure><img src="/files/iTSQzINgWR1hHUu6YYOY" alt="The central vision of the K framework"><figcaption><p><em><strong>Figure 1</strong></em>: <em>The central vision of the K framework.</em></p></figcaption></figure>

The bubble in the center represents the formal definition of a programming language. The smaller outer bubbles it points to represent the tools K produces from this definition, e.g., parser, interpreter, or symbolic deductive verifier.

Any programming language can be given a formal definition, including the opcodes of a virtual machine (VM) or the operations of an instruction set architecture (ISA). The formal language definition, sometimes also referred to as a **formal semantics** of the language, is a complete and rigorous mathematical definition of the behaviors of all programs of that language.

Therefore, in theory, once we have the formal semantics of a language, we have everything we need to implement execution tools for that language. Here we mean not only basic tools such as parser, interpreter, or compiler, but also advanced tools such as deductive program verifier or model checker.

While it is theoretically possible to derive these tools for any programming language from its formal semantics, K makes it a reality. Efforts of over two decades led to a scalable framework helping developers to define a language formally and extract a full set of tools automatically.

K has been successfully applied to formalize several real-world programming languages, including [C](https://pi2.network/papers/defining-undefinedness-of-c), [Java](https://pi2.network/papers/k-java), [JavaScript](https://pi2.network/papers/kjs), [Python](https://pi2.network/papers/python-semantics), [Rust](https://github.com/runtimeverification/mir-semantics), [x86-64,](https://pi2.network/papers/formal-semantics-x86-64) [the Ethereum Virtual Machine (EVM)](https://pi2.network/papers/kevm), and [LLVM IR](https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2020.7), making it suitable for both research and commercial applications.

At Pi<sup>2</sup> Labs, we use K at two different levels:

* **Correct-by-Construction Computing (K as a Prover)**: We use K to execute programs directly based on the formal semantics of the programming language, reducing the need for manually implementing any language-specific interpreters or compilers and thus avoiding their bugs.

  Program execution is correct by construction, meaning that the execution results obtaining from K is automatically correct modulo the correctness of K itself and the formal semantics of the language.
* **Verifiable Computing (K as a Proof Searcher)**: We use K as an intermediate step to generate machine-checkable mathematical and zero-knowledge proofs (ZKPs) of program execution, directly based on the formal semantics of the programming language, which further eliminates K from the trust base.


# Formal Semantics

The formal semantics of a programming language is a precise, rigorous, and unambiguous mathematical definition of the behaviors of all programs in that language. Every possible action a program can take—state change, computation, or output—is fully and completely described in terms of mathematical axioms, leaving no room for misinterpretation or ambiguity.

{% hint style="info" %}
**Any language, be it natural or programming, has two key aspects:**

* **Syntax** that defines the legitimate structures of the language
* **Semantics** that defines the meaning of the above legitimate structures
  {% endhint %}

You probably encountered the concepts of syntax and semantics before when you studied natural language in grade school. You learned syntax as grammar and semantics as reading. Programming languages are no different. Syntax defines what constitutes a [well-formed](https://en.wikipedia.org/wiki/Well-formed) program, while semantics describes what that program does when executed.

## Defining Formal Semantics

Even though languages are different, oftentimes, they are able to express the same ideas. So, why do we need the K framework? Aren’t all languages essentially the same?

{% hint style="info" %}
**The short answer:** **Not exactly**.
{% endhint %}

The reality is that it’s sometimes easier to say a thing in one language, than in the other. For instance, let’s say you have two sentences in different languages, but with the same meaning:

* “It's raining heavily outside” (English) - 8 syllables
* “下大雨" (Xià dàyǔ)” (Chinese) - 3 syllables

Now, programming languages work similarly—but with one key difference. While human language semantics are typically static (a word or sentence describes a fixed snapshot in time), programming language semantics describe dynamic processes (a program executes and changes state over time).

* Human language semantics: "The cat is on the mat." (Describes a state)
* Programming language semantics: `x = x + 1` (Describes a process)

When this statement `x = x + 1` is executed, the current value stored in variable `x` is retrieved, `1` is added to it, and the result is then stored back into `x`, updating its value.

It's important to recognize that while we often use human language to explain what a piece of code does (as we did above for `x = x + 1`), this is still a description.

Entire books, sometimes thousands of pages long, are written in English (or other natural languages) to describe the syntax and semantics of a programming language. These are called the “specifications” of a language.

The crucial difference with the K framework is that it moves beyond these natural language descriptions. Instead of relying on potentially ambiguous human language, K uses a formal, mathematical approach to define the semantics of a programming language.

This means that the behavior of every construct, like the assignment `x = x + 1`, is defined through mathematical axioms and rules, leaving no room for ambiguity.

## Embracing Formal Semantics

We are firm believers in correctness and thus in formal semantics. Programming language must have formal semantics. Period.

Why?

Because without a formal semantics, by definition, programs have no meaning that is precise, rigorous, and unambiguous. In that sense, we don't even know what the program is supposed to do, not to mention whether it is correct.

If you really care about correctness, embrace formal semantics. They are your friends, and not enemies. As John Reynolds famously put it,

> Semanticists should be obstetricians, not coroners of programming languages.


# LLVM-K Backend

In this guide, we explain how the LLVM-K backend works and how it powers fast and correct-by-construction semantics-based program execution.

## Language Definitions in K

A formal definition of a programming language in K consists of three main components:

1. **Concrete syntax**: A conventional BNF grammar that defines the structure of well-formed programs.
2. **Configurations**: A data structure that holds all the code and the semantic information during the runtime of a program.
3. **Operational semantics**: A set of rewrite rules that define the transition over configurations.

K uses rewrite rules to specify how a program executes. A rewrite rule specifies how a configuration is matched and then transforms into another one. Program execution is nothing but a sequence of continuous and consecutive transitions over configurations. A tool that takes any configuration and rewrites it into a successor configuration following the set of rewrite rules for the language, is an **interpreter** of the language.

LLVM-K can automatically generates an interpreter for a programming language based on its formal semantics and rewrite rules.

## LLVM-K Overview

LLVM-K is a meta-level tool that automatically generates an interpreter of a programming language based on its formal semantics and rewrite rules. The generated interpreter is represented in LLVM IR and further compiled into efficient native code, bringing us promising performance.

LLVM-K is made up of several components that work together to optimize execution:

1. **KORE AST data structures**: Represent KORE syntax in memory.
2. **Decision tree generator**: Converts KORE rules into structured decision trees for efficient pattern matching.
3. **Code generator**: Translates decision trees into compiled code that applies rewrite rules.
4. **Runtime terms**: Data structures that represent the program’s state during execution.
5. **Runtime library**: Provides performance-focused utilities implemented in C/C++ and LLVM IR.
6. **Memory management and garbage collector**: Handles term allocation and deallocation during execution.

## LLVM-K Internals

LLVM-K operates not on raw K definitions, but on an intermediate representation thereof—KORE, which it compiles into native interpreter binaries that execute rewrite rules efficiently.

A rewrite rule consists of a pattern (left-hand side) and a transformation (right-hand side). When a program runs, LLVM-K needs to determine which rule should be applied next. Instead of searching through thousands of possibilities, it builds decision trees to make this process more efficient.

LLVM-K matches the rule’s pattern against the current state of execution and then applies its corresponding transformation to update the program state. This repeats until no more rules apply, meaning execution has reached a final state.

K provides a way to formally define languages, ensuring correctness. But correctness alone isn’t enough—execution must be fast. LLVM-K bridges the gap, making K-based execution not just correct but also performant. This is crucial for our vision of verifiable, efficient computation.

## Semantics-Based Compilation

LLVM-K is essentially an interpreter generator. It takes a programming language `PL` and generates an interpreter, denoted `K[PL]`. This interpreter works as a function that takes a program `P` and input `in`, and returns output `out`. Formally, we can write this as `K[PL](P, in) = out`.

**Semantics-based compilation** (**SBC**) is the process of partially and symbolically executing `P` as much as it can, resulting in a set of new rewrite rules that summarize the effects of each and every **basic blocks** of `P`. These new rewrite rules generated from the SBD process form a new SBC semantics, denoted `P/PL`, which operates on the same configurations as the original semantics `PL` with the property that

```
K[PL](P, in) = out = K[P/PL](in)
```

However, the new SBC semantics `P/PL` is much more efficient than the original semantics `PL` because one step of `P/PL` corresponds to an entire basic block of `P` in language `PL`.

For example, if `P` is a simple list of sequential statements that has no loops or external function calls, then its SBC semantics `P/PL` will include one and only one rewrite rule that goes from the beginning of `P` all the way to the end of `P`, summarizing the entire program into a step.

Therefore, SBC is a semantics-level optimization. The SBC semantics of a program is a semantics specialized for the said program.

SBC, or semantics-based compilation, gets its name because a compiler is, mathematically speaking, a partial evaluation of an interpreter. SBC enables K to benefit from a speedup that's similar to that of a compiler compared to an interpreter.


# What is "K"? (previous)

*If you’ve been around Pi Squared for a while, or even read any of our blog posts, there’s one thing you might be curious about, which is K. It’s a recurring topic, and for good reason—K is at the heart of what we do. In this guide, we’ll break it down for you.*

The K framework is a semantics-based approach to language design and implementation. Instead of manually building tools like interpreters or verifiers for each programming language, K allows developers to define a language formally and extract a full set of tools automatically.

As illustrated below in Figure 1, with just a formal specification of a language’s syntax and semantics, K can produce a parser, an interpreter, and a symbolic deductive verifier, among other tools. This means that once a language is defined in K, you don’t need to write separate execution tools—it’s all derived from the semantics.

<figure><img src="/files/7DX0oD7NW1kzhL3gKckv" alt=""><figcaption><p><strong>Figure 1</strong>: <em>The central vision of the K framework.</em></p></figcaption></figure>

K is scalable and has been used to formalize multiple real-world programming languages, including [C](https://pi2.network/papers/defining-undefinedness-of-c), [Java](https://pi2.network/papers/k-java), [JavaScript](https://pi2.network/papers/kjs), [Python](https://pi2.network/papers/python-semantics), [Rust](https://github.com/runtimeverification/mir-semantics), [x86-64,](https://pi2.network/papers/formal-semantics-x86-64) [the Ethereum Virtual Machine (EVM)](https://pi2.network/papers/kevm), and [LLVM IR](https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2020.7), making it suitable for both research and commercial applications.

At Pi Squared we depend on K’s abilities to achieve the following:

* To define any programming language formally and generate correct-by-construction interpreters.
* To automatically generate efficient execution models for blockchain-based computation.
* To ensure that smart contracts and blockchain applications behave as expected—no hidden compiler bugs, no unforeseen behavior.

This is the foundation for making blockchain programming truly verifiable, correct, and performant.

### How K works

In K, a definition of a language consists of three main components:

1. **Concrete syntax**: A conventional BNF grammar that defines the structure of valid programs in the language.
2. **Execution state (configuration)**: A representation of the state maintained by a program during execution.
3. **Operational semantics**: A set of rewrite rules that define how the program's state changes over time.

K uses rewrite rules to define execution in a precise way. A rewrite rule takes an initial configuration and transforms it into a new configuration based on predefined logic, ensuring that program execution follows the formal semantics.

A core feature of K is its ability to generate a language-agnostic interpreter. Given a K definition of a language, K automatically generates an interpreter that can execute any program written in that language.

### LLVM-K: Making K Fast

Initially, K was designed to interpret programs using a language-generic tool, which essentially would run an interpreter inside another interpreter. However, generic interpretation can introduce additional overhead compared to language-specific execution.

As such, the current version of K builds on LLVM-K, which leverages LLVM IR to compile K into efficient native code. By generating a native interpreter, LLVM-K eliminates the extra layer of interpretation, significantly improving performance.

<br>


# Semantics-Based Compilation

Performance results for LLVM-K are promising, e.g., when compared to Geth, the official implementation of EVM in Go and most adopted Ethereum client. Nevertheless, LLVM-K benefits from a series of additional optimizations enabled by K's semantics-based approach, and not possible in compiler-based approaches.

What we refer to here is <mark style="color:purple;">**compositional symbolic execution**</mark>, or <mark style="color:purple;">**CSE**</mark> in short. Our results show that LLVM-K extended with CSE outperforms Geth by 1.58x.

## What is CSE?

In brief, CSE is the process of getting a faster, optimized semantics for a given program in a given language. More specifically, CSE transforms a large and complex small-step semantics into a smaller and simpler one, allowing for "medium"-step rules which speed-up the execution.

You can think of CSE as the partial evaluation of an interpreter (which gives you a compiler!) but carried out via the formal semantics. In other words, enabling CSE in K is like going from interpreters to compilers, with an expectation of an order of magnitude speedup.

## Types of CSE

**There are two types of CSE which are:**

* **CSE\[Pgm]:** This type of CSE occurs at the program level and assumes that the program is known ahead of time.
* **CSE\[OpCode]**: This type of CSE occurs at the language level and it optimizes the general semantics without knowing the programs ahead of time, but relies on side information about the context of the possible programs.

### CSE\[Pgm]

CSE\[Pgm] considers the semantics of a single program in its transformation. It uses symbolic execution to produce a "medium"-step semantics operating on basic blocks in the program.

This means that multiple small execution steps are composed into a single step that always performs the same operations as the underlying small steps would, regardless of the input. The new semantics is, in essence, the program's control flow graph (CFG), where the edges are the medium-step rewrite rules.

### CSE\[OpCode]

CSE\[OpCode] doesn't assume knowledge of the program to be executed ahead of time, but certain characteristics thereof, such as the execution order for certain semantic rules.

CSE\[OpCode] merges rules in the original small-step semantics that commonly follow each other sequentially, without branching or looping. E.g., checking if there is enough gas available, performing an operation, and updating the program counter are a series of three consecutive actions appearing recurrently in EVM.

Finally, additional parameters known ahead of time, such as the gas schedule, can also be internalized for further performance gains.

Both CSE techniques are “correct-by-construction”, as the optimized semantics are built by symbolically executing the original one.

Further, not only do they enable faster program execution, but also shorter proof certificates for the execution of the program. K can produce formal mathematical proofs in Metamath showing that these optimizations are correct.

<br>


# Overview

Proof of Proof is a universal verifiable computing framework that works for all programming languages, virtual machines, and instruction set architectures (ISA), and is compatible with any zero-knowledge (ZK) backends and zero-knowledge virtual machines (zkVMs).

## Verifiable computing and zkVMs

Verifiable computing is the technology that allows a computing party to produce verifiable computing results, which usually consist of the original result together with a certificate that shows that the result is indeed correct.

There's a verification algorithm that anyone can use to verify a certificate. If the verification is successful, then it is convinced, either absolutely or with very high probability, that the results are also correct.

Verifiable computing is critical for securely outsourcing and delegating complex computational tasks to untrusted, remote computing services. It significantly reduces the size of the trust base of a computational task from a more powerful computing party to a more computationally economic verification party.

zkVMs are a typical approach to verifiable computing systems. To use a zkVM to produce verifiable results of computational task, you will need to implement a zkVM system in a higher-level programming language (such as Rust), which will then be compiled into a lower-level representation (such as RISC-V).

The zkVM's ZK circuit process the execution traces of the zkVM to generate the final verifiable certificates known as zero-knowledge proofs (ZKPs).

However, the zkVM approach has the following three limitations:

1. It relies on a long and complicated compilation chain from the higher-level languages to ZK circuits that causes significant performance overhead.
2. It only works on programs written in a handful of higher-level programming language(s) from which a compilation chain does exist to the lower-level representation supported by the ZK circuits of the zkVM.
3. It has a large trust base that consists of the long compilation chain from high-level languages to ZK circuits as well as the implementation of the ZK circuits themselves.

## Proof of Proof

Proof of Proof is an innovative framework to verifiable computing that complements the zkVM approach by addressing the above-mentioned limitations using the formal semantics of programming languages.

It provides a clean separation of concerns across three core pillars:

<details>

<summary><mark style="color:purple;"><strong>Computation</strong></mark></summary>

Computation is conducted by the K framework using the formal semantics directly.

</details>

<details>

<summary><mark style="color:purple;"><strong>Math proof</strong></mark></summary>

Computation carried out by K is further certificated by a machine-checkable math proof.

</details>

<details>

<summary><mark style="color:purple;"><strong>Zero-knowledge proof</strong></mark></summary>

The machine-checkable math proof is used to produce a zero-knowledge proof (ZKP) as the final verifiable certificate.

</details>

Proof of Proof starts with three pieces of information: a programming language, a program written in that language, and an input for the program. Together, these define the computational task that needs to be verified.

Then, it does the following three steps in sequence:

{% stepper %}
{% step %}
**Run the program using formal semantics**

Proof of Proof uses the K framework to execute the program with the input. It relies directly on the formal semantics of the programming language to get the result of the computation.
{% endstep %}

{% step %}
**Generate a mathematical proof**

During execution, K produces logs called a "math proof hint." This hint is used to generate a full mathematical proof showing that the program was executed correctly. The proof is based entirely on the language’s formal semantics and can be checked by a simple program called a math proof checker.
{% endstep %}

{% step %}
**Produce a ZK proof as a verifiable certificate**

The act of checking the math proof is then turned into a zero-knowledge (ZK) proof. This ZK proof acts as the final verifiable certificate and can be generated by any zkVM, or by the Pi Squared Block Checker. Like earlier steps, this process also uses the language’s formal semantics.
{% endstep %}
{% endstepper %}

Therefore, Proof of Proof is a universal framework for verifiable computing because it is based directly on the formal semantics of programming languages. As a result of that, Proof of Proof has the following advantages:

1. Proof of Proof works for all programming languages, virtual machines, or instruction set architectures, by taking their formal semantics as direct input and avoiding the long and complicated compilation chain from higher-level languages to lower-level representations.
2. Proof of Proof postpones the expensive ZK process by generating math proofs first, which keeps the nice mathematical abstractions and structures of the original computing tasks that would have been lost in compilation, and thus enables new and significant semantics and mathematics-level optimizations.
3. Proof of Proof yields a much smaller trust base that mainly consists of the math proof checker(s) and the various formal semantics of programming languages, virtual machines, and instruction set architectures.

## Why we call it “Proof of Proof”

Proof of Proof gets its name from how it works: (ZK) proof of (math) proof.


# Architecture

In this guide, we look more closely at the architecture of Proof of Proof and how it works end-to-end.

Below is a simplified breakdown of how Proof of Proof works under the hood:

{% stepper %}
{% step %}
**Define the formal semantics (once)**

Use the [K framework ](broken://pages/1e2ZKnPRUbe59ixbIjz0)to define the formal semantics of the programming language, virtual machine, or instruction set architecture. This formal definition describes how every program in the language should behave. It only needs to be created once for each language.
{% endstep %}

{% step %}
**Execute the program and obtain the computing result**

Run the program using the K framework. This produces the output of the computation, along with detailed logs that show how the formal semantics guided each step of the execution.
{% endstep %}

{% step %}
**Generate a mathematical proof**

Using the execution logs (called a proof hint) and the formal semantics, generate a full mathematical proof that confirms the result is correct. This proof is complete, rigorous, and can be automatically verified by a small tool called the math proof checker.
{% endstep %}

{% step %}
**Generate a zero-knowledge proof**

Feed the math proof into a math proof checker, then use that process to create a zero-knowledge proof. This ZKP proves that a valid math proof exists without revealing the proof itself. Since ZKPs are typically much smaller than full math proofs, this step essentially compresses the original proof.
{% endstep %}

{% step %}
**Verify proofs anywhere**

Both the math proof and the ZKP can be independently verified by anyone. Each acts as a verifiable certificate that confirms the correctness of the original computation.

The trade-off here is the classic one between time and space:

* Math proofs are quicker to generate but take up more space.
* ZKPs are smaller but take more time to generate.

Regardless of which one you use, both provide strong guarantees of correctness and can be verified anywhere.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
The final certificate of the Proof of Proof workflow is a ZKP that shows the existence of a math proof, which in turn shows the correctness of the computing result.
{% endhint %}

Now, let us look more closely at the architecture and workflow of Proof of Proof from the beginning to the end, illustrated by the figure below.

<figure><img src="/files/tUPXpVM89qZiqV8ttE5o" alt="The Proof of Proof workflow"><figcaption><p><em><strong>Figure 1</strong>: The Proof of Proof workflow</em></p></figcaption></figure>

The above architecture and workflow can be understood by looking at its three main components and phases, represented as three large boxes. We elaborate on each of them below.

## K and proof hint generation

The first component and phase of **Proof of Proof** involves an enhanced version of the **K framework**. This instrumented version is used to execute any program based on the formal semantics of its programming language. During this phase, three key outputs are produced:

{% stepper %}
{% step %}
**Computing result**

This is the result of running the program using the K framework. It's the same output you would expect from executing the program normally, but it's generated by strictly following the formal semantics defined in K.
{% endstep %}

{% step %}
**Mathematical theory of the programming language**

Every programming language used with Proof of Proof must have its **formal semantics** defined in K. This formal semantics serves as a **mathematical theory** of the language. It completely and rigorously describes how all programs written in that language should behave.

Think of this formal semantics as similar in spirit to foundational mathematical systems like **Peano arithmetic** or **Zermelo–Fraenkel set theory**.

* The **K framework** uses this mathematical theory to simulate program execution.
* **Proof of Proof** uses the same theory to generate verifiable certificates that prove the correctness of the computation.
  {% endstep %}

{% step %}
**Math proof hint (execution trace)**

As the K framework runs the program, it produces detailed logs known as the **math proof hint**. These logs are critical because they trace exactly how the program transitions from one state (or configuration) to the next.

In K, a formal semantics consists of **rewrite rules**—these rules define how one configuration is transformed into another. The math proof hint captures this entire execution trace by:

* Recording each step in the sequence of configuration transitions
* Linking every step back to the specific rewrite rule in the formal semantics that caused it

This trace forms the foundation for constructing a full mathematical proof in the next phase.
{% endstep %}
{% endstepper %}

At the end of this phase, **three deliverables** are passed on to the next step:

* The computing result
* The mathematical theory (formal semantics) of the programming language
* The math proof hint (execution trace)

These form the input for the next phase, where a complete and verifiable **mathematical proof** is automatically generated.

## Math proof generation

The second phase of **Proof of Proof** is focused on generating a complete **mathematical proof** that confirms the correctness of the program’s execution.

{% stepper %}
{% step %}
**Create sub-proofs for each step**

During this phase, Proof of Proof takes the execution trace from K and generates a sub-proof for each individual transition between configurations. Each transition is one step that K performed when executing the program.
{% endstep %}

{% step %}
**Merge into a final proof**

All of these sub-proofs are then merged into a single, comprehensive math proof. This final proof shows, step by step, how the program execution follows logically from the formal semantics of the programming language.
{% endstep %}

{% step %}
**Use Matching Logic and Proof Calculus**

The math proofs are built using a fixed system called the **Proof Calculus**, which is based on a formal logic known as matching logic.

* This system provides a consistent method for constructing and verifying proofs.
* All math proofs built using this calculus can be checked in the same way—by validating that each proof step follows the rules defined by the Proof Calculus.
  {% endstep %}

{% step %}
**Verify with the math proof checker**

To verify a proof, a tool called the math proof checker is used. This is an implementation of the verification algorithm defined by the Proof Calculus. It checks that every step in the proof is valid.
{% endstep %}
{% endstepper %}

**Deliverable of this phase**\
The main output here is the **math proof,** which is a detailed, step-by-step derivation of the computing result, built directly from the formal semantics of the programming language.

One of the key strengths of this approach is that it reduces the trust base to an absolute minimum.

{% hint style="success" %}
What you **must** trust:

* The **formal semantics** of the programming language (defined in K)
* The **math proof checker** (which verifies the proof steps)
  {% endhint %}

{% hint style="danger" %}
What you **don’t** need to trust:

* The **math proof** itself (it’s automatically checked)
* The **proof generation process** (including K), since they are only used to discover the proof, not verify it
  {% endhint %}

> In this setup, K acts as a **proof searcher**, not a source of truth. The **correctness** of the result relies solely on the **formal semantics** and the **math proof checker**.

## Zero-knowledge proof generation

The third phase of **Proof of Proof** is about generating **zero-knowledge proofs (ZKPs)**. These proofs confirm that a valid math proof exists, without revealing the proof itself.

There are three key components involved in this process:

* **`PI`**: the math proof
* **`mpc`**: the math proof checker
* **`pi`**: the zero-knowledge proof

These components are related in the following way:

{% stepper %}
{% step %}
**`PI`** is valid if and only if `mpc(PI) = accept`

This means the math proof is correct if the math proof checker accepts it. This is an absolute guarantee.
{% endstep %}

{% step %}
**`pi`** is valid if and only if **`PI`** is valid, with a negligibly small chance of error

In other words, the ZK proof `pi` is convincing evidence that `PI`is valid. While not absolute like (1), the error probability is extremely low in practice.
{% endstep %}
{% endstepper %}

Proof of Proof is a flexible framework. It allows customization in:

* How the math proof `PI` is serialized and formatted
* How the math proof checker `mpc` is implemented
* How the ZK proof `pi` is generated

To illustrate this, two independent workflows are supported:

{% stepper %}
{% step %}
**Using any existing zkVM**

* You can choose a standard format for encoding math proofs, such as **Metamath**.
* You implement the math proof checker (`mpc`) inside a zkVM.
* In this setup:
  * The **public input** to the zkVM is the part of `PI` that defines the formal semantics and the computing result.
  * The **private witness** is the part of `PI` that contains the detailed proof steps from the Proof Calculus.

This separation between math proof generation and ZK proof generation allows for semantic and mathematical optimizations before ZK-specific constraints come into play.
{% endstep %}

{% step %}
**Using a specialized circuit: The Block Model**

* For more efficiency, we designed the **Block Model**, a specialized approach for organizing and verifying math proofs.
* In the Block Model:
  * The math proof is divided into independent blocks.
  * Each block contains a set of premises and conclusions.
  * This allows for parallel and independent processing of blocks.

The Block Model is highly compatible with circuit-based ZK systems and enables:

* Efficient **folding** of ZKPs
* Effective **batching** of multiple proofs
  {% endstep %}
  {% endstepper %}

By supporting both general-purpose zkVMs and optimized circuits like the Block Model, Proof of Proof offers a powerful and adaptable approach to verifiable computation.


# Math Proof Generation

Math Proof Generation is the process that takes as input the math theory of the programming language, the computing result, and the math proof hint, and using the Proof Calculus to generate the math proof for a given computing task conducted by K. The math proof is complete, rigorous, and machine-checkable by a math proof checker, and can serve as the verifiable certificate of the original computing task.

The generation of the math proof eliminates K and the math proof generation process itself from the trust base of Proof of Proof.

Below is a more detailed and specific outline of how a math proof `PI` is created from a program `P` in a programming language `PL`:

1. K is used to define the formal semantics of `PL` that represents the math theory of the programming language.
2. The LLVM backend of K uses the formal semantics of `PL` to automatically derive an interpreter for `PL`, which is used to execute `P`. The execution process is logged in the form of the proof hint.
3. Using the proof hint and a predefined set of proof rules in the Proof Calculus, create an internal representation of the math proof `PI` .
4. Finally, this internal representation is converted into a format, such as Metamath or a specialized block model, and is checked by a corresponding math proof checker of that format.

## Proof Calculus and Matching Logic

Proof Calculus is at the heart of math proof generation. Matching logic is the foundation of Proof Calculus. It provides a unified way to define and reason about the semantics of any programming language. In matching logic, a programming language is formalized as a math theory, also called a logical theory, which is a structured collection of axioms that define the behaviors of all programs in that language. This logical structure makes it possible to reason about execution, correctness, and equivalence in a precise and formal way.

Matching logic is an expressive yet minimal logic, which makes it ideal to serve as the logical foundation of Proof of Proof.

* Matching logic can express any programming paradigms (imperative, functional, object-oriented, logical, etc.), any semantics styles (operational, algebratic, denotational, etc.), and any program properties (safety, liveness, temporal, etc.).
* Matching logic has a simple syntax and a simple proof system, which results in very small proof checkers in a few hundreds lines of code, reducing the trust base of Proof of Proof to an absolute minimum.

Matching logic uses a small set of constructs to express powerful logical patterns:

```nb
φ ::= x | X | φ₁ φ₂ | ⊥ | φ₁ → φ₂ | ∃x.φ | μX.φ   (if X is positive in φ)
```

These expressions, called patterns, can match a wide range of structures—from simple terms to full program states.

Below is an explanation of what each component means:

* `x`: Element variables, like those in first-order logic (FOL), used to refer to individual elements.
* `X`: Set variables, similar to propositional variables in modal logic, used for predicates or sets of elements.
* `φ₁ φ₂`: Application. Applying the constructor/function/relation represented by φ₁ to φ₂.
* `⊥`: Logical false.
* `φ₁ → φ₂`: Logical implication.
* `∃x.φ`: Existential quantifier, expressing that some value makes φ true.
* `μX.φ`: Least fixpoint, used to express recursive or iterative properties (e.g., loops or reachability).

Patterns are the core building blocks of matching logic, allowing us to

* Match data structures with specific shapes
* Describe valid transitions between program states
* Capture dynamic behaviors and constraints over time

In practice, this makes matching logic suitable for both low-level reasoning (e.g., arithmetic correctness) and high-level semantics (e.g., verifying smart contracts or system invariants).


# Math Proof Checker

Before any proof can be verified by a machine, the math proof generation process first creates an internal representation of that proof. This representation captures the logical steps that demonstrate a program behaves according to its formal semantics.

While the exact structure of this internal proof representation is still evolving, it is designed with two core principles in mind:

* **Generic and easy to serialize**: The proof should be format-agnostic. That means it can be converted into different machine-verifiable formats like Metamath, Coq, or Lean, depending on the needs of the verifier.
* **Modular and reusable**: Key components of the proof—such as patterns, axioms, sub-proofs, and theories—are designed to be reusable. This means you don't have to reprove them when generating proofs for similar programs.

These properties make it easier to serialize the proof into formats that can be checked efficiently and securely, including in zero-knowledge settings.

In this section, we’ll walk through the two main proof checker formats we currently support: Metamath and a custom format called the block model. We’ll also explain how matching logic and Kore (the intermediate format generated by the K framework) map into each of these proof representations.

## Metamath

[Metamath](https://us.metamath.org/) is a lightweight language designed to express formal mathematical proofs. Created by Norman Megill in 1990, it was built with minimalism in mind—only 15 basic keywords are used, each prefixed with a `$` symbol. This simplicity makes it easy to build and verify proofs, and it’s one reason Metamath is still widely used today.

Because of its minimal syntax, writing a Metamath proof checker is surprisingly straightforward. There are over 20 implementations in different languages, many of which are just a few hundred lines long. This compactness is crucial when deploying checkers inside zkVMs (zero-knowledge virtual machines), where both runtime and footprint matter.

Using Metamath for proof checking in our system means we can either adapt existing proof checkers to run inside zkVMs, or compile the semantics directly into a constraint system for zero-knowledge proofs. Either way, Metamath provides a clean, proven foundation for formal verification.

## Block Model

The block model is a custom proof format we’ve designed from the ground up, specifically optimized for zero-knowledge proof (ZK) systems.

In the block model, a proof is broken down into discrete units called blocks. Each block has a set of input premises and generates a set of conclusions. The rules of inference are hardcoded into the system, so each block must follow these predefined rules.

Here’s how it works:

* To construct a proof, a prover provides a series of blocks.
* Each block only needs to check that its premises have already been established as conclusions somewhere else in the proof.
* Because the order of the blocks doesn’t matter, the proof checking can be parallelized or divided across multiple zkVM circuits.

This “data-parallel” structure is a major performance advantage. Rather than creating a separate SNARK (succinct non-interactive argument of knowledge) for every block, we can generate a single, succinct ZK proof for the entire formal proof. This saves time and computation—especially valuable in environments where efficiency is key.


# ZK Proof Generation

Once a mathematical proof of a program's behavior has been generated and verified, the next step is to turn that proof into a zero-knowledge (ZK) proof. This section covers two approaches we use to generate ZK proofs for verified executions:

1. By running the proof checker inside a zkVM
2. By compiling the proof into a custom circuit using our block model (BM)

Each method comes with its own trade-offs in terms of performance, flexibility, and implementation complexity.

## Generating ZK Proofs with zkVMs

A zkVM is a virtual machine that can produce ZK proofs for arbitrary programs. By compiling our proof checker to run inside a zkVM, we can reuse its infrastructure to generate ZK proofs of verified program execution with minimal changes to our workflow.

In this setup:

* The proof checker is written as a guest program and runs inside the zkVM.
* The zkVM proves that the proof checker correctly validates a given mathematical proof (e.g., a Metamath or block model proof).
* This results in a succinct and verifiable certificate attesting to the correctness of the program's execution.

We’ve implemented this in several zkVMs, including Risc Zero, SP1, zkWASM, Jolt, Cairo, Lurk, and Nexus​. For zkVMs with shared language support (like Rust), we used a common library to keep the checker consistent across platforms.

### Benefits

* Portable across many zkVMs.
* Great for rapid prototyping and proof-of-concept implementations.
* Supports arbitrary programs written in high-level languages.

### Limitations

* zkVMs introduce overhead due to general-purpose memory models and instruction tracking.
* For large proofs, memory usage and runtime can become bottlenecks.
* Proof generation time can take minutes for simple programs and even longer for complex ones​.

## Generating ZK Proofs using Block Model (BM) Circuits

To maximize efficiency, we also offer a more specialized path: compiling mathematical proofs directly into zero-knowledge circuits using a format we call the block model.

In the block model:

* Proofs are organized into a set of independent blocks.
* Each block has a set of premises and conclusions.
* A block is valid if all its premises are satisfied by conclusions from other blocks.

This structure is unordered and data-parallel, meaning we can verify each block independently and in any order. This makes it highly compatible with circuit-based ZK systems and enables efficient folding and batching of proofs.

We implemented this using techniques from modern SNARK and STARK systems, converting blocks into arithmetic circuits (e.g., R1CS or AIR). Each block rule is turned into a subcircuit, and large proofs are split into segments and folded recursively into a single succinct proof​​.

### Benefits

* Offers up to 1400× speedup compared to zkVM-based proof generation​.
* No overhead from virtual machines, memory models, or instruction sequencing.
* Ideal for large proofs and production-scale deployments.

### Trade-offs

* Requires custom circuit design and tuning.
* Less flexible than zkVMs for arbitrary code execution.

## Comparison

| <mark style="color:purple;">**Approach**</mark>             | <mark style="color:purple;">**Best For**</mark> | <mark style="color:purple;">**Performance**</mark> | <mark style="color:purple;">**Setup Complexity**</mark> |
| ----------------------------------------------------------- | ----------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
| <mark style="color:purple;">**zkVM-based**</mark>           | Fast iteration, high flexibility                | Medium                                             | Low                                                     |
| <mark style="color:purple;">**Block model circuits**</mark> | High-performance, large-scale ZK applications   | High                                               | Medium–High                                             |


# Applications

Proof of Proof's unique combination of math proofs and zero-knowledge (ZK) proofs opens up a wide range of potential applications across various domains.The ability to provide succinct and verifiable certificates of computational integrity has the potential to revolutionize how we approach trust and security in these areas.

## Remote Computing

In remote computing scenarios, Proof of Proof can enable remote servers to execute programs on behalf of clients, with strong guarantees of correctness.

{% tabs %}
{% tab title="The Problem" %}
Clients often have to trust that remote servers execute their programs correctly, even though they have no way to verify the server's computations. This lack of transparency can be a major barrier to adopting remote computing solutions, especially for sensitive applications.
{% endtab %}

{% tab title="The Solution" %}
With Proof of Proof, the remote server can generate a ZK proof that attests to the correct execution of the client's program. The client can then efficiently verify this proof, ensuring that the result they receive is indeed the correct output of their program.
{% endtab %}
{% endtabs %}

### Benefits

* **Trustless Computing**: Clients can be confident in the integrity of remote computations without needing to rely on the server's honesty.
* **Increased Security**: Reduces the risk of malicious or erroneous computations by remote servers.
* **Wider Adoption**: Facilitates the use of remote computing for a broader range of applications, including those with high assurance requirements.

## Blockchain Technology

Proof of Proof can address scalability and trust issues that are prevalent in blockchain technology.

{% tabs %}
{% tab title="The Problem" %}
Traditional blockchain systems require every node in the network to re-execute smart contract code, leading to significant redundancy and limiting scalability.
{% endtab %}

{% tab title="The Solution" %}
By integrating Proof of Proof, only one node needs to execute the smart contract, generating a ZK proof of the execution. Other nodes can then quickly verify this proof instead of re-executing the code.
{% endtab %}
{% endtabs %}

### Benefits

* **Scalability**: Significantly increases the transaction throughput of blockchain networks by reducing redundant computations.
* **Efficiency**: Reduces the computational burden on the network, leading to lower energy consumption and faster transaction processing.
* **Trust Minimization**: Enhances trust in blockchain computations, as verification is based on cryptographic proofs rather than assumptions about node behavior.

## Artificial Intelligence

Proof of Proof can bring verifiability to AI model inference.

{% tabs %}
{% tab title="The Problem" %}
AI model inference, especially in complex models, can be difficult to verify. There's often a lack of transparency in how the model arrives at a particular conclusion.
{% endtab %}

{% tab title="The Solution" %}
Proof of Proof can be used to generate a ZK proof of the inference process, providing a verifiable record of the computations performed by the AI model.
{% endtab %}
{% endtabs %}

### Benefits

* **Verifiability**: Increases trust in AI systems by providing a way to verify the correctness of their inference.
* **Transparency**: Offers insights into the computational steps taken by the AI model.
* **Accountability**: Enables greater accountability for AI decisions, which is crucial in sensitive applications.

## Beyond Verifiable Computing

Proof of Proof can also enable applications that combine verifiable computing with other methods of generating mathematical proofs.

* **Combining Formal Verification and Program Execution**: Proofs generated by formal verification (showing that a program satisfies certain properties) can be used to simplify and strengthen proofs of program execution. This combination can lead to more efficient and comprehensive verification.
* **Verifiable Compliance**: Proof of Proof can allow companies to prove that their software complies with specific requirements, without necessarily revealing the software's code. This is particularly important for companies that need to demonstrate compliance while protecting intellectual property.

By providing a robust and versatile framework for verifiable computing, Proof of Proof has the potential to transform a wide range of industries and applications, fostering greater trust, security, and efficiency.


# Core technologies

Proof of Proof is built upon three core technologies:

<table data-view="cards"><thead><tr><th></th><th></th><th data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Formal semantics and the K framework</strong></td><td>Learn how it provides a rigorous way to define programming languages, capturing the precise meaning of programs.</td><td><a href="/pages/BOjY4xrmg2cGRGeXCVHx">/pages/BOjY4xrmg2cGRGeXCVHx</a></td></tr><tr><td><strong>Matching logic</strong></td><td>Understand the logical foundation that allows us to translate program executions into mathematical proofs.</td><td><a href="/pages/XrhX6xDpQ45w6pnBldNJ">/pages/XrhX6xDpQ45w6pnBldNJ</a></td></tr><tr><td><strong>Zero-knowledge proofs and zkVMs</strong></td><td>Explore the cryptographic tools that enable us to compress and efficiently verify the mathematical proofs.</td><td><a href="/pages/uJnDsdKPnjHebX2eIO3Q">/pages/uJnDsdKPnjHebX2eIO3Q</a></td></tr></tbody></table>

Core technologies behind Proof of Proof

To better understand each stage, it's important to first review the fundamental technologies that underpin Proof of Proof.

### Formal semantics & the K framework

Most programs are written in languages like JavaScript, Rust, or Solidity, but how do we describe what those programs actually mean in a rigorous way?

That’s where formal semantics comes in. It gives us a precise, mathematical definition of a programming language. Instead of relying on a human-readable spec or an ad hoc compiler behavior, formal semantics tells us exactly how every construct in a language behaves.

The K framework is the backbone of this idea. It's a meta-language, which simply means it’s a language used to define other languages. You can define the full syntax and behavior of any programming language in K, and it will automatically generate a list of tools including an interpreter, a symbolic execution engine, a proof generator, etc.

Once a language is defined in K, it can plug directly into the Proof of Proof pipeline, no matter if it’s C, Python, EVM, or something new.

### Matching logic

Underneath the K framework lies a formal logic called matching logic. It’s the system that allows us to turn computation into math.

In simpler terms, this means:

* Every programming language defined in K becomes a PL math theory in matching logic.
* Every execution of a program becomes a claim—a logical statement that says, “Starting from state A, the program ends in state B.”
* Proof of Proof uses a fixed set of logical rules to generate a mathematical proof that this claim is valid.

This is the first big leap: transforming arbitrary code into something math can reason about. Importantly, matching logic is expressive enough to handle all languages and paradigms, yet its core checker is just a few hundred lines of code.

### Zero-knowledge proofs & zkVMs

Math proofs are great for correctness, but they’re often too large or detailed to be practical. That’s where zero-knowledge (ZK) proofs come in.

With ZK cryptography, we can compress those large mathematical proofs into short, verifiable statements. Instead of checking the whole proof, you verify a small ZK proof that proves that a proof exists.

Proof of Proof supports multiple ZK systems, such as SNARKs, STARKs and zkVMs like RISC Zero, SP1, and others.

These systems act like virtual machines that run in zero-knowledge. You write or define a computation, and the zkVM outputs a cryptographic proof that it ran the computation correctly without revealing the computation itself.

By translating our math proofs into ZK-compatible circuits, we unlock scalability, privacy, and decentralized verification which are all critical components for any trustless system.<br>


# Formal Semantics & the K Framework

An easy way to understand the K framework is to see it as a meta-language that can implement or define other programming languages.

In the K framework, a language definition consists of two modules: one defining the syntax and the other defining the semantics using rewrite rules.

* Syntax: Defined using BNF grammar.
* Semantics: Defined using rewrite rules that specify how a program executes.

A configuration is a term that contains all the necessary information to execute programs, including the code and the program state.

Formal semantics are defined using rewrite rules that describe how configurations change during program execution.

The K framework provides a suite of tools, including, [parsers](https://en.wikipedia.org/wiki/Parsing), [interpreters](https://en.wikipedia.org/wiki/Interpreter_\(computing\)), [model checkers](https://en.wikipedia.org/wiki/Model_checking), [symbolic execution engines](https://en.wikipedia.org/wiki/Symbolic_execution) and [formal program verifiers](https://en.wikipedia.org/wiki/Formal_verification).

For a detailed description of formal semantics and the K framework, please see our [K section](https://docs.pi2.network/k/overview).

<br>


# Matching Logic

Matching logic is the foundation of the Proof of Proof framework. It provides a unified way to define and reason about the semantics of any programming language using mathematical logic.

In matching logic, a programming language is described as PL math theory, which is a structured collection of axioms that define how programs behave. This logical structure makes it possible to reason about execution, correctness, and equivalence in a precise and formal way.

## Why Matching Logic?

Matching logic is both expressive and minimal:

* It’s expressive enough to describe any programming language or computational model—imperative, functional, object-oriented, or otherwise.
* Despite this expressiveness, it supports the smallest known proof checker—just 200 lines of code. That’s all it takes to verify any program execution written in matching logic, making it ideal for integration with systems like zkVMs and ZKPs.

Thanks to the [K framework](https://docs.pi2.network/k/what-is-k), many major programming languages have already been formally defined using matching logic, including: C, Java, JavaScript, etc.

These definitions are more than theoretical—they're used to build tools like interpreters, model checkers, symbolic execution engines, and program verifiers. K turns formal definitions into executable implementations.

## Matching Logic Syntax

Matching logic uses a small set of constructs to express powerful logical patterns:

```nb
φ ::= x | X | σ φ₁ … φₙ | ⊥ | φ₁ → φ₂ | ∃x.φ | μX.φ   (if X is positive in φ)
```

These expressions, called patterns, can match a wide range of structures—from simple terms to full program states.

Below is an explanation of what each component means:

* x: Element variables, like those in first-order logic (FOL), used to refer to individual elements.
* X: Set variables, similar to propositional variables in modal logic, used for predicates or sets of elements.
* σ φ₁ … φₙ: Constant symbols applied to sub-patterns. These represent functions, predicates, constructors, or even program states.
* ⊥: The bottom value, representing contradiction.
* φ₁ → φ₂: Implication.
* ∃x.φ: Existential quantifier, expressing that some value makes φ true.
* μX.φ: Least fixpoint, used to express recursive or iterative properties (e.g., loops or reachability).

### What Patterns Capture

Patterns are the core building blocks of matching logic. They allow us to:

* Match data structures with specific shapes
* Describe valid transitions between program states
* Capture dynamic behaviors and constraints over time

In practice, this makes matching logic suitable for both low-level reasoning (e.g., arithmetic correctness) and high-level semantics (e.g., verifying smart contracts or system invariants).

<br>


# Zero-Knowledge Proofs & zkVMs

Zero-knowledge proofs (ZKPs) and zero-knowledge virtual machines (zkVMs) are an essential part of our verifiable computing strategy. They allow us to prove that a computation was performed correctly without revealing the actual computation or its inputs.

## How Zero-Knowledge Proofs Work

At the core of most ZKPs is a process called arithmetization. This involves translating a program’s computation into a series of mathematical equations typically over finite fields or polynomial rings. The prover can then show that these equations are satisfied, without revealing the actual inputs or intermediate values.

The details of this transformation depend on the specific ZK proof system (e.g., SNARKs or STARKs) and the cryptographic primitives it relies on.

## What Makes zkVMs Different?

A zkVM is a special kind of ZK system that runs entire programs inside a virtual machine. Unlike traditional ZK systems, which require manual arithmetization, zkVMs automate that step. They accept programs written in high-level languages and compile them down to arithmetic circuits internally.

This abstraction makes it much easier to verify real-world programs in a zero-knowledge context even if those programs weren’t originally built with verifiability in mind.

## Why zkVMs Matter to Proof of Proof

zkVMs play a critical role in the Proof of Proof framework for two main reasons:

1. **Working with existing high-level languages**: Many of the formal systems we use weren’t designed with zero-knowledge in mind. They're implemented in high-level languages and frameworks like K. zkVMs offer a way to integrate these systems into zero-knowledge workflows without major rewrites.
2. **Shared goals and architecture**: Like zkVMs, our Proof of Proof system focuses on verifying arbitrary programs in arbitrary languages. Both systems aim to turn computation into verifiable proofs. That means techniques and optimizations from zkVMs often apply directly to what we’re building.


