Federation agreement

Each side keeps its own copy of the agreement. Policies need not be symmetric: world A may accept raw materials from B while B accepts nothing from A.

The normative schema is schemas/federation-agreement.schema.json in the ishtaria-protocol repository (installed by the ishtaria-protocol package to /usr/share/ishtaria/protocol/).

Example

federation_agreement:
  peer: svet-b.example.org
  peer_key: "ed25519:MCowBQYDK2VwAyEA..."
  protocol: ">=1.0 <2.0"
  ruleset: "core-rules@1.0"
  valid_until: 2027-10-04

  portals:
    - id: brana-sever
      local_location: { h3: "8a1fb46622dffff" }
      capacity_per_hour: 200
      max_cargo_items: 40

  import:
    avatar: true
    cosmetics: true
    skills: map            # map | reset | keep
    items:
      allow_categories: [raw_material, tool, food]
      deny_categories: [currency, legendary]
      daily_limit_per_player: 50
    currency: exchange     # never direct

  export:
    items:
      deny_categories: [quest_item]

  exchange:
    rate_source: market    # market | fixed
    daily_cap: 10000

  on_termination:
    foreign_items: return_home   # return_home | freeze | convert
    guests: return_home
    grace_period: 7d

Fields

peer, peer_key

DNS name and Ed25519 signing key of the other world.

protocol, ruleset

Negotiated versions. Rulesets must share the major version.

portals

Portal ends located in this world.

import / export

What may enter or leave, by item category. deny wins over allow.

exchange

How foreign currency is converted; never imported directly.

on_termination

What happens to foreign items and visiting players when the agreement ends. Mandatory: defederation must never be ambiguous.