I want to ask one more thing ,
the solidity version of cloned uniswap is mostly on version 0.5.16 but the yield farming of sushi swap was made on 0.6.12 so I thought that just by including this version on hardhat config it would be good but it says :
The Solidity version pragma statement in these files don't match any of the configured compilers in your config. Change the pragma or configure additional compiler versions in your hardhat config.
* contracts/core/libraries/SafeMath.sol (=0.5.16)
* contracts/core/test/ERC20.sol (=0.5.16)
* contracts/core/libraries/UQ112x112.sol (=0.5.16)
These files import other files that use a different and incompatible version of Solidity:
* contracts/core/UniswapV2Pair.sol (=0.6.12) imports contracts/core/libraries/UQ112x112.sol (=0.5.16)
* contracts/core/UniswapV2ERC20.sol (=0.6.12) imports contracts/core/libraries/SafeMath.sol (=0.5.16)
These files depend on other files that use a different and incompatible version of Solidity:
* contracts/sushi/mocks/SushiSwapPairMock.sol (0.6.12) depends on contracts/core/libraries/UQ112x112.sol (=0.5.16) and contracts/core/libraries/SafeMath.sol (=0.5.16)
* contracts/sushi/SushiRoll.sol (0.6.12) depends on contracts/periphery/libraries/SafeMath.sol (=0.6.6)
* contracts/core/UniswapV2Factory.sol (=0.6.12) depends on contracts/core/libraries/UQ112x112.sol (=0.5.16) and contracts/core/libraries/SafeMath.sol (=0.5.16)
* contracts/sushi/mocks/SushiSwapFactoryMock.sol (0.6.12) depends on contracts/core/libraries/UQ112x112.sol (=0.5.16) and contracts/core/libraries/SafeMath.sol (=0.5.16)
To learn more, run the command again with --verbose
Read about compiler configuration at https://hardhat.org/config
so I thought to just change the version of the sol files of router and factory of uniswap , then it says
contracts/core/UniswapV2Pair.sol:38:5: TypeError: Overriding function is missing "override" specifier.
function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:40:5: Overridden function is here:
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
^-----------------------------------------------------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:66:5: TypeError: Overriding function is missing "override" specifier.
function initialize(address _token0, address _token1) external {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:51:5: Overridden function is here:
function initialize(address, address) external;
^---------------------------------------------^
contracts/core/UniswapV2Pair.sol:110:5: TypeError: Overriding function is missing "override" specifier.
function mint(address to) external lock returns (uint liquidity) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:45:5: Overridden function is here:
function mint(address to) external returns (uint liquidity);
^----------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:134:5: TypeError: Overriding function is missing "override" specifier.
function burn(address to) external lock returns (uint amount0, uint amount1) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:46:5: Overridden function is here:
function burn(address to) external returns (uint amount0, uint amount1);
^----------------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:159:5: TypeError: Overriding function is missing "override" specifier.
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:47:5: Overridden function is here:
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
^----------------------------------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:190:5: TypeError: Overriding function is missing "override" specifier.
function skim(address to) external lock {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:48:5: Overridden function is here:
function skim(address to) external;
^---------------------------------^
contracts/core/UniswapV2Pair.sol:198:5: TypeError: Overriding function is missing "override" specifier.
function sync() external lock {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:49:5: Overridden function is here:
function sync() external;
^-----------------------^
contracts/core/UniswapV2Pair.sol:15:5: TypeError: Overriding public state variable is missing "override" specifier.
uint public constant MINIMUM_LIQUIDITY = 10**3;
^--------------------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:36:5: Overridden public state variable is here:
function MINIMUM_LIQUIDITY() external pure returns (uint);
^--------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:18:5: TypeError: Overriding public state variable is missing "override" specifier.
address public factory;
^--------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:37:5: Overridden public state variable is here:
function factory() external view returns (address);
^-------------------------------------------------^
contracts/core/UniswapV2Pair.sol:19:5: TypeError: Overriding public state variable is missing "override" specifier.
address public token0;
^-------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:38:5: Overridden public state variable is here:
function token0() external view returns (address);
^------------------------------------------------^
contracts/core/UniswapV2Pair.sol:20:5: TypeError: Overriding public state variable is missing "override" specifier.
address public token1;
^-------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:39:5: Overridden public state variable is here:
function token1() external view returns (address);
^------------------------------------------------^
contracts/core/UniswapV2Pair.sol:26:5: TypeError: Overriding public state variable is missing "override" specifier.
uint public price0CumulativeLast;
^------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:41:5: Overridden public state variable is here:
function price0CumulativeLast() external view returns (uint);
^-----------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:27:5: TypeError: Overriding public state variable is missing "override" specifier.
uint public price1CumulativeLast;
^------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:42:5: Overridden public state variable is here:
function price1CumulativeLast() external view returns (uint);
^-----------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:28:5: TypeError: Overriding public state variable is missing "override" specifier.
uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event
^---------------^
contracts/core/interfaces/IUniswapV2Pair.sol:43:5: Overridden public state variable is here:
function kLast() external view returns (uint);
^--------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "DOMAIN_SEPARATOR". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:19:5: Definition in "UniswapV2ERC20":
bytes32 public DOMAIN_SEPARATOR;
^-----------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:18:5: Definition in "IUniswapV2Pair":
function DOMAIN_SEPARATOR() external view returns (bytes32);
^----------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "PERMIT_TYPEHASH". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:21:5: Definition in "UniswapV2ERC20":
bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
^----------------------------------------------------------------------------------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:19:5: Definition in "IUniswapV2Pair":
function PERMIT_TYPEHASH() external pure returns (bytes32);
^---------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "allowance". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:17:5: Definition in "UniswapV2ERC20":
mapping(address => mapping(address => uint)) public allowance;
^-----------------------------------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:12:5: Definition in "IUniswapV2Pair":
function allowance(address owner, address spender) external view returns (uint);
^------------------------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "approve". Two or more base classes define function with same name and parameter types.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:66:5: Definition in "UniswapV2ERC20":
function approve(address spender, uint value) external returns (bool) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:14:5: Definition in "IUniswapV2Pair":
function approve(address spender, uint value) external returns (bool);
^--------------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "balanceOf". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:16:5: Definition in "UniswapV2ERC20":
mapping(address => uint) public balanceOf;
^---------------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:11:5: Definition in "IUniswapV2Pair":
function balanceOf(address owner) external view returns (uint);
^-------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "decimals". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:14:5: Definition in "UniswapV2ERC20":
uint8 public constant decimals = 18;
^---------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:9:5: Definition in "IUniswapV2Pair":
function decimals() external pure returns (uint8);
^------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "name". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:12:5: Definition in "UniswapV2ERC20":
string public constant name = 'Uniswap V2';
^----------------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:7:5: Definition in "IUniswapV2Pair":
function name() external pure returns (string memory);
^----------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "nonces". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:22:5: Definition in "UniswapV2ERC20":
mapping(address => uint) public nonces;
^------------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:20:5: Definition in "IUniswapV2Pair":
function nonces(address owner) external view returns (uint);
^----------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "permit". Two or more base classes define function with same name and parameter types.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:84:5: Definition in "UniswapV2ERC20":
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:22:5: Definition in "IUniswapV2Pair":
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
^-----------------------------------------------------------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "symbol". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:13:5: Definition in "UniswapV2ERC20":
string public constant symbol = 'UNI-V2';
^--------------------------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:8:5: Definition in "IUniswapV2Pair":
function symbol() external pure returns (string memory);
^------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "totalSupply". Two or more base classes define function with same name and parameter types. Since one of the bases defines a public state variable which cannot be overridden, you have to change the inheritance layout or the names of the functions.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:15:5: Definition in "UniswapV2ERC20":
uint public totalSupply;
^----------------------^
contracts/core/interfaces/IUniswapV2Pair.sol:10:5: Definition in "IUniswapV2Pair":
function totalSupply() external view returns (uint);
^--------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "transfer". Two or more base classes define function with same name and parameter types.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:71:5: Definition in "UniswapV2ERC20":
function transfer(address to, uint value) external returns (bool) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:15:5: Definition in "IUniswapV2Pair":
function transfer(address to, uint value) external returns (bool);
^----------------------------------------------------------------^
contracts/core/UniswapV2Pair.sol:11:1: TypeError: Derived contract must override function "transferFrom". Two or more base classes define function with same name and parameter types.
contract UniswapV2Pair is IUniswapV2Pair, UniswapV2ERC20 {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/UniswapV2ERC20.sol:76:5: Definition in "UniswapV2ERC20":
function transferFrom(address from, address to, uint value) external returns (bool) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Pair.sol:16:5: Definition in "IUniswapV2Pair":
function transferFrom(address from, address to, uint value) external returns (bool);
^----------------------------------------------------------------------------------^
contracts/core/UniswapV2Factory.sol:21:5: TypeError: Overriding function is missing "override" specifier.
function allPairsLength() external view returns (uint) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Factory.sol:12:5: Overridden function is here:
function allPairsLength() external view returns (uint);
^-----------------------------------------------------^
contracts/core/UniswapV2Factory.sol:25:5: TypeError: Overriding function is missing "override" specifier.
function createPair(address tokenA, address tokenB) external returns (address pair) {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Factory.sol:14:5: Overridden function is here:
function createPair(address tokenA, address tokenB) external returns (address pair);
^----------------------------------------------------------------------------------^
contracts/core/UniswapV2Factory.sol:42:5: TypeError: Overriding function is missing "override" specifier.
function setFeeTo(address _feeTo) external {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Factory.sol:16:5: Overridden function is here:
function setFeeTo(address) external;
^----------------------------------^
contracts/core/UniswapV2Factory.sol:47:5: TypeError: Overriding function is missing "override" specifier.
function setFeeToSetter(address _feeToSetter) external {
^ (Relevant source part starts here and spans across multiple lines).
contracts/core/interfaces/IUniswapV2Factory.sol:17:5: Overridden function is here:
function setFeeToSetter(address) external;
^----------------------------------------^
contracts/core/UniswapV2Factory.sol:9:5: TypeError: Overriding public state variable is missing "override" specifier.
address public feeTo;
^------------------^
contracts/core/interfaces/IUniswapV2Factory.sol:7:5: Overridden public state variable is here:
function feeTo() external view returns (address);
^-----------------------------------------------^
contracts/core/UniswapV2Factory.sol:10:5: TypeError: Overriding public state variable is missing "override" specifier.
address public feeToSetter;
^------------------------^
contracts/core/interfaces/IUniswapV2Factory.sol:8:5: Overridden public state variable is here:
function feeToSetter() external view returns (address);
^-----------------------------------------------------^
contracts/core/UniswapV2Factory.sol:12:5: TypeError: Overriding public state variable is missing "override" specifier.
mapping(address => mapping(address => address)) public getPair;
^------------------------------------------------------------^
contracts/core/interfaces/IUniswapV2Factory.sol:10:5: Overridden public state variable is here:
function getPair(address tokenA, address tokenB) external view returns (address pair);
^------------------------------------------------------------------------------------^
contracts/core/UniswapV2Factory.sol:13:5: TypeError: Overriding public state variable is missing "override" specifier.
address[] public allPairs;
^-----------------------^
contracts/core/interfaces/IUniswapV2Factory.sol:11:5: Overridden public state variable is here:
function allPairs(uint) external view returns (address pair);
^-----------------------------------------------------------^
Error HH600: Compilation failed
For more info go to https://hardhat.org/HH600 or run Hardhat with --show-stack-traces
Now there are lot of missing override problems .