Skip to content

Commit

Permalink
respond to PR comments
Browse files Browse the repository at this point in the history
  • Loading branch information
livingrockrises committed Feb 4, 2024
1 parent f7825c8 commit 34e61c3
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 84 deletions.
12 changes: 4 additions & 8 deletions scripts/1-deploy-token-paymaster.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
DEPLOYMENT_SALTS,
encodeParam,
isContract,
delay,
} from "./utils";
import { Deployer, Deployer__factory } from "../typechain-types";

Expand All @@ -15,14 +16,6 @@ const verifyingSigner = process.env.PAYMASTER_SIGNER_ADDRESS_PROD || "";
const DEPLOYER_CONTRACT_ADDRESS =
process.env.DEPLOYER_CONTRACT_ADDRESS_PROD || "";

function delay(ms: number) {
return new Promise<void>((resolve) => {
setTimeout(() => {
resolve();
}, ms);
});
}

async function deployTokenPaymasterContract(
deployerInstance: Deployer,
earlyOwnerAddress: string
Expand Down Expand Up @@ -107,6 +100,9 @@ async function getPredeployedDeployerContractInstance(): Promise<Deployer> {
async function main() {
const accounts = await ethers.getSigners();
const earlyOwner = await accounts[0].getAddress();
if (earlyOwner === undefined) {
throw new Error("earlyOwner is undefined");
}

const deployerInstance = await getPredeployedDeployerContractInstance();
console.log("=========================================");
Expand Down
12 changes: 4 additions & 8 deletions scripts/8-deploy-sponsorship-paymaster.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
DEPLOYMENT_SALTS,
encodeParam,
isContract,
delay,
} from "./utils";
import { Deployer, Deployer__factory } from "../typechain-types";

Expand All @@ -16,14 +17,6 @@ const feeCollector = process.env.SPONSORSHIP_FEE_COLLECTOR_ADDRESS_PROD || "";
const DEPLOYER_CONTRACT_ADDRESS =
process.env.DEPLOYER_CONTRACT_ADDRESS_PROD || "";

function delay(ms: number) {
return new Promise<void>((resolve) => {
setTimeout(() => {
resolve();
}, ms);
});
}

async function deploySponsorshipPaymasterContract(
deployerInstance: Deployer,
earlyOwnerAddress: string
Expand Down Expand Up @@ -124,6 +117,9 @@ async function getPredeployedDeployerContractInstance(): Promise<Deployer> {
async function main() {
const accounts = await ethers.getSigners();
const earlyOwner = await accounts[0].getAddress();
if (earlyOwner === undefined) {
throw new Error("earlyOwner is undefined");
}

const deployerInstance = await getPredeployedDeployerContractInstance();
console.log("=========================================");
Expand Down
3 changes: 3 additions & 0 deletions scripts/gas-calcs/deploy-sample-paymaster.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ async function main() {
const accounts = await ethers.getSigners();

const earlyOwner = await accounts[0].getAddress();
if (earlyOwner === undefined) {
throw new Error("earlyOwner is undefined");
}
const verifyingSigner = "0x37ca4D86A0e33502F7CD93e0C88AFa2F172d39a1";
const entryPoint =
process.env.ENTRY_POINT_ADDRESS ||
Expand Down
111 changes: 61 additions & 50 deletions scripts/token-paymaster-v2/deploy-token-paymaster-mumbai.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
DEPLOYMENT_SALTS,
encodeParam,
isContract,
delay,
} from "../utils";
import {
BiconomyTokenPaymaster,
Expand All @@ -20,73 +21,80 @@ import { TokenConfig } from "../utils/Types";
const tokenConfig: TokenConfig = mumbaiConfigInfoProd;

const provider = ethers.provider;
const contractsDeployed: Record<string, string> = {};
const entryPointAddress =
process.env.ENTRY_POINT_ADDRESS ||
"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789";
const verifyingSigner = process.env.PAYMASTER_SIGNER_ADDRESS_PROD || "";
const DEPLOYER_CONTRACT_ADDRESS =
process.env.DEPLOYER_CONTRACT_ADDRESS_PROD || "";

function delay(ms: number) {
return new Promise<void>((resolve) => {
setTimeout(() => {
resolve();
}, ms);
});
}

async function deployTokenPaymasterContract(
export async function deployGeneric(
deployerInstance: Deployer,
earlyOwnerAddress: string
): Promise<string | undefined> {
salt: string,
bytecode: string,
contractName: string,
constructorArguments: any[]
): Promise<string> {
try {
const salt = ethers.utils.keccak256(
ethers.utils.toUtf8Bytes(DEPLOYMENT_SALTS.TOKEN_PAYMASTER_V2)
);
const derivedSalt = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(salt));
const computedAddress = await deployerInstance.addressOf(derivedSalt);

const BiconomyTokenPaymaster = await ethers.getContractFactory(
"BiconomyTokenPaymaster"
);
const tokenPaymasterBytecode = `${
BiconomyTokenPaymaster.bytecode
}${encodeParam("address", earlyOwnerAddress).slice(2)}${encodeParam(
"address",
entryPointAddress
).slice(2)}${encodeParam("address", verifyingSigner).slice(2)}`;

const tokenPaymasterComputedAddr = await deployerInstance.addressOf(salt);
console.log(
"Token paymaster Computed Address: ",
tokenPaymasterComputedAddr
);
const isContractDeployed = await isContract(
tokenPaymasterComputedAddr,
provider
);
if (!isContractDeployed) {
console.log(`${contractName} Computed Address: ${computedAddress}`);

const isDeployed = await isContract(computedAddress, provider); // true (deployed on-chain)
if (!isDeployed) {
await deployContract(
DEPLOYMENT_SALTS.TOKEN_PAYMASTER,
tokenPaymasterComputedAddr,
salt,
tokenPaymasterBytecode,
computedAddress,
derivedSalt,
bytecode,
deployerInstance
);
await delay(5000);
await run(`verify:verify`, {
address: tokenPaymasterComputedAddr,
constructorArguments: [
earlyOwnerAddress,
entryPointAddress,
verifyingSigner,
],
});
} else {
console.log(
"Token Paymaster is Already deployed with address ",
tokenPaymasterComputedAddr
`${contractName} is Already deployed with address ${computedAddress}`
);
}
return tokenPaymasterComputedAddr;

await delay(10000);

try {
await run("verify:verify", {
address: computedAddress,
constructorArguments,
});
} catch (err) {
console.log(err);
}

contractsDeployed[contractName] = computedAddress;

return computedAddress;
} catch (err) {
console.log(err);
return "";
}
}

async function deployTokenPaymasterContract(
deployerInstance: Deployer,
earlyOwnerAddress: string
): Promise<string | undefined> {
try {
const tokenPaymasterAddress = await deployGeneric(
deployerInstance,
DEPLOYMENT_SALTS.TOKEN_PAYMASTER_V2,
`${BiconomyTokenPaymaster__factory.bytecode}${encodeParam(
"address",
earlyOwnerAddress
).slice(2)}${encodeParam("address", entryPointAddress).slice(
2
)}${encodeParam("address", verifyingSigner).slice(2)}`,
"BiconomyTokenPaymasterV2",
[earlyOwnerAddress, entryPointAddress, verifyingSigner]
);
return tokenPaymasterAddress;
} catch (err) {
console.log(err);
}
Expand Down Expand Up @@ -171,6 +179,9 @@ async function getERC20TokenInstance(tokenAddress: string) {
async function main() {
const accounts = await ethers.getSigners();
const earlyOwner = await accounts[0].getAddress();
if (earlyOwner === undefined) {
throw new Error("earlyOwner is undefined");
}

const deployerInstance = await getPredeployedDeployerContractInstance();
console.log("=========================================");
Expand Down Expand Up @@ -198,7 +209,7 @@ async function main() {
for (const token of tokenConfig.tokens) {
// Note: In the config priceFeedAddress becomes the tokenOracleAddress
const {
symbol,
// symbol,
address,
nativeOracleAddress,
tokenOracleAddress,
Expand Down
12 changes: 4 additions & 8 deletions scripts/utils/Types.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
export interface TokenConfig {
tokens: Token[];
}

export interface Token {
address: string;
priceFeedAddress: string;
priceFeedFunction: string;
description: string;
nativeOracleAddress: string;
tokenOracleAddress: string;
symbol: string;
feedSalt: string;
derivedFeed: boolean;
// Add any other required properties for each token
}

export interface TokenConfig {
tokens: Token[];
}
21 changes: 11 additions & 10 deletions scripts/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
import { ethers as hardhatEthersInstance } from "hardhat";
import { BigNumber, BigNumberish, Contract, ethers } from "ethers";
import {
BigNumber,
BigNumberish,
Contract,
ethers,
Signer,
ContractFactory,
} from "ethers";
import {
getContractAddress,
arrayify,
hexConcat,
hexlify,
hexZeroPad,
keccak256,
Interface,
} from "ethers/lib/utils";
// eslint-disable-next-line node/no-extraneous-import
import { TransactionReceipt, Provider } from "@ethersproject/providers";
import { Deployer, Deployer__factory } from "../../typechain-types";

Expand All @@ -38,7 +31,7 @@ export enum DEPLOYMENT_SALTS { // PROD
ORACLE_AGGREGATOR = "PROD_CHAINLINK_ORACLE_AGGREGATOR_V0_27062023_UT8R11e", // 0x00000f7748595e46527413574a9327942e744e91
TOKEN_PAYMASTER = "PROD_TOKEN_PAYMASTER_V0_08072023_cONP4xM", // 0x00000f7365ca6c59a2c93719ad53d567ed49c14c

TOKEN_PAYMASTER_V2 = "PROD_TOKEN_PAYMASTER_V2_02012024_cONP4xM", // 0x00000f7365ca6c59a2c93719ad53d567ed49c14c
TOKEN_PAYMASTER_V2 = "PROD_TOKEN_PAYMASTER_V2_04022024_cONP4xM", // 0x00000f7365ca6c59a2c93719ad53d567ed49c14c

// when using deployer DEV
// ORACLE_AGGREGATOR = "DEVX_CHAINLINK_ORACLE_AGGREGATOR_V0_27062023_bBee55b", // 0x0000065b8abb967271817555f23945eedf08015c
Expand Down Expand Up @@ -289,6 +282,14 @@ export const deployContract = async (
return "0x";
};

export const delay = (ms: number) => {
return new Promise<void>((resolve) => {
setTimeout(() => {
resolve();
}, ms);
});
};

/**
* deploy a contract using our EIP-2470 deployer.
* The delpoyer is deployed (unless it is already deployed)
Expand Down

0 comments on commit 34e61c3

Please sign in to comment.