skittles 1.2.1 → 1.2.2
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/README.md +3 -9
- package/dist/index.js +0 -0
- package/package.json +1 -1
- package/dist/commands/test.d.ts +0 -7
- package/dist/commands/test.d.ts.map +0 -1
- package/dist/commands/test.js +0 -60
- package/dist/commands/test.js.map +0 -1
- package/dist/testing.d.ts +0 -93
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -143
- package/dist/testing.js.map +0 -1
package/README.md
CHANGED
|
@@ -10,22 +10,16 @@ Skittles compiles TypeScript classes to Solidity source code. Use Hardhat (or an
|
|
|
10
10
|
|
|
11
11
|
Website: [skittles.dev](https://skittles.dev/)
|
|
12
12
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npm install skittles
|
|
17
|
-
```
|
|
13
|
+
## Quick Start
|
|
18
14
|
|
|
19
15
|
Requires Node.js 20+.
|
|
20
16
|
|
|
21
|
-
## Quick Start
|
|
22
|
-
|
|
23
17
|
```bash
|
|
24
|
-
npx skittles init
|
|
18
|
+
npx skittles@latest init
|
|
25
19
|
npx skittles compile
|
|
26
20
|
```
|
|
27
21
|
|
|
28
|
-
This
|
|
22
|
+
This scaffolds a project with an example token contract and compiles it to `build/`.
|
|
29
23
|
|
|
30
24
|
## Example
|
|
31
25
|
|
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
package/dist/commands/test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
package/dist/commands/test.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import { spawn } from "child_process";
|
|
4
|
-
import { loadConfig } from "../config/config.js";
|
|
5
|
-
import { compile } from "../compiler/compiler.js";
|
|
6
|
-
import { logSuccess, logError, logInfo } from "../utils/console.js";
|
|
7
|
-
/**
|
|
8
|
-
* Resolve the path to a locally installed binary in node_modules/.bin.
|
|
9
|
-
* Returns the binary name as a fallback if not found locally.
|
|
10
|
-
*/
|
|
11
|
-
function resolveLocalBin(projectRoot, bin) {
|
|
12
|
-
const localPath = path.join(projectRoot, "node_modules", ".bin", bin);
|
|
13
|
-
if (fs.existsSync(localPath)) {
|
|
14
|
-
return localPath;
|
|
15
|
-
}
|
|
16
|
-
return bin;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* The `skittles test` command.
|
|
20
|
-
* 1. Compiles all contracts (same as `skittles compile`)
|
|
21
|
-
* 2. Runs hardhat test
|
|
22
|
-
*/
|
|
23
|
-
export async function testCommand(projectRoot, watch) {
|
|
24
|
-
// Step 1: Compile contracts
|
|
25
|
-
logInfo("Compiling contracts before running tests...");
|
|
26
|
-
try {
|
|
27
|
-
const config = await loadConfig(projectRoot);
|
|
28
|
-
const result = await compile(projectRoot, config);
|
|
29
|
-
if (!result.success) {
|
|
30
|
-
for (const error of result.errors) {
|
|
31
|
-
logError(error);
|
|
32
|
-
}
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
logSuccess(`${result.artifacts.length} contract(s) compiled successfully`);
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
const message = err instanceof Error ? err.message : "Unknown error occurred";
|
|
39
|
-
logError(`Compilation failed: ${message}`);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
// Step 2: Run hardhat test using the locally installed binary
|
|
43
|
-
logInfo(watch ? "Starting tests in watch mode..." : "Running tests...");
|
|
44
|
-
const hardhatBin = resolveLocalBin(projectRoot, "hardhat");
|
|
45
|
-
const args = watch ? ["test", "--watch"] : ["test"];
|
|
46
|
-
const child = spawn(hardhatBin, args, {
|
|
47
|
-
cwd: projectRoot,
|
|
48
|
-
stdio: "inherit",
|
|
49
|
-
shell: true,
|
|
50
|
-
});
|
|
51
|
-
child.on("close", (code) => {
|
|
52
|
-
process.exit(code ?? 0);
|
|
53
|
-
});
|
|
54
|
-
child.on("error", (err) => {
|
|
55
|
-
logError(`Failed to start hardhat: ${err.message}`);
|
|
56
|
-
logInfo("Make sure hardhat is installed: npm install --save-dev hardhat");
|
|
57
|
-
process.exit(1);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;GAGG;AACH,SAAS,eAAe,CAAC,WAAmB,EAAE,GAAW;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACtE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAAmB,EACnB,KAAc;IAEd,4BAA4B;IAC5B,OAAO,CAAC,6CAA6C,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,UAAU,CACR,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,oCAAoC,CAC/D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAChE,QAAQ,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8DAA8D;IAC9D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAExE,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;QACpC,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,QAAQ,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CACL,gEAAgE,CACjE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/testing.d.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* skittles/testing (core)
|
|
3
|
-
*
|
|
4
|
-
* Lower level testing utilities for Skittles projects.
|
|
5
|
-
* Provides helpers to spin up an in memory EVM, deploy compiled contracts,
|
|
6
|
-
* and interact with them using ethers.js v6.
|
|
7
|
-
*
|
|
8
|
-
* Most users should import from "skittles/testing" which provides the
|
|
9
|
-
* higher level `setup()` function with automatic lifecycle management.
|
|
10
|
-
*
|
|
11
|
-
* Requirements (devDependencies in your project):
|
|
12
|
-
* - ethers ^6.0.0
|
|
13
|
-
* - hardhat ^2.22.0
|
|
14
|
-
* - @nomicfoundation/hardhat-toolbox ^5.0.0
|
|
15
|
-
*
|
|
16
|
-
* Tests are run via `hardhat test` which uses Mocha under the hood.
|
|
17
|
-
*/
|
|
18
|
-
import { ethers } from "ethers";
|
|
19
|
-
/**
|
|
20
|
-
* A test environment backed by an in memory Hardhat Network.
|
|
21
|
-
* Create one per test suite with `createTestEnv()`.
|
|
22
|
-
*/
|
|
23
|
-
export interface TestEnv {
|
|
24
|
-
/** ethers provider connected to Hardhat Network. */
|
|
25
|
-
provider: ethers.BrowserProvider;
|
|
26
|
-
/** Ten pre-funded signer accounts. */
|
|
27
|
-
accounts: ethers.Signer[];
|
|
28
|
-
/** Shut down the environment. No-op for Hardhat 2 (network lifecycle is managed by Hardhat). */
|
|
29
|
-
close: () => Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Create a test environment backed by Hardhat Network.
|
|
33
|
-
* Uses the Hardhat Runtime Environment's in memory EVM and wraps it
|
|
34
|
-
* with an ethers BrowserProvider.
|
|
35
|
-
*
|
|
36
|
-
* Each test suite should call this once in a `before` hook.
|
|
37
|
-
*
|
|
38
|
-
* ```ts
|
|
39
|
-
* let env: TestEnv;
|
|
40
|
-
* before(async function () { env = await createTestEnv(); });
|
|
41
|
-
* ```
|
|
42
|
-
*
|
|
43
|
-
* @param dynamicImport Optional custom import function.
|
|
44
|
-
*/
|
|
45
|
-
export declare function createTestEnv(dynamicImport?: (specifier: string) => Promise<any>): Promise<TestEnv>;
|
|
46
|
-
/**
|
|
47
|
-
* Load a compiled contract artifact (ABI + bytecode) from the build directory.
|
|
48
|
-
* Defaults to `build/` relative to the current working directory.
|
|
49
|
-
*/
|
|
50
|
-
export declare function loadArtifact(contractName: string, buildDir?: string): {
|
|
51
|
-
abi: ethers.InterfaceAbi;
|
|
52
|
-
bytecode: string;
|
|
53
|
-
};
|
|
54
|
-
export interface DeployOptions {
|
|
55
|
-
/** Override the build directory. Defaults to `build/` in the project root. */
|
|
56
|
-
buildDir?: string;
|
|
57
|
-
/** Send ETH with deployment (payable constructors). */
|
|
58
|
-
value?: bigint;
|
|
59
|
-
/** Index of the account to deploy from. Defaults to 0. */
|
|
60
|
-
from?: number;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Deploy a compiled Skittles contract to the test EVM.
|
|
64
|
-
*
|
|
65
|
-
* Automatically loads the ABI and bytecode from the build directory,
|
|
66
|
-
* deploys the contract, and returns an ethers.js Contract instance.
|
|
67
|
-
*
|
|
68
|
-
* ```ts
|
|
69
|
-
* const token = await deploy(env, "Token", [1_000_000n]);
|
|
70
|
-
* expect(await token.name()).to.equal("MyToken");
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
export declare function deploy(env: TestEnv, contractName: string, constructorArgs?: unknown[], options?: DeployOptions): Promise<ethers.Contract>;
|
|
74
|
-
/**
|
|
75
|
-
* Connect to a deployed contract from a different signer.
|
|
76
|
-
* Useful for testing multi account scenarios.
|
|
77
|
-
*
|
|
78
|
-
* ```ts
|
|
79
|
-
* const [, alice] = env.accounts;
|
|
80
|
-
* const aliceToken = connectAs(token, alice);
|
|
81
|
-
* await aliceToken.transfer(bobAddr, 100n);
|
|
82
|
-
* ```
|
|
83
|
-
*/
|
|
84
|
-
export declare function connectAs(contract: ethers.Contract, signer: ethers.Signer): ethers.Contract;
|
|
85
|
-
/**
|
|
86
|
-
* Get the ETH balance of an address.
|
|
87
|
-
*
|
|
88
|
-
* ```ts
|
|
89
|
-
* const balance = await getBalance(env, aliceAddr);
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
export declare function getBalance(env: TestEnv, address: string): Promise<bigint>;
|
|
93
|
-
//# sourceMappingURL=testing.d.ts.map
|
package/dist/testing.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMhC;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC;IACjC,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1B,gGAAgG;IAChG,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAaD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,aAAa,GAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAgB,GAChE,OAAO,CAAC,OAAO,CAAC,CAelB;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAqBhD;AAMD,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,MAAM,CAC1B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,OAAO,EAAO,EAC/B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAW1B;AAMD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,MAAM,EAAE,MAAM,CAAC,MAAM,GACpB,MAAM,CAAC,QAAQ,CAEjB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
package/dist/testing.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* skittles/testing (core)
|
|
4
|
-
*
|
|
5
|
-
* Lower level testing utilities for Skittles projects.
|
|
6
|
-
* Provides helpers to spin up an in memory EVM, deploy compiled contracts,
|
|
7
|
-
* and interact with them using ethers.js v6.
|
|
8
|
-
*
|
|
9
|
-
* Most users should import from "skittles/testing" which provides the
|
|
10
|
-
* higher level `setup()` function with automatic lifecycle management.
|
|
11
|
-
*
|
|
12
|
-
* Requirements (devDependencies in your project):
|
|
13
|
-
* - ethers ^6.0.0
|
|
14
|
-
* - hardhat ^2.22.0
|
|
15
|
-
* - @nomicfoundation/hardhat-toolbox ^5.0.0
|
|
16
|
-
*
|
|
17
|
-
* Tests are run via `hardhat test` which uses Mocha under the hood.
|
|
18
|
-
*/
|
|
19
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
20
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
21
|
-
};
|
|
22
|
-
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
23
|
-
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
24
|
-
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
25
|
-
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
return path;
|
|
29
|
-
};
|
|
30
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
exports.createTestEnv = createTestEnv;
|
|
32
|
-
exports.loadArtifact = loadArtifact;
|
|
33
|
-
exports.deploy = deploy;
|
|
34
|
-
exports.connectAs = connectAs;
|
|
35
|
-
exports.getBalance = getBalance;
|
|
36
|
-
const path_1 = __importDefault(require("path"));
|
|
37
|
-
const fs_1 = __importDefault(require("fs"));
|
|
38
|
-
const ethers_1 = require("ethers");
|
|
39
|
-
// ============================================================
|
|
40
|
-
// Internal helpers
|
|
41
|
-
// ============================================================
|
|
42
|
-
/** Dynamic import wrapper for loading ESM packages like Hardhat. */
|
|
43
|
-
const importModule = (specifier) => import(__rewriteRelativeImportExtension(specifier));
|
|
44
|
-
// ============================================================
|
|
45
|
-
// Environment setup
|
|
46
|
-
// ============================================================
|
|
47
|
-
/**
|
|
48
|
-
* Create a test environment backed by Hardhat Network.
|
|
49
|
-
* Uses the Hardhat Runtime Environment's in memory EVM and wraps it
|
|
50
|
-
* with an ethers BrowserProvider.
|
|
51
|
-
*
|
|
52
|
-
* Each test suite should call this once in a `before` hook.
|
|
53
|
-
*
|
|
54
|
-
* ```ts
|
|
55
|
-
* let env: TestEnv;
|
|
56
|
-
* before(async function () { env = await createTestEnv(); });
|
|
57
|
-
* ```
|
|
58
|
-
*
|
|
59
|
-
* @param dynamicImport Optional custom import function.
|
|
60
|
-
*/
|
|
61
|
-
async function createTestEnv(dynamicImport = importModule) {
|
|
62
|
-
const hardhatModule = await dynamicImport("hardhat");
|
|
63
|
-
const hre = hardhatModule.default || hardhatModule;
|
|
64
|
-
const provider = new ethers_1.ethers.BrowserProvider(hre.network.provider);
|
|
65
|
-
const accounts = [];
|
|
66
|
-
for (let i = 0; i < 10; i++) {
|
|
67
|
-
accounts.push(await provider.getSigner(i));
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
provider,
|
|
71
|
-
accounts,
|
|
72
|
-
close: async () => { },
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
// ============================================================
|
|
76
|
-
// Artifact loading
|
|
77
|
-
// ============================================================
|
|
78
|
-
/**
|
|
79
|
-
* Load a compiled contract artifact (ABI + bytecode) from the build directory.
|
|
80
|
-
* Defaults to `build/` relative to the current working directory.
|
|
81
|
-
*/
|
|
82
|
-
function loadArtifact(contractName, buildDir) {
|
|
83
|
-
const dir = buildDir ?? path_1.default.join(process.cwd(), "build");
|
|
84
|
-
const abiPath = path_1.default.join(dir, "abi", `${contractName}.json`);
|
|
85
|
-
const bytecodePath = path_1.default.join(dir, "bytecode", `${contractName}.bin`);
|
|
86
|
-
if (!fs_1.default.existsSync(abiPath)) {
|
|
87
|
-
throw new Error(`ABI not found for "${contractName}". Did you run "skittles compile" first?\n Expected: ${abiPath}`);
|
|
88
|
-
}
|
|
89
|
-
if (!fs_1.default.existsSync(bytecodePath)) {
|
|
90
|
-
throw new Error(`Bytecode not found for "${contractName}". Did you run "skittles compile" first?\n Expected: ${bytecodePath}`);
|
|
91
|
-
}
|
|
92
|
-
const abi = JSON.parse(fs_1.default.readFileSync(abiPath, "utf-8"));
|
|
93
|
-
const bytecode = fs_1.default.readFileSync(bytecodePath, "utf-8");
|
|
94
|
-
return { abi, bytecode: "0x" + bytecode };
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Deploy a compiled Skittles contract to the test EVM.
|
|
98
|
-
*
|
|
99
|
-
* Automatically loads the ABI and bytecode from the build directory,
|
|
100
|
-
* deploys the contract, and returns an ethers.js Contract instance.
|
|
101
|
-
*
|
|
102
|
-
* ```ts
|
|
103
|
-
* const token = await deploy(env, "Token", [1_000_000n]);
|
|
104
|
-
* expect(await token.name()).to.equal("MyToken");
|
|
105
|
-
* ```
|
|
106
|
-
*/
|
|
107
|
-
async function deploy(env, contractName, constructorArgs = [], options = {}) {
|
|
108
|
-
const { abi, bytecode } = loadArtifact(contractName, options.buildDir);
|
|
109
|
-
const deployer = env.accounts[options.from ?? 0];
|
|
110
|
-
const factory = new ethers_1.ethers.ContractFactory(abi, bytecode, deployer);
|
|
111
|
-
const overrides = options.value ? { value: options.value } : {};
|
|
112
|
-
const deployed = await factory.deploy(...constructorArgs, overrides);
|
|
113
|
-
await deployed.waitForDeployment();
|
|
114
|
-
const address = await deployed.getAddress();
|
|
115
|
-
return new ethers_1.ethers.Contract(address, abi, deployer);
|
|
116
|
-
}
|
|
117
|
-
// ============================================================
|
|
118
|
-
// Utilities
|
|
119
|
-
// ============================================================
|
|
120
|
-
/**
|
|
121
|
-
* Connect to a deployed contract from a different signer.
|
|
122
|
-
* Useful for testing multi account scenarios.
|
|
123
|
-
*
|
|
124
|
-
* ```ts
|
|
125
|
-
* const [, alice] = env.accounts;
|
|
126
|
-
* const aliceToken = connectAs(token, alice);
|
|
127
|
-
* await aliceToken.transfer(bobAddr, 100n);
|
|
128
|
-
* ```
|
|
129
|
-
*/
|
|
130
|
-
function connectAs(contract, signer) {
|
|
131
|
-
return contract.connect(signer);
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Get the ETH balance of an address.
|
|
135
|
-
*
|
|
136
|
-
* ```ts
|
|
137
|
-
* const balance = await getBalance(env, aliceAddr);
|
|
138
|
-
* ```
|
|
139
|
-
*/
|
|
140
|
-
async function getBalance(env, address) {
|
|
141
|
-
return env.provider.getBalance(address);
|
|
142
|
-
}
|
|
143
|
-
//# sourceMappingURL=testing.js.map
|
package/dist/testing.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|