You run creationindex to answer how accounts come into existence on an Antelope chain: who created each one, and what RAM arrived with it. It follows a Roborovski action stream from the first global sequence, records every eosio::newaccount together with the RAM contributions in its transaction, and serves the results over HTTP under /v1/creationindex/. A configured gift program account adds program views: gifts per program creator, quota use, and returns. The terms are defined in GLOSSARY.md.
Building needs Go 1.25 or later.
make build # binary at ./creationindex
make install # go install into GOPATH/bin
make test
make vet
Configuration is INI and command-line flags; flags override the file. Copy config.ini.example to config.ini and set:
| Key | Meaning | Default |
|---|---|---|
db-path |
Pebble database directory | ./creationindex.db |
http-listen |
HTTP API TCP address, or none |
:9480 |
http-socket |
HTTP API Unix socket path ending in .sock, or none |
none |
actionstream-source |
Roborovski actionstream URL (stream://host:port or stream:///path.sock) |
stream://localhost:9081 |
program-account |
Gift program account (gift.vaulta on Vaulta, gift.gm on Jungle 4): its giftrams count as program gifts, the gift stream indexes its actions, and the msig stream indexes eosio.msig proposals with an action it authorizes; when unset, no gift counts as a program gift and both streams stay off |
none |
chain-url |
Chain API URL that get_endowment reads the program account from with get_account |
none |
log-filter |
Comma-separated log categories | startup,sync,status,http |
log-file |
Also write logs to this file | none |
debug |
Log every category | false |
When a new build changes the storage schema, creationindex refuses to start and logs the database path. Delete that directory and start creationindex again; it replays from seq 1.
You query creationindex with GET query parameters, or with a POST JSON body that uses the same names:
curl 'localhost:9480/v1/creationindex/get_creation?account=willsunshine'
The network routes are get_creation, get_creations (by creator or program_creator, oldest first paged with after and limit, or newest first with order=desc paged with before), get_daily (UTC days from and to, at most 366), get_day_creators (one day, ranked, paged with offset and limit), get_creators (creators ranked by creations summed over UTC days from to to, at most 366, paged with offset and limit) and health.
The program routes answer for the configured program-account. get_program_daily gives program gifts per UTC day per program creator, with a histogram of gifted byte sizes. get_quota takes a program_creator and lists each registration from addcreator to rmcreator with its quota changes, suspensions and quota windows, rebuilt with the gift contract's arithmetic. get_program_events lists program events oldest first, or newest first with order=desc, filtered by type (admin, program_gift, return, ram_movement) and program_creator. get_program_proposals lists program proposals oldest first, or newest first with order=desc, filtered by status (open by default, expired, executed, cancelled or all). get_endowment reads the program account's RAM from chain-url and caches it for 10 seconds.
Every field is always present: names are "" when empty, figures the chain does not state are null, and lists are []. Errors return {"error": "..."} with status 400 for a bad parameter and 404 for an unknown account. get_endowment returns 503 when chain-url is unset and 502 when the chain API fails.
Fixtures in internal/attribution/testdata/ are real stream actions, captured with cmd/capture from a host that serves the actionstream. Start the capture at the transaction's first global sequence and name each transaction to keep:
go run ./cmd/capture -source stream:///ramdisk/vaulta/actionstream.sock -start 368360304285 -out internal/attribution/testdata willsunshine=3efce2e5432e2e1ce595615e19fa245118e6766414022bc935a7a8eebfa79258
It subscribes with the service's eosio filter and writes each named transaction's actions to <name>.jsonl, one stream Action per line. For the gift stream, add -stream gift -program-account gift.gm. For the msig stream, add -stream msig; it subscribes without decoding, as the service does, so its fixtures in internal/program/testdata/ hold raw action data.
BSD-3-Clause; see LICENSE.