Set desired price in Uniswap V2 pools. Inspired by the Pathway protocol.
Smart contract documentation is here.
The setRatio(targetBase, targetQuote)
method will burn available liquidity tokens, perform several swaps to move the price, and add liquidity back to the pool. The size of base
reserve remains constant before and after the calibration.
The estimate(targetBase, targetQuote)
method will report resources required for calibration.
Note If you use nix, run
nix develop
to install all dependencies in PATH
You'll need to install nodejs >= 18.15.0. We use yarn but npm should work too. You'll also need to install foundry and solc. Assuming that's done, run yarn
with no args:
yarn
To compile the contracts:
yarn compile
To run both foundry and hardhat tests:
yarn test
To run the linter in the default mode, where it will print all errors and not modify code, run:
yarn lint
We use the solidity-coverage package to generate coverage reports for hardhat in coverage/
and forge coverage for foundry tests in coverage-foundry
.
You can generate the coverage reports locally by running:
yarn coverage
yarn hardhat coverage
The full reports can be viewed by opening the coverage/index.html
and coverage-foundry/index.html
files in a browser.
Enter your private key to the .env
file from .env.example
template. Double-check the deploy script and run:
yarn hardhat run scripts/deploy.js
You can deploy to your network of choice by modifying hardhat.config.ts
and adding the flag --network yourNetwork
to the invocation.
yourNetwork: {
url: "https://example.com",
accounts: [PRIVATE_KEY],
},
To verify the source code with a network explorer, it's best to generate json metadata.
yarn hardhat solidity-json
Choose Standard-Json-Input
in the explorer verification dialog and upload json from artifacts/solidity-json/contracts/Calibrator.sol.json
.