mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
Merge pull request #87 from Instadapp/feat/fix-testcases
feat/fix testcases
This commit is contained in:
commit
fd5e2dcba8
|
@ -53,6 +53,18 @@ abstract contract Helpers is DSMath, Basic {
|
|||
minAmt = convert18ToDec(token.decimals(), minAmt);
|
||||
}
|
||||
|
||||
function sortTokenAddress(address _token0, address _token1)
|
||||
internal
|
||||
view
|
||||
returns (address token0, address token1)
|
||||
{
|
||||
if (_token0 > _token1) {
|
||||
(token0, token1) = (_token1, _token0);
|
||||
} else {
|
||||
(token0, token1) = (_token0, _token1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Mint function which interact with Uniswap v3
|
||||
*/
|
||||
|
@ -83,6 +95,17 @@ abstract contract Helpers is DSMath, Basic {
|
|||
approve(_token0, address(nftManager), _amount0);
|
||||
approve(_token1, address(nftManager), _amount1);
|
||||
|
||||
{
|
||||
(address token0, ) = sortTokenAddress(
|
||||
address(_token0),
|
||||
address(_token1)
|
||||
);
|
||||
|
||||
if (token0 != address(_token0)) {
|
||||
(_token0, _token1) = (_token1, _token0);
|
||||
(_amount0, _amount1) = (_amount1, _amount0);
|
||||
}
|
||||
}
|
||||
uint256 _minAmt0 = getMinAmount(_token0, _amount0, params.slippage);
|
||||
uint256 _minAmt1 = getMinAmount(_token1, _amount1, params.slippage);
|
||||
|
||||
|
@ -139,7 +162,6 @@ abstract contract Helpers is DSMath, Basic {
|
|||
uint256 _amount0,
|
||||
uint256 _amount1
|
||||
) internal {
|
||||
|
||||
bool isEth0 = _token0 == wethAddr;
|
||||
bool isEth1 = _token1 == wethAddr;
|
||||
convertEthToWeth(isEth0, TokenInterface(_token0), _amount0);
|
||||
|
|
|
@ -11,6 +11,7 @@ const { utils } = require("ethers");
|
|||
|
||||
const PRIVATE_KEY = process.env.PRIVATE_KEY;
|
||||
const ALCHEMY_ID = process.env.ALCHEMY_ID;
|
||||
const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY;
|
||||
|
||||
if (!process.env.ALCHEMY_ID) {
|
||||
throw new Error("ENV Variable ALCHEMY_ID not set!");
|
||||
|
@ -26,7 +27,7 @@ module.exports = {
|
|||
version: "0.7.6",
|
||||
settings: {
|
||||
optimizer: {
|
||||
enabled: false,
|
||||
enabled: true,
|
||||
runs: 200,
|
||||
},
|
||||
},
|
||||
|
@ -53,13 +54,17 @@ module.exports = {
|
|||
timeout: 150000,
|
||||
gasPrice: parseInt(utils.parseUnits("30", "gwei")),
|
||||
},
|
||||
rinkeby: {
|
||||
url: `https://eth-rinkeby.alchemyapi.io/v2/${ALCHEMY_ID}`,
|
||||
accounts: [`0x${PRIVATE_KEY}`],
|
||||
timeout: 150000,
|
||||
},
|
||||
hardhat: {
|
||||
forking: {
|
||||
url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`,
|
||||
blockNumber: 12796965,
|
||||
blockNumber: 12696000,
|
||||
},
|
||||
blockGasLimit: 12000000,
|
||||
gasPrice: parseInt(utils.parseUnits("300", "gwei"))
|
||||
},
|
||||
matic: {
|
||||
url: "https://rpc-mainnet.maticvigil.com/",
|
||||
|
@ -83,7 +88,7 @@ module.exports = {
|
|||
}
|
||||
},
|
||||
etherscan: {
|
||||
apiKey: process.env.ETHERSCAN_API_KEY,
|
||||
apiKey: ETHERSCAN_API_KEY,
|
||||
},
|
||||
tenderly: {
|
||||
project: process.env.TENDERLY_PROJECT,
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
"coverage": "./node_modules/.bin/solidity-coverage",
|
||||
"check": "node status-checks/huskyCheck.js",
|
||||
"check-husky": "node status-checks/huskyCheck.js",
|
||||
"deploy": "node scripts/deployConnectorsFromCmd.js",
|
||||
"build-contracts": "sol-merger \"./contracts/connectors/mock.sol\" ./contracts/build"
|
||||
},
|
||||
"repository": {
|
||||
|
|
105
scripts/deployConnectorsFromCmd.js
Normal file
105
scripts/deployConnectorsFromCmd.js
Normal file
|
@ -0,0 +1,105 @@
|
|||
const fs = require("fs");
|
||||
const hre = require("hardhat");
|
||||
const { ethers } = hre;
|
||||
|
||||
let args = process.argv;
|
||||
args = args.splice(2, args.length);
|
||||
let params = {};
|
||||
|
||||
for (let i = 0; i < args.length; i += 2) {
|
||||
if (args[i][0] !== "-" || args[i][1] !== "-") {
|
||||
console.log("Please add '--' for the key");
|
||||
process.exit(-1);
|
||||
}
|
||||
let key = args[i].slice(2, args[i].length);
|
||||
params[key] = args[i + 1];
|
||||
}
|
||||
|
||||
if (!params.hasOwnProperty('connector')) {
|
||||
console.error("Should include connector params")
|
||||
process.exit(-1);
|
||||
}
|
||||
|
||||
if (!params.hasOwnProperty('network')) {
|
||||
console.error("Should include network params")
|
||||
process.exit(-1);
|
||||
}
|
||||
|
||||
if (!params.hasOwnProperty('gasPrice')) {
|
||||
console.error("Should include gas params")
|
||||
process.exit(-1);
|
||||
}
|
||||
|
||||
let privateKey = process.env.PRIVATE_KEY;
|
||||
let provider = new ethers.providers.JsonRpcProvider(hre.config.networks[params['network']].url);
|
||||
let wallet = new ethers.Wallet(privateKey, provider);
|
||||
|
||||
hre.network.name = params['networkName'];
|
||||
hre.network.config = hre.config.networks[params['networkName']];
|
||||
hre.network.provider = provider;
|
||||
let contracts = [];
|
||||
|
||||
const parseFile = async (filePath) => {
|
||||
const data = fs.readFileSync(filePath, "utf-8");
|
||||
let parsedData = data.split("contract ");
|
||||
parsedData = parsedData[parsedData.length - 1].split(" ");
|
||||
parsedData = parsedData[0];
|
||||
return parsedData;
|
||||
}
|
||||
|
||||
const parseDir = async (root, basePath, addPath) => {
|
||||
for(let i = 0; i < root.length; i++) {
|
||||
addPath = "/" + root[i];
|
||||
const dir = fs.readdirSync(basePath + addPath);
|
||||
if(dir.indexOf("main.sol") !== -1) {
|
||||
const fileData = await parseFile(basePath + addPath + "/main.sol");
|
||||
contracts.push(fileData)
|
||||
} else {
|
||||
await parseDir(dir, basePath + addPath, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const main = async () => {
|
||||
const mainnet = fs.readdirSync("./contracts/mainnet/connectors/");
|
||||
const polygon = fs.readdirSync("./contracts/polygon/connectors/");
|
||||
let basePathMainnet = "./contracts/mainnet/connectors/";
|
||||
let basePathPolygon = "./contracts/polygon/connectors/";
|
||||
|
||||
const connectorName = params['connector'];
|
||||
|
||||
await parseDir(mainnet, basePathMainnet, "");
|
||||
await parseDir(polygon, basePathPolygon, "");
|
||||
|
||||
if(contracts.indexOf(connectorName) === -1) {
|
||||
throw new Error("can not find the connector!\n" + "supported connector names are:\n" + contracts.join("\n"));
|
||||
}
|
||||
|
||||
const Connector = await ethers.getContractFactory(connectorName);
|
||||
const connector = await Connector.connect(wallet).deploy({ gasPrice: ethers.utils.parseUnits(params['gasPrice'], "gwei") });
|
||||
await connector.deployed();
|
||||
|
||||
console.log(`${connectorName} Deployed: ${connector.address}`);
|
||||
try {
|
||||
await hre.run("verify:verify", {
|
||||
address: connector.address,
|
||||
constructorArguments: []
|
||||
}
|
||||
)
|
||||
} catch (error) {
|
||||
console.log(`Failed to verify: ${connectorName}@${connector.address}`)
|
||||
console.log(error)
|
||||
}
|
||||
|
||||
return connector.address
|
||||
}
|
||||
|
||||
main()
|
||||
.then(() => {
|
||||
console.log("Done successfully");
|
||||
process.exit(0)
|
||||
})
|
||||
.catch(err => {
|
||||
console.log("error:", err);
|
||||
process.exit(1);
|
||||
})
|
|
@ -13,6 +13,8 @@ const constants = require("../../scripts/constant/constant");
|
|||
const addLiquidity = require("../../scripts/addLiquidity");
|
||||
const { ethers } = hre;
|
||||
|
||||
const ALCHEMY_ID = process.env.ALCHEMY_ID;
|
||||
|
||||
describe("Aave V1", function() {
|
||||
const connectorName = "AAVEV1-TEST-A";
|
||||
|
||||
|
@ -23,6 +25,18 @@ describe("Aave V1", function() {
|
|||
let masterSigner;
|
||||
|
||||
before(async () => {
|
||||
try {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 12796965,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
[wallet0, wallet1] = await ethers.getSigners();
|
||||
masterSigner = await getMasterSigner();
|
||||
instaConnectorsV2 = await ethers.getContractAt(
|
||||
|
@ -36,6 +50,9 @@ describe("Aave V1", function() {
|
|||
connectors: instaConnectorsV2,
|
||||
});
|
||||
console.log("Connector address", connector.address);
|
||||
} catch (err) {
|
||||
console.log("error", err);
|
||||
}
|
||||
});
|
||||
|
||||
it("should have contracts deployed", async () => {
|
||||
|
|
|
@ -23,6 +23,17 @@ describe("Aave V2", function() {
|
|||
let masterSigner;
|
||||
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 12796965,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
[wallet0, wallet1] = await ethers.getSigners();
|
||||
masterSigner = await getMasterSigner();
|
||||
instaConnectorsV2 = await ethers.getContractAt(
|
||||
|
|
|
@ -13,7 +13,7 @@ const abis = require("../../scripts/constant/abis");
|
|||
const constants = require("../../scripts/constant/constant");
|
||||
const tokens = require("../../scripts/constant/tokens");
|
||||
|
||||
const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/b.protocol/compound/main.sol/ConnectV1BCompound.json")
|
||||
const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/b.protocol/compound/main.sol/ConnectV2BCompound.json")
|
||||
|
||||
describe("B.Compound", function () {
|
||||
const connectorName = "B.COMPOUND-TEST-A"
|
||||
|
@ -26,6 +26,17 @@ describe("B.Compound", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13300000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
connector = await deployAndEnableConnector({
|
||||
|
|
|
@ -36,6 +36,17 @@ describe("B.Liquity", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 12996875,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
connector = await deployAndEnableConnector({
|
||||
|
|
|
@ -13,7 +13,7 @@ const abis = require("../../scripts/constant/abis");
|
|||
const constants = require("../../scripts/constant/constant");
|
||||
const tokens = require("../../scripts/constant/tokens");
|
||||
|
||||
const connectorMakerArtifacts = require("../../artifacts/contracts/mainnet/connectors/b.protocol/makerdao/main.sol/ConnectV1BMakerDAO.json")
|
||||
const connectorMakerArtifacts = require("../../artifacts/contracts/mainnet/connectors/b.protocol/makerdao/main.sol/ConnectV2BMakerDAO.json")
|
||||
|
||||
describe("B.Maker", function () {
|
||||
const connectorName = "B.MAKER-TEST-A"
|
||||
|
@ -30,6 +30,17 @@ describe("B.Maker", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 12696000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
connector = await deployAndEnableConnector({
|
||||
|
|
|
@ -38,6 +38,17 @@ describe("BASIC-ERC1155", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13300000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_impersonateAccount",
|
||||
params: [TOKEN_OWNER_ADDR],
|
||||
|
|
|
@ -38,6 +38,17 @@ describe("BASIC-ERC721", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13300000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_impersonateAccount",
|
||||
params: [TOKEN_OWNER_ADDR],
|
||||
|
|
|
@ -26,6 +26,17 @@ describe("Compound", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13300000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
connector = await deployAndEnableConnector({
|
||||
|
|
|
@ -27,6 +27,17 @@ describe("Instapool", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13300000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
connector = await deployAndEnableConnector({
|
||||
|
|
|
@ -21,6 +21,17 @@ describe("Liquity", () => {
|
|||
let liquity = null;
|
||||
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13300000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
liquity = await helpers.deployAndConnect(contracts, true);
|
||||
expect(liquity.troveManager.address).to.exist;
|
||||
expect(liquity.borrowerOperations.address).to.exist;
|
||||
|
|
|
@ -20,6 +20,17 @@ describe("Test InstaMapping contract", () => {
|
|||
const testRoleAddress = "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723";
|
||||
|
||||
before("get signers", async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 12796965,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
[account] = await ethers.getSigners();
|
||||
|
||||
const IndexContract = await ethers.getContractAt(
|
||||
|
@ -33,6 +44,11 @@ describe("Test InstaMapping contract", () => {
|
|||
params: [masterAddress],
|
||||
});
|
||||
|
||||
await network.provider.send("hardhat_setBalance", [
|
||||
masterAddress,
|
||||
"0x1000000000000000000000000",
|
||||
]);
|
||||
|
||||
instaMaster = await ethers.getSigner(masterAddress);
|
||||
});
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ const constants = require("../../scripts/constant/constant");
|
|||
const tokens = require("../../scripts/constant/tokens");
|
||||
const { abi: nftManagerAbi } = require("@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json")
|
||||
|
||||
const connectV2UniswapV3Artifacts = require("../../artifacts/contracts/mainnet/connectors/uniswapV3/main.sol/ConnectV2UniswapV3.json");
|
||||
const connectV2UniswapV3Artifacts = require("../../artifacts/contracts/mainnet/connectors/uniswap/v3/main.sol/ConnectV2UniswapV3.json");
|
||||
const { eth } = require("../../scripts/constant/tokens");
|
||||
const { BigNumber } = require("ethers");
|
||||
|
||||
|
@ -51,6 +51,17 @@ describe("UniswapV3", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13005785,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
nftManager = await ethers.getContractAt(nftManagerAbi, "0xC36442b4a4522E871399CD717aBDD847Ab11FE88");
|
||||
|
@ -112,13 +123,13 @@ describe("UniswapV3", function () {
|
|||
connector: connectorName,
|
||||
method: "mint",
|
||||
args: [
|
||||
DAI_ADDR,
|
||||
ethAddress,
|
||||
DAI_ADDR,
|
||||
FeeAmount.MEDIUM,
|
||||
getMinTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||||
getMaxTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||||
daiAmount,
|
||||
ethAmount,
|
||||
daiAmount,
|
||||
"500000000000000000",
|
||||
getIds,
|
||||
setId
|
||||
|
@ -184,7 +195,7 @@ describe("UniswapV3", function () {
|
|||
const data = await nftManager.positions(tokenIds[0])
|
||||
|
||||
expect(data.liquidity).to.be.equals(liquidities[0]);
|
||||
})
|
||||
}).timeout(10000000000);
|
||||
|
||||
it("Should deposit successfully", async function () {
|
||||
const daiAmount = ethers.utils.parseEther("400") // 1 ETH
|
||||
|
|
|
@ -48,6 +48,17 @@ describe("UniswapV3", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 13300000,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
nftManager = await ethers.getContractAt(nftManagerAbi, "0xC36442b4a4522E871399CD717aBDD847Ab11FE88");
|
||||
|
|
|
@ -32,6 +32,17 @@ describe("Yearn", function () {
|
|||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
before(async () => {
|
||||
await hre.network.provider.request({
|
||||
method: "hardhat_reset",
|
||||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: hre.config.networks.hardhat.forking.url,
|
||||
blockNumber: 12996975,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
connector = await deployAndEnableConnector({
|
||||
|
|
Loading…
Reference in New Issue
Block a user