@api3/merkle-funder v0.6.0
merkle-funder
This repo contains contracts, scripts and a serverless function that can be used to send funds to addresses based on values from a configuration file
contracts- Smart contracts written in Solidity to manage funds sent to pre-defined addresses using a Merkle treedeploy- Deployment scripts for the hardhat-deploy plugin. Currently there is a single script that deploys the MerkleFunder contractdeployments- Parent directory for the hardhat-deploy script output. When MerkleFunder.sol is deployed to a new chain using this script, a new directory with the chain name will be addedscripts- Utility scripts to interact with the MerkleFunder contractsrc- Shared source code and the handler implementation for the serverless function
Prerequisites
- Node.js >= 18.x
- Yarn
Installation
yarn install --frozen-lockfileBuilding
yarn buildAdding a new chain
Deploy contracts
Run the following script to generate the example.env file:
yarn env-example:writeCopy example.env to
.envIn
.env, delete the lines that are related to chains that you will not use. Refer to @api3/chains for more information about the chains.In
.env, populate theMNEMONICvalue. This will be used by hardhat-deploy to deploy contracts and by the app you deploy to send transactions to execute fundings.In
.env, populate theFUNDER_RPC_URL_values. These will be used by the app you deploy.In
.env, populate theETHERSCAN_API_KEY_values. These will be used by hardhat-etherscan to verify the contracts you deploy.Copy config.example.json to
config.jsonand add a new entry using the chain ID as key for the objectDeploy
MerkleFunderby running:NETWORK=<chainAlias> yarn deploy:merkle-funderchainAliasmust match one from @api3/chainsDeploy all
MerkleFunderDepositorycontracts by running:NETWORK=<chainAlias> yarn deploy:merkle-funder-depositories
Send funds to recipients
After following all steps in previous section, and funding your MerkleFunderDepository contracts, run the following command:
yarn fund <chainName>This command will trigger funds to be sent to recipients defined in config.json
Deploy serverless function
Another way to trigger funds to be sent from a MerkleFunderDepository to a recipient address is to run the scheduled lambda function on a 1 minute interval
Configure your AWS credentials
Deploy the function by running:
yarn sls:deploy --stage <stageName>Make sure that your environment variables are defined in your
.envfile.
Remove serverless function
If you want to remove the function from AWS then run the following command:
yarn sls:remove --stage <stageName>Local development
- Start a local ethereum node by running
yarn hh:node The scripts can be then run using
localhostaschainNameFor example:yarn deploy:merkle-funder localhost yarn deploy:merkle-funder-depositories localhost yarn fund:merkle-funder-depositories localhost yarn fund localhostThere are 2 ways to test the lambda function locally:
yarn sls:local(uses serverless-offline plugin and this is the closest to actually deploying the function to AWS)yarn sls:invoke:fundHandler
In case you want to use different environment variables when testing this function locally then the easiest is to create a
.env.devfile which will have precedence over.envwhen executing either of the two commands. Another alternative is to create a.env.local(or.env.development, etc) and set the stage tolocal. For example:yarn sls:local --stage local