BotsfolioBotsfolio
Track record

How to verify our trade log

Every filled trade from Botsfolio is sealed every hour in a public log on GitHub, signed with a key published on this site and anchored in Bitcoin. Any later edit to a sealed trade would show.

The log right now

ItemValue
Key fingerprint, in every row of the log758189603fa8abd5
Newest seal, number 1Oct 31, 2026, 04:46 UTC
Its SHA-256630defd42016c9ef2ce39f617c195f87bca4eb2e7358f95467c786b070e49c8f
Newest seal in Bitcoin, number 1Block 973,930
First sealOct 31, 2026, 04:46 UTC

1. Who wrote it

Each seal is signed with Botsfolio's private key. The public key that checks those signatures is published in three places, and only whoever controls botsfolio.com can change the first two: on this site, in a DNS record, and in the log. The fingerprint 758189603fa8abd5 in every row is the first 16 hex characters of the SHA-256 of the raw key. It says which key to check, and the signature shows that key signed.

nslookup -type=TXT _botsfolio-records.botsfolio.com

Expected value: ed25519-public-key=EZm6GvnxrO8rqsmPlBymT5PXYZO45l55zoXurtpJAjs=
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAEZm6GvnxrO8rqsmPlBymT5PXYZO45l55zoXurtpJAjs=
-----END PUBLIC KEY-----

2. That nothing changed

Each seal lists the SHA-256 of its files and of the seal before it, so editing or removing anything breaks every seal after it. A trade is never edited: a fix goes in as a new row that names the row it corrects.

3. When it existed

Each seal has an OpenTimestamps proof that ties it to a Bitcoin block, which nobody can backdate. A proof completes a few hours after its seal. The first seal, on Oct 31, 2026, covers trades from before it and shows those rows existed by that date. Download the newest finished proof and check it at opentimestamps.org.

4. The prices

Paper trades use live Coinbase prices, so anyone can compare them with Coinbase's public candles. A buy happens at the daily close (00:00 UTC) and equals that day's close. A sell is inside that minute's candle.

What the log holds

GroupWhat is public
Botsfolio AI's own portfolios (paper trading live markets)Time, asset type, instrument, currency, side, price, quantity, fee and slippage, with the portfolio's name and public page
Real users' paper portfoliosThe same, under an anonymous ID that stays the same for a portfolio. Nothing identifies a user
Real-money tradesTime, asset type, instrument, currency, side, fill price, exchange and fee. Never a name, account, order ID, portfolio or size, and not grouped by person

Start with the newest paper trades (CSV), the newest real-money trades (CSV), or the newest seal (JSON). Results built from these trades: paper trading live markets and real money.

Check it yourself

With Python, in a copy of the log, verify.py checks every seal, and with --prices 25 the newest 25 paper prices against Coinbase:

pip install cryptography
python verify.py --prices 25

To check the newest signature in a few lines, from anywhere:

import base64, json, urllib.request
from cryptography.hazmat.primitives.serialization import load_pem_public_key

get = lambda url: urllib.request.urlopen(url).read()
raw = "https://raw.githubusercontent.com/botsfolio/trading-records/main/"
key = json.loads(get("https://botsfolio.com/.well-known/botsfolio-records.json"))["publicKeyPem"]
latest = json.loads(get(raw + "latest.json"))
seal, signature = get(raw + latest["seal"]), base64.b64decode(get(raw + latest["signature"]))
load_pem_public_key(key.encode()).verify(signature, seal)  # raises if it doesn't match
print("signed by the key on botsfolio.com:", latest["seal"])

Without running code, compare what this site says with what the log says: the fingerprint and the newest seal's SHA-256 above should match latest.json, and the log links back to this page.

License

The data is licensed under CC BY 4.0. Use it freely and credit Botsfolio, with a link to this site. Past results don't predict future ones.