Add features to Alchemy interface
Following is the guide to start developing with Alchemy if you are using already supported schemes by client.js and subgraph. If you have created your own scheme contracts for your DAO, please refer to Add Custom Scheme support tutorial
Prerequisites¶
- docker >= 18.06.1-c
- docker-compose >= 1.22.0
- node >= 10.16.0
- npm >= 6.9.0
Overview¶
Alchemy uses Client.js for
- reading/inferencing blockchain data via DAOstack Subgraph
- writing/modifying state of Arc contracts
Interaction of Alchemy with rest of the stack

Boilerplate¶
1 2 3 | |
Setup Alchemy with Ganache (mode: development)¶
1 2 3 | |
The above commands will build docker images and start the following services locally:
- alchemy-server => for storing proposal information for quick access
- graph-node => for handling events from blockchain as described in subgraph
- ganache => dev blockchain with some test DAOs deployed and loaded with GEN and Eth
- subgraph-ipfs => subgraph mappings on ipfs node
- subgraph-postgres => db for caching events based on subgraph and later fetched via GraphQL
- redis => used by alchemy-server for sessions
- alchemy-postgres
Import test accounts that are setup with GEN and ETH to your metamask. You can get the account details by:
1 | |
Now your playground is ready for developing.
TODO: Currently webpack does not detect changes in all components and rebuilds only if top-level src/file is changed. For now you can touch the any file in top-level and this should trigger rebuild
NOTE:
- If the feature integration requires you to interact with outside contracts (e.g. uniswap widget integration might require uniswap contracts), then you can simply deploy those contracts to same
ganachecontainer using truffle or your own deployment script. - See
Client.jsdocumentation for more integration details
Setup Alchemy with Testnet (mode: staging)¶
Often Ganache does not behave same as production. If you want to setup Alchemy for interacting with testnet and check before you submit PR, then after the boilerplate steps -
Choose from one of the following setup for testnet to start playing/integrating features to Alchemy:
NOTE:
-
Alchemy only shows
daosthat are registered viaDAOregistryand tracked by DAOstack subgraph for the respective network. You can send the.jsonof your DAO details to us (contact Nave Rachman, telegram: @NaveRachman) and we will help you. -
Since above process of registering DAO takes up to 24hrs in following section we provide way to hack it during development and start your own graph-node
Use DAOstack rinkeby subgraph¶
Choose this when,
- using rinkeby testnet
-
working with existing whitelisted DAOs on DAOstack subgraph
-
Run alchemy-server
1
docker-compose up -d alchemy-server -
Start alchemy in staging mode
1
npm run start-staging
Run graph-node locally¶
Choose this when,
- working with any of the already supported Arc schemes by client & Alchemy
- playing with the DAO that is not yet tracked by DAOstack subgraph
Make following changes:
-
Clone subgraph repo and start-graph node locally
1 2 3
git clone git@github.com:daostack/subgraph.git cd subgraph npm i -
Setup
.envfile and run rinkeby graph node1 2 3 4 5 6 7 8
// Following are example values please change for customization network="rinkeby" subgraph="daostack" postgres_password="letmein" ethereum_node="https://rinkeby.infura.io/v3/e0cdf3bfda9b468fa908aa6ab03d5ba2" npm run docker:run-rinkeby -
Update your DAO details in
daos/rinkeby/<DAO-Name>.jsonand deploy subgraph1
npm run deploy '{ "migrationFile" : "../migration.json" }' -
Go back to
alchemyand Updatewebpack.dev.config.js, add following process variables1 2 3
'ARC_GRAPHQLHTTPPROVIDER': 'http://127.0.0.1:8000/subgraphs/name/daostack', 'ARC_GRAPHQLWSPROVIDER': 'ws://127.0.0.1:8001/subgraphs/name/daostack', 'ARC_IPFSPROVIDER': 'localhost'NOTE: If you changed name of
subgraphwhile setting up.envinstep 1then change it in this step accordingly -
Run alchemy-server
1
docker-compose up -d alchemy-server -
Start alchemy in staging mode
1
npm run start-staging