| cmd | ||
| db | ||
| dockerfiles/rinkeby | ||
| environments | ||
| examples | ||
| integration_test | ||
| libraries/shared | ||
| pkg | ||
| scripts | ||
| test_config | ||
| utils | ||
| vendor | ||
| .gitignore | ||
| .private_blockchain_password | ||
| .travis.yml | ||
| Gopkg.lock | ||
| Gopkg.toml | ||
| LICENSE | ||
| main.go | ||
| Makefile | ||
| README.md | ||
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
go get gopkg.in/DataDog/dd-trace-go.v1/ddtrace
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
Create a migration file (up and down)
- ./script/create_migrate create_bite_table
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 Maker event logs from light sync
Backfills Maker event logs from the configured Ethereum node based on the populated block headers. This includes logs related to auctions, multi-collateral dai, and price feeds. This command requires that a light sync (see command above) has previously been run.
Since auction/mcd 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 backfillMakerLogs --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)