Skip to content

Commit

Permalink
Deploy with hardhat ignition
Browse files Browse the repository at this point in the history
  • Loading branch information
brunoenten committed Jan 26, 2024
1 parent b8fe26c commit 18e801a
Show file tree
Hide file tree
Showing 27 changed files with 304 additions and 828 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ typechain
cache
artifacts
contracts/hardhat-dependency-compiler
ignition/deployments

.env.json

6 changes: 3 additions & 3 deletions contracts/Distributor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ contract Distributor is AccessManaged {
uint40 amount;
}

address public _tokenAddress;
address public _coinAddress;
address public immutable _tokenAddress;
address public immutable _coinAddress;
uint40[] public _TotalIncomes;
address private _previousAddress;
address private immutable _previousAddress;
mapping(address => Income) public _splitIncomes;

constructor(address manager, address tokenAddress, address coinAddress, address previousAddress) AccessManaged(manager) {
Expand Down
39 changes: 0 additions & 39 deletions contracts/IWhitelistToken.sol

This file was deleted.

26 changes: 24 additions & 2 deletions hardhat.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require("@nomicfoundation/hardhat-toolbox")
require("@nomicfoundation/hardhat-ignition-ethers");
require('hardhat-abi-exporter')
require("hardhat-interface-generator")
require("hardhat-dependency-compiler")
Expand All @@ -13,7 +14,7 @@ const forkingData = FORK_FUJI ? {
url: 'https://api.avax.network/ext/bc/C/rpc'
} : undefined

const APIKEY = vars.get('APIKEY', "")
const APIKEY = vars.get('APIKEY', "snowtrace")
const TESTNETACCOUNT = vars.get('TESTNETACCOUNT', "c1ff50a970e7529a24ad552bac0b8d68e75aec98520f397a60152e3b9052b9bf")
const MAINNETACCOUNT = vars.get('MAINNETACCOUNT', "c1ff50a970e7529a24ad552bac0b8d68e75aec98520f397a60152e3b9052b9bf")

Expand All @@ -22,8 +23,29 @@ const MAINNETACCOUNT = vars.get('MAINNETACCOUNT', "c1ff50a970e7529a24ad552bac0b8
*/
module.exports = {
etherscan: {
apiKey: APIKEY,
apiKey: {
avalancheFujiTestnet: APIKEY,
avalanche: APIKEY
}
},
customChains: [
{
network: "avalancheFujiTestnet",
chainId: 43113,
urls: {
apiURL: "https://api.routescan.io/v2/network/testnet/evm/43113/etherscan",
browserURL: "https://avalanche.testnet.routescan.io"
}
},
{
network: "avalanche",
chainId: 43114,
urls: {
apiURL: "https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan",
browserURL: "https://avalanche.routescan.io"
}
}
],
solidity: "0.8.20",
networks: {
hardhat: {
Expand Down
19 changes: 19 additions & 0 deletions ignition/modules/DistributorAggregator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
const { PREAPPROVEDWITHDRAWER, WITHDRAWER } = require("../../lib/roles")
const MCP = require("./MCP")

module.exports = buildModule("DistributorAggregator", (m) => {
const { accessManager } = m.useModule(MCP);

const aggregator = m.contract("DistributorAggregator", [accessManager])
m.call(accessManager, "grantRole", [PREAPPROVEDWITHDRAWER, aggregator, 0])
m.call(accessManager, "setTargetFunctionRole",[
aggregator,
[
ethers.id('withdraw(address[])').substring(0, 10)
],
WITHDRAWER
])

return { aggregator };
})
10 changes: 10 additions & 0 deletions ignition/modules/MCP.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
const { OWNER } = require("../../lib/roles")

module.exports = buildModule("MCP", (m) => {
let owner = m.getAccount(0)
const accessManager = m.contract("AccessManager", [owner]);
m.call(accessManager, "grantRole", [OWNER, owner, 0])

return { accessManager };
});
24 changes: 24 additions & 0 deletions ignition/modules/Retok.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
const aggregatorModule = require("./DistributorAggregator")
const fs = require("fs")
const path = require("node:path");

let distributorModules = []
fs.readdirSync(`${__dirname}/distributors`).forEach((file) => {
const importPath = "./distributors/" + path.basename(file, '.js')
distributorModules.push(require(importPath))
})

module.exports = buildModule("Retok", (m) => {

let distributors = []
for(let i=0; i< distributorModules.length; i++) {
let distributorModule = distributorModules[i]
let distributor = m.useModule(distributorModule)
distributors.push(distributor)
}

m.useModule(aggregatorModule)

return { distributors }
})
3 changes: 3 additions & 0 deletions ignition/modules/coins/CoinUSD.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const MCP = require("../MCP")
const { buildTokenModule } = require("../../../lib/buildTokenModule")
module.exports = buildTokenModule('USD Retok', 'USDRT', MCP)
6 changes: 6 additions & 0 deletions ignition/modules/distributors/DistributorFrance.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const MCP = require("../MCP")
const RTKFR = require("../tokens/TokenFrance")
const USDRT = require("../coins/CoinUSD")

const { buildDistributorModule } = require("../../../lib/buildDistributorModule")
module.exports = buildDistributorModule('RTKFR', MCP, RTKFR, USDRT)
6 changes: 6 additions & 0 deletions ignition/modules/distributors/DistributorIsrael.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const MCP = require("../MCP")
const RTKIL = require("../tokens/TokenIsrael")
const USDRT = require("../coins/CoinUSD")

const { buildDistributorModule } = require("../../../lib/buildDistributorModule")
module.exports = buildDistributorModule('RTKIL', MCP, RTKIL, USDRT)
6 changes: 6 additions & 0 deletions ignition/modules/distributors/DistributorSwitzerland.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const MCP = require("../MCP")
const RTKCH = require("../tokens/TokenSwitzerland")
const USDRT = require("../coins/CoinUSD")

const { buildDistributorModule } = require("../../../lib/buildDistributorModule")
module.exports = buildDistributorModule('RTKCH', MCP, RTKCH, USDRT)
5 changes: 5 additions & 0 deletions ignition/modules/distributors/DistributorUSD.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const MCP = require("../MCP")
const USDRT = require("../coins/CoinUSD")

const { buildDistributorModule } = require("../../../lib/buildDistributorModule")
module.exports = buildDistributorModule('USDRT', MCP, USDRT, USDRT)
3 changes: 3 additions & 0 deletions ignition/modules/tokens/TokenFrance.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const MCP = require("../MCP")
const { buildTokenModule } = require("../../../lib/buildTokenModule")
module.exports = buildTokenModule('Retok France', 'RTKFR', MCP)
3 changes: 3 additions & 0 deletions ignition/modules/tokens/TokenIsrael.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const MCP = require("../MCP")
const { buildTokenModule } = require("../../../lib/buildTokenModule")
module.exports = buildTokenModule('Retok Israel', 'RTKIL', MCP)
3 changes: 3 additions & 0 deletions ignition/modules/tokens/TokenSwitzerland.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const MCP = require("../MCP")
const { buildTokenModule } = require("../../../lib/buildTokenModule")
module.exports = buildTokenModule('Retok Switzerland', 'RTKCH', MCP)
11 changes: 11 additions & 0 deletions ignition/parameters.mainnet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"Distributor_RTKFR": {
"previousAddress": "0x701226c3eF10fADfB121FD11155181F06921F442"
},
"Distributor_RTKCH": {
"previousAddress": "0x64c262DE674779eB55B78f630B7c291c5ce150dc"
},
"Distributor_RTKIL": {
"previousAddress": "0x329dF41F2c3964b15c06B18E211749522b60ed62"
}
}
11 changes: 11 additions & 0 deletions ignition/parameters.testnet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"Distributor_RTKFR": {
"previousAddress": "0xCaE31bE9c35Ec291623B4647031d5616D48c4463"
},
"Distributor_RTKCH": {
"previousAddress": "0x142D1f208d6840ee30B6381F21759790411cfeD2"
},
"Distributor_RTKIL": {
"previousAddress": "0xCd54Aa34cfBFEBa74F4817984414ACA13803F6F4"
}
}
28 changes: 28 additions & 0 deletions lib/buildDistributorModule.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
const { OWNER } = require("./roles")

const buildDistributorModule = (symbol, mcpModule, tokenModule, coinModule) => {
return buildModule(`Distributor_${symbol}`, (m) => {
const { accessManager } = m.useModule(mcpModule)
const { token } = m.useModule(tokenModule)
const { token: coin } = m.useModule(coinModule)
const previousAddress = m.getParameter("previousAddress", ethers.ZeroAddress)

const distributor = m.contract("Distributor", [accessManager, token, coin, previousAddress])

// Add methods to accessManager
m.call(accessManager, "setTargetFunctionRole",
[
distributor,
[
ethers.id('burn(address,uint256,uint8)').substring(0, 10),
ethers.id('mintTo(address,uint256,uint8)').substring(0, 10)
],
OWNER
]
)
return { distributor }
})
}

module.exports = { buildDistributorModule: buildDistributorModule }
24 changes: 24 additions & 0 deletions lib/buildTokenModule.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
const { OWNER } = require("./roles")

const buildTokenModule = (name, symbol, mcp) => {
return buildModule(symbol, (m) => {
const { accessManager } = m.useModule(mcp);
const token = m.contract("SnapshotToken", [name, symbol, accessManager]);

// Add methods to accessManager
m.call(accessManager, "setTargetFunctionRole",
[
token,
[
ethers.id('burn(address,uint256,uint8)').substring(0, 10),
ethers.id('mintTo(address,uint256,uint8)').substring(0, 10)
],
OWNER
]
)
return { token }
})
}

module.exports = { buildTokenModule: buildTokenModule }
6 changes: 6 additions & 0 deletions lib/roles.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
OWNER: 10n,
WITHDRAWER: 20n,
PREAPPROVEDWITHDRAWER: 30n,
SNAPSHOOTER: 40n
}
Loading

0 comments on commit 18e801a

Please sign in to comment.