## Contents: ### Smart Contracts and Metadata This project includes the following smart contracts and their metadata: - [Smart Contracts](./src) - Redistribution - Staking Registry - Price Oracle - Postage Stamps - HitchensOrderStatisticsTreeLib - Test Token - Metadata ([Testnet](./testnet_deployed.json),[Mainnet](./mainnet_deployed.json)) - **Chain ID**: Chain ID of the blockchain. - **Network ID**: Network ID. - **ABI**: Interface to communicate with smart contracts. - **Bytecode**: Compiled object code that is executed during communication with smart contract. - **Address**: Address of the deployed contract on blockchcain. - **Block**: Block height in which the transaction is mined. - **URL**: URL for analyzing the transaction. ### [Scripts](./scripts) - Script for deploying all and individual contracts - Script assigning roles/permissions for smart contracts - Redistributor roles ## Project Setup ### Prerequisites To set up the project, you will need `yarn` and `node`. The project has been tested with the latest node LTS (Erbium). A `.nvmrc` file is also provided. ### Setup To get started with this project, follow these steps: 1. Clone the repo. 2. Run `yarn install` at the root of the repo to install all dependencies. 3. Add a `.env` file in your root directory, where you'll store your sensitive information for deployment. An example file [`.env.example`](./.env.example) is provided for reference. ## Run ### [Tests](./test) - Unit Tests - Run `npm run test` to run all the tests. - Run `npm run test:coverage` to see the coverage of smart contracts. ### Deployments #### Remote ##### Prerequisites Consult devops/storage-incentives team for infura token or create one from [Infura website](https://infura.io/). ##### Steps 1. Run `npm run compile` to get all the contracts compiled. 2. Run `npm run test` to run all the tests. 3. Configure `.env` file - Add your wallet `Mnemonic` in `.env` file. - Add your `Infura` token in `.env` file. 4. To deploy all contracts and set roles: - Mainnet: `npm run deploy:mainnet` - Testnet: `npm run deploy:testnet` **Note:** After successfully deploying to mainnet or testnet the [mainnet_deployed.json](./mainnet_deployed.json) and [testnet_deployed.json](./testnet_deployed.json) will be automatically updated and those changes should be committed if intended. #### Local - Run `npm run deploy:hardhat` to deploy all contracts on hardhat environment(network). - To deploy on Ganache (or other networks): - Add network configuration in your [hardhat.config.ts](./hardhat.config.ts). ``` - ganache: { url: 'http://localhost:8545', chainId: 1337, }, ``` - To run: `npm run deploy ganache` #### Additional commands and flags: * Make necessary changes to [hardhat.config.ts](./hardhat.config.ts). * List of available configs can be found [here](https://hardhat.org/hardhat-runner/docs/config). * Run script `npx hardhat run <script> --network <network>` - **Network**: Configure network name - **Script**: Configure script name and path