Agentic Keychain

Keychain Trading methodology

IN DEVELOPMENT Methodology version 1.2.1 of Keychain Trading. Every snapshot names the version it was computed with.

Modes

PAPER
Simulated trades: real prices, no money moved. The result is the price change minus a quoted swap cost; the stake is nominal, so only the result on stake is given, never an amount in euro.
TESTNET
Trades on a test network. None are published yet.
LIVE
Trades with real money. Results in euro, net of the costs named per network below.

The official record

The official record shows the live lanes the owner keeps active. Lanes the owner archived as experiments, and paper trading, stay available as reference and are not part of the official record.

Each live lane is one card: Base · Orion, and on Solana each lane apart. The cards are never added together. Each shows the month's ROI, the net result in euro, the number of closed trades and the trades won, and the forecast's parts (the forecast in euro, the average result per trade, the trades per 30 days), as the operator's own dashboard computes them, at the last hourly export (official.stand_at_utc). The month's ROI is a forecast, not a realized result: the average net result per trade, times the trades per 30 days at the pace so far, times the current stake, over the funds. On Base the average and the pace count from the agent's start, 2026-10-18 15:24 UTC, over its funds; on a Solana lane from the lane's start, over the lane's pot. When the forecast loss is larger than the whole pot, the card shows the days until the pot runs out at this pace. The net result, the trades and the trades won are realized, over the same live trades as the forecast: on Base from the agent's start, on a Solana lane from the lane's start.

Reference material: Archive.

What counts as a trade

A position from its opening to its full close. Partial closes count as one trade with the position. Only closed trades count: an open position has no realized result and is not published. On Base, the closes the agent books count, from its start on 2026-10-18 15:24 UTC, as on its own dashboard.

Net realized result

Per trade: what the close returned minus what the opening cost, both after the costs below. Per day and per dataset: the sum over its closed trades. Deposits and withdrawals are capital flows, never results, and are left out.

Live, Solana
the wallet's SOL balance before the buy against after the sale, so swap, priority and network fees are in it; the result in euro is that relative result applied to the stake in euro.
Live, Base
value received at the close minus the average cost of the position, in euro; network gas is booked separately and is not deducted from these results.
Paper, Solana
simulated: the price change minus a quoted round-trip swap cost or a depth estimate; no money moved, the stake is nominal, so no amount in euro is given.

Win rate

Trades with a net gain divided by all closed trades in the period. A trade that ends exactly flat counts as closed, not as a gain. The number of trades is always shown next to it; below thirty trades the dataset carries a small-sample flag.

Return

Result on stake: the summed net result of the trades divided by their summed stake, for a day and for the whole dataset. Daily percentages are never added up or averaged. A return on capital needs a published capital series; there is none yet, so net_return_pct stays empty.

Maximum drawdown: the largest fall of the cumulative daily net result in euro from its highest point, for live datasets.

Publication delay

The official cards show the stand at the last hourly export, closed trades only, aggregated per card. The day history is grouped per UTC day, and a day is published once a full day has passed after its end (data_through_date). A new snapshot is made only when the published figures change.

Missing data

A mode or network without closed trades is not_published, and a figure that cannot be computed is null; neither is ever shown as zero. A trade without a valued result is counted under unvalued and keeps its day's amount empty.

Corrections

Snapshots are only added, never changed. When the books of an already published day change, or the methodology does, the new snapshot names the one it replaces in supersedes_snapshot_id, gives the reason in revision_reason and lists the changed records and, for a new methodology version, its changes; the old snapshot stays published.

Status labels

self_reported
From the trading system's own books. The current status.
internally_reconciled
Checked by the operator against the venues' own records.
externally_verified
Checked by an independent party against external evidence.

Traceability

Not yet published. The proof is at /trading/proof.json.

  1. Fetch a snapshot from its url in this document; keep the bytes exactly as served.
  2. Compute SHA-256 over those bytes; it must equal snapshot_sha256.
  3. Verify signature (base64) over those same bytes with the Ed25519 public key in publishing-key.json; key_id is 'ed25519:' plus the first 16 hex characters of SHA-256 over the raw 32-byte public key.
  4. Check that each snapshot's previous_snapshot_sha256 equals the snapshot_sha256 of the entry before it.
  5. Check that results.json and history.json repeat the figures of the latest snapshot: the official cards, the day history and the reference.
# Python 3 with the cryptography package; reads the published files and checks every snapshot
import base64, hashlib, json, urllib.request
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey

SITE = "https://agentickeychain.com"
get = lambda path: urllib.request.urlopen(SITE + path).read()
key = json.loads(get("/trading/publishing-key.json"))
pub = Ed25519PublicKey.from_public_bytes(base64.b64decode(key["public_key"]))
prev = None
for entry in json.loads(get("/trading/proof.json"))["snapshots"]:
    raw = get(entry["url"])
    assert hashlib.sha256(raw).hexdigest() == entry["snapshot_sha256"]
    assert entry["previous_snapshot_sha256"] == prev
    pub.verify(base64.b64decode(entry["signature"]), raw)  # raises if the signature does not match
    prev = entry["snapshot_sha256"]
print("chain holds")

A hash and a signature show that a snapshot is unchanged since it was published, and its place in the sequence. They do not show that the trades were executed or that the amounts are real; that takes external evidence, and none is published yet.

Limitations

Roadmap

  1. DEVELOPMENT — CURRENT the agents trade while their strategies change; results are self-reported and signed
  2. VALIDATION the published results are reconciled against the venues' own records by the operator
  3. PUBLIC TRACK RECORD a longer, unchanged series under one methodology version
  4. EXTERNAL REVIEW an independent party checks the records against external evidence

For agents

Read-only. Every published figure is in these static files, with its status and limitations:

There is no trading API, wallet connection, order route or deposit address, and external capital is not accepted.

What is never published

Keys, wallets and addresses, coins, order and transaction ids, open positions, signals, strategy, lane rules and parameters, prompts, risk limits, infrastructure and logs. The official stand is aggregated per card; the day history is published per whole UTC day, a day after it ends.