- currently not validating price feeds if the underlying header already exists and is valid, since price feeds should have been added when initial header was added
Vulcanize DB
About
Vulcanize DB is a set of tools that make it easier for developers to write application-specific indexes and caches for dapps built on Ethereum.
Dependencies
- Go 1.9+
- Postgres 10
- Ethereum Node
- Go Ethereum (1.8+)
- Parity 1.8.11+
Installation
go get github.com/vulcanize/vulcanizedb
Setting up the Database
-
Install Postgres
-
Create a superuser for yourself and make sure
psql --listworks without prompting for a password. -
createdb vulcanize_public -
cd $GOPATH/src/github.com/vulcanize/vulcanizedb -
Run the migrations:
make migrate HOST_NAME=localhost NAME=vulcanize_public PORT=5432- See below for configuring additional environments
Configuration
-
To use a local Ethereum node, copy
environments/public.toml.exampletoenvironments/public.tomland update theipcPathandlevelDbPath.-
ipcPathshould match the local node's IPC filepath:-
when using geth:
- The IPC file is called
geth.ipc. - The geth IPC file path is printed to the console when you start geth.
- The default location is:
- Mac:
$HOME/Library/Ethereum - Linux:
$HOME/.ethereum
- Mac:
- The IPC file is called
-
when using parity:
- The IPC file is called
jsonrpc.ipc. - The default location is:
- Mac:
$HOME/Library/Application\ Support/io.parity.ethereum/ - Linux:
$HOME/.local/share/io.parity.ethereum/
- Mac:
- The IPC file is called
-
-
levelDbPathshould match Geth's chaindata directory path.- The geth LevelDB chaindata path is printed to the console when you start geth.
- The default location is:
- Mac:
$HOME/Library/Ethereum/geth/chaindata - Linux:
$HOME/.ethereum/geth/chaindata
- Mac:
levelDbPathis irrelevant (andcoldImportis currently unavailable) if only running parity.
-
-
See
environments/infura.tomlto configure commands to run against infura, if a local node is unavailable. -
Copy
environments/local.toml.exampletoenvironments/local.tomlto configure commands to run against a local node such as Ganache or ganache-cli.
Start syncing with postgres
Syncs VulcanizeDB with the configured Ethereum node, populating blocks, transactions, receipts, and logs. This command is useful when you want to maintain a broad cache of what's happening on the blockchain.
- Start Ethereum node (if fast syncing your Ethereum node, wait for initial sync to finish)
- In a separate terminal start VulcanizeDB:
./vulcanizedb sync --config <config.toml> --starting-block-number <block-number>
Alternatively, sync from Geth's underlying LevelDB
Sync VulcanizeDB from the LevelDB underlying a Geth node.
- Assure node is not running, and that it has synced to the desired block height.
- Start vulcanize_db
./vulcanizedb coldImport --config <config.toml> --starting-block-number <block-number> --ending-block-number <block-number>
- Optional flags:
--starting-block-number/-s: block number to start syncing from--ending-block-number/-e: block number to sync to--all/-a: sync all missing blocks
Alternatively, sync in "light" mode
Syncs VulcanizeDB with the configured Ethereum node, populating only block headers. This command is useful when you want a minimal baseline from which to track targeted data on the blockchain (e.g. individual smart contract storage values).
- Start Ethereum node
- In a separate terminal start VulcanizeDB:
./vulcanizedb lightSync --config <config.toml> --starting-block-number <block-number>
Backfill Auction event logs from light sync
Backfills auction event logs from the configured Ethereum node based on the populated block headers. This command requires that a light sync (see command above) has previously been run.
Since auction contracts have not yet been deployed, this command will need to be run a local blockchain at the moment. As such, a new environment file will need to be added. See environments/local.toml.example.
- Start Ethereum node
- In a separate terminal run the backfill command:
./vulcanizedb backfillAuctionLogs --config <config.toml>
Start full environment in docker by single command
Geth Rinkeby
| make command | description |
|---|---|
| rinkeby_env_up | start geth, postgres and rolling migrations, after migrations done starting vulcanizedb container |
| rinkeby_env_deploy | build and run vulcanizedb container in rinkeby environment |
| rinkeby_env_migrate | build and run rinkeby env migrations |
| rinkeby_env_down | stop and remove all rinkeby env containers |
Success run of the VulcanizeDB container require full geth state sync, attach to geth console and check sync state:
$ docker exec -it rinkeby_vulcanizedb_geth geth --rinkeby attach
...
> eth.syncing
false
If you have full rinkeby chaindata you can move it to rinkeby_vulcanizedb_geth_data docker volume to skip long wait of sync.
Running the Tests
make test- Note: requires Ganache chain setup and seeded with
flip-kick.jsandfrob.js(in that order)