"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.spokePoolFixture = exports.zeroAddress = void 0;
exports.deploySpokePool = deploySpokePool;
var tslib_1 = require("tslib");
require("@nomiclabs/hardhat-ethers");
require("@openzeppelin/hardhat-upgrades");
require("hardhat-deploy");
var hardhat_1 = tslib_1.__importDefault(require("hardhat"));
var getContractFactory_1 = require("../utils/getContractFactory");
var constants_1 = require("../constants");
Object.defineProperty(exports, "zeroAddress", { enumerable: true, get: function () { return constants_1.zeroAddress; } });
function deploySpokePool(ethers_1) {
    return tslib_1.__awaiter(this, arguments, void 0, function (ethers, spokePoolName) {
        var _a, deployerWallet, crossChainAdmin, hubPool, weth, erc20, unwhitelistedErc20, destErc20, spokePool, _b, _c, erc1271;
        if (spokePoolName === void 0) { spokePoolName = "MockSpokePool"; }
        return tslib_1.__generator(this, function (_d) {
            switch (_d.label) {
                case 0: return [4, ethers.getSigners()];
                case 1:
                    _a = _d.sent(), deployerWallet = _a[0], crossChainAdmin = _a[1], hubPool = _a[2];
                    return [4, (0, getContractFactory_1.getContractFactory)("WETH9", deployerWallet)];
                case 2: return [4, (_d.sent()).deploy()];
                case 3:
                    weth = _d.sent();
                    return [4, (0, getContractFactory_1.getContractFactory)("ExpandedERC20", deployerWallet)];
                case 4: return [4, (_d.sent()).deploy("USD Coin", "USDC", 18)];
                case 5:
                    erc20 = _d.sent();
                    return [4, erc20.addMember(constants_1.TokenRolesEnum.MINTER, deployerWallet.address)];
                case 6:
                    _d.sent();
                    return [4, (0, getContractFactory_1.getContractFactory)("ExpandedERC20", deployerWallet)];
                case 7: return [4, (_d.sent()).deploy("Unwhitelisted", "UNWHITELISTED", 18)];
                case 8:
                    unwhitelistedErc20 = _d.sent();
                    return [4, unwhitelistedErc20.addMember(constants_1.TokenRolesEnum.MINTER, deployerWallet.address)];
                case 9:
                    _d.sent();
                    return [4, (0, getContractFactory_1.getContractFactory)("ExpandedERC20WithBlacklist", deployerWallet)];
                case 10: return [4, (_d.sent()).deploy("L2 USD Coin", "L2 USDC", 18)];
                case 11:
                    destErc20 = _d.sent();
                    return [4, destErc20.addMember(constants_1.TokenRolesEnum.MINTER, deployerWallet.address)];
                case 12:
                    _d.sent();
                    _c = (_b = hardhat_1.default.upgrades).deployProxy;
                    return [4, (0, getContractFactory_1.getContractFactory)(spokePoolName, deployerWallet)];
                case 13: return [4, _c.apply(_b, [_d.sent(), [0, crossChainAdmin.address, hubPool.address],
                        { kind: "uups", unsafeAllow: ["delegatecall"], constructorArgs: [weth.address] }])];
                case 14:
                    spokePool = _d.sent();
                    return [4, spokePool.setChainId(constants_1.destinationChainId)];
                case 15:
                    _d.sent();
                    return [4, (0, getContractFactory_1.getContractFactory)("MockERC1271", deployerWallet)];
                case 16: return [4, (_d.sent()).deploy(deployerWallet.address)];
                case 17:
                    erc1271 = _d.sent();
                    return [2, {
                            weth: weth,
                            erc20: erc20,
                            spokePool: spokePool,
                            unwhitelistedErc20: unwhitelistedErc20,
                            destErc20: destErc20,
                            erc1271: erc1271,
                        }];
            }
        });
    });
}
exports.spokePoolFixture = hardhat_1.default.deployments.createFixture(function (_a) { return tslib_1.__awaiter(void 0, [_a], void 0, function (_b) {
    var ethers = _b.ethers;
    return tslib_1.__generator(this, function (_c) {
        switch (_c.label) {
            case 0: return [4, deploySpokePool(ethers)];
            case 1: return [2, _c.sent()];
        }
    });
}); });
//# sourceMappingURL=SpokePool.Fixture.js.map