@latticexyz/cli 2.0.0-next.10 → 2.0.0-next.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -1
- package/dist/mud.js +23 -13
- package/dist/mud.js.map +1 -1
- package/package.json +17 -13
- package/src/commands/deploy.ts +7 -30
- package/src/commands/dev-contracts.ts +74 -138
- package/src/commands/set-version.ts +19 -60
- package/src/commands/test.ts +30 -36
- package/src/commands/trace.ts +7 -5
- package/src/common.ts +1 -0
- package/src/debug.ts +3 -0
- package/src/deploy/assertNamespaceOwner.ts +42 -0
- package/src/deploy/common.ts +72 -0
- package/src/deploy/configToTables.ts +68 -0
- package/src/deploy/create2/README.md +9 -0
- package/src/deploy/create2/deployment.json +7 -0
- package/src/deploy/debug.ts +3 -0
- package/src/deploy/deploy.ts +108 -0
- package/src/deploy/deployWorld.ts +33 -0
- package/src/deploy/ensureContract.ts +49 -0
- package/src/deploy/ensureContractsDeployed.ts +25 -0
- package/src/deploy/ensureDeployer.ts +36 -0
- package/src/deploy/ensureFunctions.ts +86 -0
- package/src/deploy/ensureModules.ts +72 -0
- package/src/deploy/ensureSystems.ts +161 -0
- package/src/deploy/ensureTables.ts +65 -0
- package/src/deploy/ensureWorldFactory.ts +34 -0
- package/src/deploy/getFunctions.ts +58 -0
- package/src/deploy/getResourceAccess.ts +51 -0
- package/src/deploy/getResourceIds.ts +31 -0
- package/src/deploy/getSystems.ts +48 -0
- package/src/deploy/getTableValue.ts +30 -0
- package/src/deploy/getTables.ts +59 -0
- package/src/deploy/getWorldDeploy.ts +39 -0
- package/src/deploy/logsToWorldDeploy.ts +49 -0
- package/src/deploy/resolveConfig.ts +154 -0
- package/src/deploy/resourceLabel.ts +3 -0
- package/src/index.ts +1 -1
- package/src/mudPackages.ts +24 -0
- package/src/runDeploy.ts +128 -0
- package/src/utils/modules/constants.ts +1 -2
- package/src/utils/utils/getContractData.ts +2 -5
- package/dist/chunk-TW3YGZ4D.js +0 -11
- package/dist/chunk-TW3YGZ4D.js.map +0 -1
- package/src/utils/deploy.ts +0 -254
- package/src/utils/deployHandler.ts +0 -93
- package/src/utils/modules/getInstallModuleCallData.ts +0 -27
- package/src/utils/modules/getUserModules.ts +0 -5
- package/src/utils/modules/types.ts +0 -14
- package/src/utils/systems/getGrantAccessCallData.ts +0 -29
- package/src/utils/systems/getRegisterFunctionSelectorsCallData.ts +0 -57
- package/src/utils/systems/getRegisterSystemCallData.ts +0 -17
- package/src/utils/systems/types.ts +0 -9
- package/src/utils/systems/utils.ts +0 -42
- package/src/utils/tables/getRegisterTableCallData.ts +0 -49
- package/src/utils/tables/getTableIds.ts +0 -18
- package/src/utils/tables/types.ts +0 -12
- package/src/utils/utils/confirmNonce.ts +0 -24
- package/src/utils/utils/deployContract.ts +0 -33
- package/src/utils/utils/fastTxExecute.ts +0 -56
- package/src/utils/utils/getChainId.ts +0 -10
- package/src/utils/utils/setInternalFeePerGas.ts +0 -49
- package/src/utils/utils/types.ts +0 -21
- package/src/utils/world.ts +0 -28
@@ -1,33 +0,0 @@
|
|
1
|
-
import chalk from "chalk";
|
2
|
-
import { ethers } from "ethers";
|
3
|
-
import { MUDError } from "@latticexyz/common/errors";
|
4
|
-
import { TxConfig, ContractCode } from "./types";
|
5
|
-
|
6
|
-
export async function deployContract(input: TxConfig & { nonce: number; contract: ContractCode }): Promise<string> {
|
7
|
-
const { signer, nonce, maxPriorityFeePerGas, maxFeePerGas, debug, gasPrice, confirmations, contract } = input;
|
8
|
-
|
9
|
-
try {
|
10
|
-
const factory = new ethers.ContractFactory(contract.abi, contract.bytecode, signer);
|
11
|
-
console.log(chalk.gray(`executing deployment of ${contract.name} with nonce ${nonce}`));
|
12
|
-
const deployPromise = factory
|
13
|
-
.deploy({
|
14
|
-
nonce,
|
15
|
-
maxPriorityFeePerGas,
|
16
|
-
maxFeePerGas,
|
17
|
-
gasPrice,
|
18
|
-
})
|
19
|
-
.then((c) => (confirmations ? c : c.deployed()));
|
20
|
-
const { address } = await deployPromise;
|
21
|
-
console.log(chalk.green("Deployed", contract.name, "to", address));
|
22
|
-
return address;
|
23
|
-
} catch (error: any) {
|
24
|
-
if (debug) console.error(error);
|
25
|
-
if (error?.message.includes("invalid bytecode")) {
|
26
|
-
throw new MUDError(
|
27
|
-
`Error deploying ${contract.name}: invalid bytecode. Note that linking of public libraries is not supported yet, make sure none of your libraries use "external" functions.`
|
28
|
-
);
|
29
|
-
} else if (error?.message.includes("CreateContractLimit")) {
|
30
|
-
throw new MUDError(`Error deploying ${contract.name}: CreateContractLimit exceeded.`);
|
31
|
-
} else throw error;
|
32
|
-
}
|
33
|
-
}
|
@@ -1,56 +0,0 @@
|
|
1
|
-
import chalk from "chalk";
|
2
|
-
import { TransactionReceipt, TransactionResponse } from "@ethersproject/providers";
|
3
|
-
import { MUDError } from "@latticexyz/common/errors";
|
4
|
-
import { TxConfig } from "./types";
|
5
|
-
|
6
|
-
/**
|
7
|
-
* Only await gas estimation (for speed), only execute if gas estimation succeeds (for safety)
|
8
|
-
*/
|
9
|
-
export async function fastTxExecute<
|
10
|
-
C extends { connect: any; estimateGas: any; [key: string]: any },
|
11
|
-
F extends keyof C
|
12
|
-
>(
|
13
|
-
input: TxConfig & {
|
14
|
-
nonce: number;
|
15
|
-
contract: C;
|
16
|
-
func: F;
|
17
|
-
args: Parameters<C[F]>;
|
18
|
-
confirmations: number;
|
19
|
-
}
|
20
|
-
): Promise<TransactionResponse | TransactionReceipt> {
|
21
|
-
const {
|
22
|
-
func,
|
23
|
-
args,
|
24
|
-
contract,
|
25
|
-
signer,
|
26
|
-
nonce,
|
27
|
-
maxPriorityFeePerGas,
|
28
|
-
maxFeePerGas,
|
29
|
-
gasPrice,
|
30
|
-
confirmations = 1,
|
31
|
-
debug,
|
32
|
-
} = input;
|
33
|
-
const functionName = `${func as string}(${args.map((arg) => `'${arg}'`).join(",")})`;
|
34
|
-
try {
|
35
|
-
const contractWithSigner = contract.connect(signer);
|
36
|
-
const gasLimit = await contractWithSigner.estimateGas[func].apply(null, args);
|
37
|
-
console.log(chalk.gray(`executing transaction: ${functionName} with nonce ${nonce}`));
|
38
|
-
return contractWithSigner[func]
|
39
|
-
.apply(null, [
|
40
|
-
...args,
|
41
|
-
{
|
42
|
-
gasLimit,
|
43
|
-
nonce: nonce,
|
44
|
-
maxPriorityFeePerGas: maxPriorityFeePerGas,
|
45
|
-
maxFeePerGas: maxFeePerGas,
|
46
|
-
gasPrice: gasPrice,
|
47
|
-
},
|
48
|
-
])
|
49
|
-
.then((tx: TransactionResponse) => {
|
50
|
-
return confirmations === 0 ? tx : tx.wait(confirmations);
|
51
|
-
});
|
52
|
-
} catch (error: any) {
|
53
|
-
if (debug) console.error(error);
|
54
|
-
throw new MUDError(`Gas estimation error for ${functionName}: ${error?.reason}`);
|
55
|
-
}
|
56
|
-
}
|
@@ -1,10 +0,0 @@
|
|
1
|
-
import { ethers } from "ethers";
|
2
|
-
|
3
|
-
// TODO: Use viem's getChainId
|
4
|
-
export async function getChainId(rpc: string) {
|
5
|
-
const { result: chainId } = await ethers.utils.fetchJson(
|
6
|
-
rpc,
|
7
|
-
'{ "id": 42, "jsonrpc": "2.0", "method": "eth_chainId", "params": [ ] }'
|
8
|
-
);
|
9
|
-
return Number(chainId);
|
10
|
-
}
|
@@ -1,49 +0,0 @@
|
|
1
|
-
import { BigNumber, Wallet } from "ethers";
|
2
|
-
import { MUDError } from "@latticexyz/common/errors";
|
3
|
-
|
4
|
-
/**
|
5
|
-
* Set the maxFeePerGas and maxPriorityFeePerGas based on the current base fee and the given multiplier.
|
6
|
-
* The multiplier is used to allow replacing pending transactions.
|
7
|
-
* @param multiplier Multiplier to apply to the base fee
|
8
|
-
*/
|
9
|
-
export async function setInternalFeePerGas(
|
10
|
-
signer: Wallet,
|
11
|
-
multiplier: number
|
12
|
-
): Promise<{
|
13
|
-
maxPriorityFeePerGas: number | undefined;
|
14
|
-
maxFeePerGas: BigNumber | undefined;
|
15
|
-
gasPrice: BigNumber | undefined;
|
16
|
-
}> {
|
17
|
-
// Compute maxFeePerGas and maxPriorityFeePerGas like ethers, but allow for a multiplier to allow replacing pending transactions
|
18
|
-
const feeData = await signer.provider.getFeeData();
|
19
|
-
let maxPriorityFeePerGas: number | undefined;
|
20
|
-
let maxFeePerGas: BigNumber | undefined;
|
21
|
-
let gasPrice: BigNumber | undefined;
|
22
|
-
|
23
|
-
if (feeData.lastBaseFeePerGas) {
|
24
|
-
if (!feeData.lastBaseFeePerGas.eq(0) && (await signer.getBalance()).eq(0)) {
|
25
|
-
throw new MUDError(`Attempting to deploy to a chain with non-zero base fee with an account that has no balance.
|
26
|
-
If you're deploying to the Lattice testnet, you can fund your account by running 'pnpm mud faucet --address ${await signer.getAddress()}'`);
|
27
|
-
}
|
28
|
-
|
29
|
-
// Set the priority fee to 0 for development chains with no base fee, to allow transactions from unfunded wallets
|
30
|
-
maxPriorityFeePerGas = feeData.lastBaseFeePerGas.eq(0) ? 0 : Math.floor(1_500_000_000 * multiplier);
|
31
|
-
maxFeePerGas = feeData.lastBaseFeePerGas.mul(2).add(maxPriorityFeePerGas);
|
32
|
-
} else if (feeData.gasPrice) {
|
33
|
-
// Legacy chains with gasPrice instead of maxFeePerGas
|
34
|
-
if (!feeData.gasPrice.eq(0) && (await signer.getBalance()).eq(0)) {
|
35
|
-
throw new MUDError(
|
36
|
-
`Attempting to deploy to a chain with non-zero gas price with an account that has no balance.`
|
37
|
-
);
|
38
|
-
}
|
39
|
-
|
40
|
-
gasPrice = feeData.gasPrice;
|
41
|
-
} else {
|
42
|
-
throw new MUDError("Can not fetch fee data from RPC");
|
43
|
-
}
|
44
|
-
return {
|
45
|
-
maxPriorityFeePerGas,
|
46
|
-
maxFeePerGas,
|
47
|
-
gasPrice,
|
48
|
-
};
|
49
|
-
}
|
package/src/utils/utils/types.ts
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
import { BigNumber, ContractInterface, ethers } from "ethers";
|
2
|
-
|
3
|
-
export type CallData = {
|
4
|
-
func: string;
|
5
|
-
args: unknown[];
|
6
|
-
};
|
7
|
-
|
8
|
-
export type ContractCode = {
|
9
|
-
name: string;
|
10
|
-
abi: ContractInterface;
|
11
|
-
bytecode: string | { object: string };
|
12
|
-
};
|
13
|
-
|
14
|
-
export type TxConfig = {
|
15
|
-
signer: ethers.Wallet;
|
16
|
-
maxPriorityFeePerGas: number | undefined;
|
17
|
-
maxFeePerGas: BigNumber | undefined;
|
18
|
-
gasPrice: BigNumber | undefined;
|
19
|
-
debug: boolean;
|
20
|
-
confirmations: number;
|
21
|
-
};
|
package/src/utils/world.ts
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
import chalk from "chalk";
|
2
|
-
|
3
|
-
import WorldData from "@latticexyz/world/out/World.sol/World.json" assert { type: "json" };
|
4
|
-
import IBaseWorldAbi from "@latticexyz/world/out/IBaseWorld.sol/IBaseWorld.abi.json" assert { type: "json" };
|
5
|
-
import { deployContract } from "./utils/deployContract";
|
6
|
-
import { getContractData } from "./utils/getContractData";
|
7
|
-
import { TxConfig } from "./utils/types";
|
8
|
-
|
9
|
-
export async function deployWorldContract(
|
10
|
-
ip: TxConfig & {
|
11
|
-
nonce: number;
|
12
|
-
worldContractName: string | undefined;
|
13
|
-
forgeOutDirectory: string;
|
14
|
-
}
|
15
|
-
): Promise<string> {
|
16
|
-
console.log(chalk.blue(`Deploying World`));
|
17
|
-
const contractData = ip.worldContractName
|
18
|
-
? {
|
19
|
-
name: "World",
|
20
|
-
...getContractData(ip.worldContractName, ip.forgeOutDirectory),
|
21
|
-
}
|
22
|
-
: { abi: IBaseWorldAbi, bytecode: WorldData.bytecode, name: "World" };
|
23
|
-
return deployContract({
|
24
|
-
...ip,
|
25
|
-
nonce: ip.nonce,
|
26
|
-
contract: contractData,
|
27
|
-
});
|
28
|
-
}
|