What you’ll need
- A Goldsky account and the CLI installed
Install Goldsky's CLI and log in
Install Goldsky's CLI and log in
-
Install the Goldsky CLI:
For macOS/Linux:
For Windows:Windows users need to have Node.js and npm installed first. Download from nodejs.org if not already installed.
-
Log into your Project by running:
This opens your browser to sign in (Google, GitHub, SSO, or email). Once you authenticate, the CLI is logged in automatically — there’s no API key to copy or paste.On a headless or remote machine (or in CI), create an API key on your Project Settings page and pass it directly with
goldsky login --token <API_KEY>. Usegoldsky login --no-browserto print the login URL instead of opening a browser. -
Now that you are logged in, run
goldskyto get started:
- A Postgres database and a Goldsky secret for it. The examples call the secret
MY_POSTGRES. - Basic familiarity with Turbo pipelines and SQL transforms.
How the pipeline works
- Two curated Elysium datasets are the sources:
elysium_mainnet.erc20_transfershas one row per ERC-20Transferevent.elysium_mainnet.native_transfershas one row per HYPE transfer, including HYPE sent by contracts in internal calls.
- A dynamic table holds the wallets to follow.
- Two transforms keep the transfers where a watched wallet is the sender or the recipient. A
UNION ALLcombines them, and a Postgres sink writes the result.
Create the wallet table
The pipeline caches the wallet list in memory and checks Postgres for new rows once per second. A cached table must give every new row an increasing timestamp, so create it yourself before you deploy:Pipeline YAML
elysium-wallet-activity.yaml
MY_POSTGRES with your secret name in both places. The two datasets use different ID formats (log_… and geth_trace_v2_…), so rows from the two sources never share an id.
Deploy and add wallets
goldsky turbo restart elysium-wallet-activity. If several processes write to the table at the same time, follow the rules for cached tables.
Output
Each row ofpublic.elysium_wallet_activity is one movement:
Common tokens to label in your app:
What Elysium activity looks like
Bridged tokens appear as mints and burns. When a watched wallet bridges a token in from HyperEVM, the gateway mints it on Elysium, and withdrawals to HyperEVM burn it:
Wrapping HYPE also mints WHYPE. WHYPE on Elysium holds the HYPE behind it. Calling
deposit() with HYPE gives two rows in one transaction: a native row from the wallet to the WHYPE contract, and an erc20 row that mints WHYPE from the zero address to the wallet. So a WHYPE row from the zero address is a wrap, not a bridge deposit.
Bridged HYPE comes from an aliased address. Elysium credits a HYPE deposit from HyperEVM with a call from the sender’s aliased address: the sender’s HyperEVM address plus 0x1111000000000000000000000000000000001111. The row’s from_address is not an address the user knows. A wallet that bridges to itself shows a native row from its own address plus the offset. To label these rows as deposits, use Track Elysium bridge flows.
HYPE that a contract sends is included. native_transfers is built from traces. When a contract pays out HYPE inside a transaction, for example on a swap or an unwrap, the transfer still appears as a native row.
Blocks are fast. Elysium can make a block every 100 ms, so many blocks share one block_timestamp. Order a wallet’s history by block_number, not by time.
Notes
- The pipeline starts at the chain head. A wallet you add now gets its new activity, not its history. To include history, set
start_at: earlieston both sources. - Every transfer on the chain is read, then filtered. The pipeline is billed on worker hours and records written, not on how many wallets you follow. Each matching movement is one record written to Postgres.