Real-time json cache server for blockchain data
Note: Please use develop
branch for contributing.
Welcome to the server code for Giveth's dapp. The dapp uses feathers as a cache for its blockchain transactions. By utilizing websockets on both the blockchain and client devices, we can receive and push updates simultaneously to all users in real time.
If your operative system is any distrubution of linux you can use an All in One installation scripts special thanks to Dapp contributor Jurek Brisbane, available here along with a youtube video
git clone {paste your own repo link here}
cd feathers-giveth
npm install
yarn install
currently does not workmongod
or in the background mongod --fork --syslog
brew install redis
) redis-server
or in the background redis-server --daemonize yes
ipfsGateway
value to use a public ipfs gateway ex. https://ipfs.io/ipfs/, however your uploads will be removed at some pointThe feathers server will need to connect to an ethereum node via websockets. Typically this will be a local TestRPC instance.
The configuration param blockchain.nodeUrl
is used to establish a connection. The default nodeUrl is ws://localhost:8545
We need to deploy any contract to that we intend to call. NOTE: The following cmd will clear the data
dir, thus starting off in a clean state.
yarn deploy-local
After deploying local, make sure to copy-paste the MiniMeToken address in default.json
We provide an easy way to start the bridge & 2 ganache-cli instances. VERY IMPORTANT: this command enables Home Ganache and Foreign Ganache networks, if you are using MetaMask you will need to add a Custom RPC to your networks config,http://localhost:8546
will be Foreign Ganache, and Home Ganache is normally added by default which is http://localhost:8545
if needed.
yarn start:networks
Since the bridge & ganache-cli is now running, open a new terminal window and navigate to the same feathers-giveth directory.
Optionally open a new terminal window and start the ipfs daemon
ipfs daemon
Run db migration files ( if this the first time you want to start application, it's not needed to run migrations)
./node_modules/.bin/migrate-mongo up
Start your app
yarn start
If you run into errors like wallet balance not loading, it is very likely that Ganache is stuck
netstat -vanp tcp | grep 8545
Find the process that is listening on *.8545
and 127.0.0.1.8545
and kill it with kill -9 PID
(which is in the last colomn)
If the ipfsApi
is a valid ipfs node that we can connect to, we will pin every ipfs hash that is stored in feathers. We currently do not remove any orphaned (hashes with no references in feathers) ipfs hashs. In the future we will provide a script that you can run as a cronjob to unpin any orphaned hashes.
Video tutorial walkthrough here: https://tinyurl.com/y9lx6jrl
The feathers-giveth/scripts
directory contains a few scripts to help development.
deploy.js
- deploys a new vault & liquidPledging contract
getState.js
- prints the current state of the deployed vault & liquidPledging contracts.
confirm.js
- confirms any payments that are pending in the vault
makeUserAdmin.js
- make a user admin
Simply run yarn test
and all your tests in the /src
directory will be run.
It's included some integration tests so for running tests, you need to run a mongodb in your local system (on port 27017)
You can control the logging level with the LOG_LEVEL
env variable. Available levels can be found at: https://github.com/winstonjs/winston/tree/2.x#logging-levels
To enable debug logging simply start the server with LOG_LEVEL=debug yarn start
Each of these services are available via rest or websockets:
campaigns
communities
donations
donationsHistory
traces
uploads
users
emails
homePaymentsTransactions
subscriptions
If the server is using default configurations, you can see data for any of these services through your web browser at http://localhost:3030/SERVICE_NAME
PS: For accessing all features like creating communities
and campaigns
it's suggested to
make isAdmin
field true, for your user in you local MongoDb
We use docker-compose for orchestration of our docker containers in our production servers.
production.json
in config folderdocker-compose -f docker-compose-production.yml up -d
PS: It's good to see Github Actions config to better understanding of deploy structure
You will need to download the rsk node. After installing, you will run the node w/ the regtest
network for local development.
java -jar rskj-core-0.5.2-ORCHID-all.jar co.rsk.Start --regtest
or
java -Drsk.conf.file=rsk.conf -jar rskj-core-0.5.2-ORCHID-all.jar co.rsk.Start
We need to deploy any contracts that we intend to call. NOTE: You will also need to ensure that your rsk node is in a clean state (reset) for the configured addresses to be correct.
npm run deploy-local:rsk
Optionally open a new terminal window and start the ipfs daemon
ipfs daemon
Start your app
yarn start:rsk
The Audit log system logs every Create, Update, Patch and
Remove on Campaigns, Traces, Events, Users,
PledgeAdmins, Communities, Donations
For enabling audit log locally you should change enableAuditLog
in config to true
, then
And then after logging in localhost:5601
with user:elastic
, password: changeme
you can see the logs
This diagram demonstrates how donations are created and how status will be changed,
if you want to edit diagram just change https://mermaid.ink/img/
to https://mermaid-js.github.io/mermaid-live-editor/edit/#
in below link
A Solid arrow mean a new donation will be created after this action, and dotted arrows are used when existing donations are modified.
For more info on how to work with feathers checkout out their docs on service methods, service events, and database querying.
Also feel free to reach out to us on slack for any help or to share ideas.