-
Notifications
You must be signed in to change notification settings - Fork 98
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #895 from fei-protocol/release/v2.12.0
Release/v2.12.0
- Loading branch information
Showing
156 changed files
with
6,080 additions
and
4,298 deletions.
There are no files selected for viewing
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# PR Type: Feature|Bug|Release | ||
|
||
# PR Title: A Fancy Title Here Please | ||
|
||
### PR Description: Replace this text with a description of the PR. It doesn't need to be a novel, but a few sentences should do. Probably about the length of this sample description; perhaps longer if there are enough details. By the way, make sure to delete the checklists not applicable below. Praise Vitalik. | ||
|
||
### PR Checklist - Feature (Proposal) | ||
|
||
- [ ] All Tests Passing | ||
- [ ] Proposal Added to ProposalsConfig | ||
- [ ] Fork Block Correct | ||
- [ ] Remove Any .only's on Tests | ||
- [ ] Update Documentation If Needed | ||
- [ ] Update Roles Config | ||
- [ ] Proposal Submitted | ||
|
||
### PR Checklist - Feature (Non-Proposal) | Bug | ||
|
||
- [ ] All Tests Passing | ||
- [ ] Remove Any .only's on Tests | ||
|
||
### PR Checklist - Release | ||
|
||
- [ ] All Tests Passing | ||
- [ ] Clean/Empty Proposals Config | ||
- [ ] Update Fork Block | ||
- [ ] Update Docs If Needed |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,57 +3,71 @@ | |
Smart contract code for Fei Protocol and the FEI stablecoin | ||
|
||
## To get started: | ||
|
||
1. Git clone this repo: git clone [email protected]:fei-protocol/fei-protocol-core.git | ||
2. Install dependencies: `npm install` | ||
3. Set the relevant environment variables in a gitignored `.env`: `MAINNET_ALCHEMY_API_KEY` and `ETH_PRIVATE_KEY`. You can use the `.env.example` as a base | ||
4. To run the Hardhat based unit tests, run `npm run test:hardhat` | ||
|
||
### Setting up Forge | ||
|
||
Fei makes use of Forge as a smart contract development framework alongside Hardhat. To set this up run: `npm run setup` | ||
|
||
## Dependencies | ||
Note that this has only been tested on Linux; you may encounter issues running on other operating systems. | ||
|
||
- Node v12 or v16 (you can manage Node versions easily with [NVM](https://github.com/nvm-sh/nvm)) | ||
|
||
Note that this has only been tested on Linux; you may encounter issues running on other operating systems. | ||
|
||
- Node v12 or v16 (you can manage Node versions easily with [NVM](https://github.com/nvm-sh/nvm)) | ||
|
||
## Usage | ||
- run `npm run test` to run Forge based unit tests | ||
- run `npm run test:hardhat` to run Hardhat based unit tests | ||
- run `npm run test:integration` to run Solidity integration tests, forked from a pinned Mainnet block | ||
- run `npm run test:integration:latest` to run Solidity integration tests, forked from the latest block | ||
- run `npm run test:e2e` to run end-to-end/integration tests | ||
- run `npm run test:all` to run all tests | ||
- run `npm run lint` to lint ts files and sol files | ||
- run `npm lint:all` to lint ts AND js files | ||
- run `npm run lint:sol` to lint .sol files | ||
- run `npm run lint:fix` to fix linting errors, if fixable automatically | ||
- run `npm run prettier:ts` to run prettier and automatically format all ts files | ||
automatically | ||
- run `npm run prettier:sol` to run prettier and automatically format all Solidity files | ||
automatically | ||
- run `npm run prettier` to run prettier and format all files | ||
- run `npm run coverage:hardhat` to run smart-contract coverage based off of all tests | ||
- run `npm run calldata` to generage calldata for a proposal | ||
- run `npm run check-proposal` to run tests for a specific dao proposal | ||
- run `npm run compile` to compile smart contracts, if needed | ||
|
||
- run `npm run test` to run Forge based unit tests | ||
- run `npm run test:hardhat` to run Hardhat based unit tests | ||
- run `npm run test:integration` to run Solidity integration tests, forked from a pinned Mainnet block | ||
- run `npm run test:integration:latest` to run Solidity integration tests, forked from the latest block | ||
- run `npm run test:e2e` to run end-to-end/integration tests | ||
- run `npm run test:all` to run all tests | ||
- run `npm run lint` to lint ts files and sol files | ||
- run `npm lint:all` to lint ts AND js files | ||
- run `npm run lint:sol` to lint .sol files | ||
- run `npm run lint:fix` to fix linting errors, if fixable automatically | ||
- run `npm run prettier:ts` to run prettier and automatically format all ts files | ||
automatically | ||
- run `npm run prettier:sol` to run prettier and automatically format all Solidity files | ||
automatically | ||
- run `npm run prettier` to run prettier and format all files | ||
- run `npm run coverage:hardhat` to run smart-contract coverage based off of all tests | ||
- run `npm run calldata` to generage calldata for a proposal | ||
- run `npm run check-proposal` to run tests for a specific dao proposal | ||
- run `npm run compile` to compile smart contracts, if needed | ||
|
||
## Documentation | ||
|
||
See the [docs](https://docs.fei.money) | ||
|
||
## Release Process | ||
|
||
Every Thursday, do the following for the weekly release: | ||
|
||
1) Update the current release branch's fixed hardhat block to something within the last hour | ||
2) Clean the release branch if necessary: | ||
### Release Fei-Protocol-Core | ||
|
||
1. Update the current release branch's fixed hardhat block to something within the last hour | ||
2. Clean the release branch if necessary: | ||
- fix any failing tests | ||
- clear out proposals-config | ||
3) Merge the release branch into master. Create a release via the github UI, using the version number of the release branch. | ||
4) Merge master back into develop to ensure that any fixes added are pulled back into develop, and so that the hardcoded fork block is set correctly for the most recent release. | ||
5) Create a new branch off of develop of the format release/major.minor.patch, using an incremented minor version number | ||
3. Merge the release branch into master. Create a release via the github UI, using the version number of the release branch. | ||
4. Merge master back into develop to ensure that any fixes added are pulled back into develop, and so that the hardcoded fork block is set correctly for the most recent release. | ||
5. Create a new branch off of develop of the format release/major.minor.patch, using an incremented minor version number | ||
|
||
For hotfix releases or bugfixes to master, branch off of master, add in the necessary fixes, and merge back into master. | ||
Then tag that commit with a new release number (increment the patch version number here). | ||
Finally merge master back into develop. | ||
|
||
### Release Docs (If Applicable) | ||
|
||
1. @Joey should update this, because I am confused about the difference between the gh-pages and the master branch. Which one should we update, | ||
and which one should we run commands on? Also, do we need to change the default branch of this repo? | ||
|
||
## License | ||
|
||
Fei Protocol is under [the AGPL v3 license](https://github.com/fei-protocol/fei-protocol-core/tree/7160dda163d45e6d6c7092ef021c365e0031a71f/LICENSE.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
14939000 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,4 +12,4 @@ | |
} | ||
} | ||
] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
// SPDX-License-Identifier: GPL-3.0-or-later | ||
// This program is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
|
||
// This program is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
|
||
// You should have received a copy of the GNU General Public License | ||
// along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
// See https://etherscan.io/address/0x239e55F427D44C3cc793f49bFB507ebe76638a2b | ||
|
||
pragma solidity ^0.8.4; | ||
|
||
interface IBalancerMinter { | ||
event Minted(address indexed recipient, address gauge, uint256 minted); | ||
|
||
/** | ||
* @notice Returns the address of the Balancer Governance Token | ||
*/ | ||
function getBalancerToken() external view returns (address); | ||
|
||
/** | ||
* @notice Returns the address of the Balancer Token Admin contract | ||
*/ | ||
function getBalancerTokenAdmin() external view returns (address); | ||
|
||
/** | ||
* @notice Returns the address of the Gauge Controller | ||
*/ | ||
function getGaugeController() external view returns (address); | ||
|
||
/** | ||
* @notice Mint everything which belongs to `msg.sender` and send to them | ||
* @param gauge `LiquidityGauge` address to get mintable amount from | ||
*/ | ||
function mint(address gauge) external returns (uint256); | ||
|
||
/** | ||
* @notice Mint everything which belongs to `msg.sender` across multiple gauges | ||
* @param gauges List of `LiquidityGauge` addresses | ||
*/ | ||
function mintMany(address[] calldata gauges) external returns (uint256); | ||
|
||
/** | ||
* @notice Mint tokens for `user` | ||
* @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf | ||
* @param gauge `LiquidityGauge` address to get mintable amount from | ||
* @param user Address to mint to | ||
*/ | ||
function mintFor(address gauge, address user) external returns (uint256); | ||
|
||
/** | ||
* @notice Mint tokens for `user` across multiple gauges | ||
* @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf | ||
* @param gauges List of `LiquidityGauge` addresses | ||
* @param user Address to mint to | ||
*/ | ||
function mintManyFor(address[] calldata gauges, address user) external returns (uint256); | ||
|
||
/** | ||
* @notice The total number of tokens minted for `user` from `gauge` | ||
*/ | ||
function minted(address user, address gauge) external view returns (uint256); | ||
|
||
/** | ||
* @notice Whether `minter` is approved to mint tokens for `user` | ||
*/ | ||
function getMinterApproval(address minter, address user) external view returns (bool); | ||
|
||
/** | ||
* @notice Set whether `minter` is approved to mint tokens on your behalf | ||
*/ | ||
function setMinterApproval(address minter, bool approval) external; | ||
|
||
/** | ||
* @notice Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing | ||
* them. | ||
*/ | ||
function setMinterApprovalWithSignature( | ||
address minter, | ||
bool approval, | ||
address user, | ||
uint256 deadline, | ||
uint8 v, | ||
bytes32 r, | ||
bytes32 s | ||
) external; | ||
|
||
// The below functions are near-duplicates of functions available above. | ||
// They are included for ABI compatibility with snake_casing as used in vyper contracts. | ||
// solhint-disable func-name-mixedcase | ||
|
||
/** | ||
* @notice Whether `minter` is approved to mint tokens for `user` | ||
*/ | ||
function allowed_to_mint_for(address minter, address user) external view returns (bool); | ||
|
||
/** | ||
* @notice Mint everything which belongs to `msg.sender` across multiple gauges | ||
* @dev This function is not recommended as `mintMany()` is more flexible and gas efficient | ||
* @param gauges List of `LiquidityGauge` addresses | ||
*/ | ||
function mint_many(address[8] calldata gauges) external; | ||
|
||
/** | ||
* @notice Mint tokens for `user` | ||
* @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf | ||
* @param gauge `LiquidityGauge` address to get mintable amount from | ||
* @param user Address to mint to | ||
*/ | ||
function mint_for(address gauge, address user) external; | ||
|
||
/** | ||
* @notice Toggle whether `minter` is approved to mint tokens for `user` | ||
*/ | ||
function toggle_approve_mint(address minter) external; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.