Selaa lähdekoodia

基础库已经准备好了

skyfffire 2 vuotta sitten
vanhempi
commit
1a85f64e2f

+ 3 - 1
.gitignore

@@ -12,4 +12,6 @@ cache
 artifacts
 
 #idea files
-.idea/
+.idea/
+
+wallet.db

+ 3 - 4
.secret-config.js.sample

@@ -1,6 +1,5 @@
 module.exports = {
-    address: 'ADDRESS',
-    private: 'PRIVATE_KEY',
-    chainId: 10001,
-    apiPoint: 'http://410eth.com:8888'
+    privateKey: 'PRIVATE_KEY',
+    apiPoint: 'http://web.410eth.com:8888',
+    walletMax: 1000
 }

+ 12 - 69
package-lock.json

@@ -6,6 +6,7 @@
     "": {
       "name": "scroll-project",
       "dependencies": {
+        "level": "^8.0.0",
         "log4js": "^6.9.1",
         "md5-node": "^1.0.1",
         "qs": "^6.11.0"
@@ -1894,8 +1895,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz",
       "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==",
-      "dev": true,
-      "peer": true,
       "dependencies": {
         "buffer": "^6.0.3",
         "catering": "^2.1.0",
@@ -2340,7 +2339,6 @@
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
       "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -2508,8 +2506,6 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz",
       "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==",
-      "dev": true,
-      "peer": true,
       "dependencies": {
         "abstract-level": "^1.0.2",
         "catering": "^2.1.1",
@@ -2611,7 +2607,6 @@
       "version": "6.0.3",
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
       "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -2626,7 +2621,6 @@
           "url": "https://feross.org/support"
         }
       ],
-      "peer": true,
       "dependencies": {
         "base64-js": "^1.3.1",
         "ieee754": "^1.2.1"
@@ -2771,8 +2765,6 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz",
       "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==",
-      "dev": true,
-      "peer": true,
       "engines": {
         "node": ">=6"
       }
@@ -2971,9 +2963,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz",
       "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==",
-      "dev": true,
       "hasInstallScript": true,
-      "peer": true,
       "dependencies": {
         "abstract-level": "^1.0.2",
         "catering": "^2.1.0",
@@ -5877,7 +5867,6 @@
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -6049,7 +6038,6 @@
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
       "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -6064,7 +6052,6 @@
           "url": "https://feross.org/support"
         }
       ],
-      "peer": true,
       "engines": {
         "node": ">=4"
       }
@@ -6467,8 +6454,6 @@
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz",
       "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==",
-      "dev": true,
-      "peer": true,
       "dependencies": {
         "browser-level": "^1.0.1",
         "classic-level": "^1.2.0"
@@ -6485,8 +6470,6 @@
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
       "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
-      "dev": true,
-      "peer": true,
       "engines": {
         "node": ">=12"
       }
@@ -6495,8 +6478,6 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz",
       "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==",
-      "dev": true,
-      "peer": true,
       "dependencies": {
         "buffer": "^6.0.3",
         "module-error": "^1.0.1"
@@ -7156,8 +7137,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz",
       "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==",
-      "dev": true,
-      "peer": true,
       "engines": {
         "node": ">=10"
       }
@@ -7279,9 +7258,7 @@
     "node_modules/napi-macros": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
-      "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg=="
     },
     "node_modules/negotiator": {
       "version": "0.6.3",
@@ -7366,7 +7343,6 @@
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
       "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==",
-      "dev": true,
       "bin": {
         "node-gyp-build": "bin.js",
         "node-gyp-build-optional": "optional.js",
@@ -7920,7 +7896,6 @@
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -7934,8 +7909,7 @@
           "type": "consulting",
           "url": "https://feross.org/support"
         }
-      ],
-      "peer": true
+      ]
     },
     "node_modules/quick-lru": {
       "version": "5.1.1",
@@ -8339,7 +8313,6 @@
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz",
       "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -8354,7 +8327,6 @@
           "url": "https://feross.org/support"
         }
       ],
-      "peer": true,
       "dependencies": {
         "queue-microtask": "^1.2.2"
       }
@@ -12804,8 +12776,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz",
       "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==",
-      "dev": true,
-      "peer": true,
       "requires": {
         "buffer": "^6.0.3",
         "catering": "^2.1.0",
@@ -13162,8 +13132,7 @@
     "base64-js": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
-      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-      "dev": true
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
     },
     "bcrypt-pbkdf": {
       "version": "1.0.2",
@@ -13302,8 +13271,6 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz",
       "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==",
-      "dev": true,
-      "peer": true,
       "requires": {
         "abstract-level": "^1.0.2",
         "catering": "^2.1.1",
@@ -13405,8 +13372,6 @@
       "version": "6.0.3",
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
       "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
-      "dev": true,
-      "peer": true,
       "requires": {
         "base64-js": "^1.3.1",
         "ieee754": "^1.2.1"
@@ -13518,9 +13483,7 @@
     "catering": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz",
-      "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w=="
     },
     "cbor": {
       "version": "5.2.0",
@@ -13669,8 +13632,6 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz",
       "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==",
-      "dev": true,
-      "peer": true,
       "requires": {
         "abstract-level": "^1.0.2",
         "catering": "^2.1.0",
@@ -16047,8 +16008,7 @@
     "ieee754": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-      "dev": true
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
     },
     "ignore": {
       "version": "5.2.0",
@@ -16172,9 +16132,7 @@
     "is-buffer": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
-      "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
     },
     "is-callable": {
       "version": "1.2.7",
@@ -16473,8 +16431,6 @@
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz",
       "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==",
-      "dev": true,
-      "peer": true,
       "requires": {
         "browser-level": "^1.0.1",
         "classic-level": "^1.2.0"
@@ -16483,16 +16439,12 @@
     "level-supports": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
-      "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA=="
     },
     "level-transcoder": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz",
       "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==",
-      "dev": true,
-      "peer": true,
       "requires": {
         "buffer": "^6.0.3",
         "module-error": "^1.0.1"
@@ -17001,9 +16953,7 @@
     "module-error": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz",
-      "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA=="
     },
     "ms": {
       "version": "2.1.2",
@@ -17089,9 +17039,7 @@
     "napi-macros": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
-      "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg=="
     },
     "negotiator": {
       "version": "0.6.3",
@@ -17160,8 +17108,7 @@
     "node-gyp-build": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
-      "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==",
-      "dev": true
+      "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg=="
     },
     "nofilter": {
       "version": "1.0.4",
@@ -17589,9 +17536,7 @@
     "queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
     },
     "quick-lru": {
       "version": "5.1.1",
@@ -17894,8 +17839,6 @@
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz",
       "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==",
-      "dev": true,
-      "peer": true,
       "requires": {
         "queue-microtask": "^1.2.2"
       }

+ 1 - 0
package.json

@@ -11,6 +11,7 @@
     "web3": "^1.8.0"
   },
   "dependencies": {
+    "level": "^8.0.0",
     "log4js": "^6.9.1",
     "md5-node": "^1.0.1",
     "qs": "^6.11.0"

+ 29 - 3
scripts/lib/wallet-lib.js

@@ -1,7 +1,33 @@
-class WalletLib {}
+const { Level } = require("level");
+const db = new Level('wallet.db', { valueEncoding: 'json' })
 
-WalletLib.randomWallet = function(web3) {
-  return web3.eth.accounts.create(web3.utils.randomHex(32));
+class WalletLib {
+  static randomWallet(web3) {
+    return web3.eth.accounts.create(web3.utils.randomHex(32));
+  }
+
+  static async saveWallet(index, privateKey) {
+    // 先读,如果存在不能save,钱包不可覆盖
+    if ((await WalletLib.readWallet(index)) !== undefined) {
+      throw 'Dont repeat db wallet!'
+    }
+
+    try {
+      await db.put('wallet'.concat(index.toString()), privateKey)
+
+      return true
+    } catch (e) {
+      throw e
+    }
+  }
+
+  static async readWallet(index) {
+    try {
+      return await db.get('wallet'.concat(index.toString()))
+    } catch (e) {
+      return undefined
+    }
+  }
 }
 
 module.exports = WalletLib

+ 23 - 0
scripts/scroll/batch-generate-wallet.js

@@ -0,0 +1,23 @@
+const ChainLib = require("../lib/chain-lib");
+const Web3Utils = require("../../utils/web3-utils");
+const WalletUtils = require("../lib/wallet-lib")
+const logger = require("../../utils/logger");
+const secretConfig = require("../../.secret-config.js")
+
+async function main() {
+  const chain = await ChainLib.getChainFromCommand()
+  const web3 = Web3Utils.autoCreate(chain)
+
+  for (let index = 0; index < secretConfig.walletMax; index++) {
+    const wallet = WalletUtils.randomWallet(web3)
+
+    if (await WalletUtils.saveWallet(index, wallet.privateKey)) {
+      logger.info(wallet.address, 'saved.')
+    }
+  }
+}
+
+main().catch((error) => {
+  console.error(error);
+  process.exitCode = 1;
+})

+ 1 - 8
scripts/scroll/scroll-network.js

@@ -1,21 +1,14 @@
 const ChainLib = require("../lib/chain-lib");
 const Web3Utils = require("../../utils/web3-utils");
-const WalletUtils = require("../lib/wallet-lib")
 const logger = require("../../utils/logger");
 const secretConfig = require("../../.secret-config.js")
 const AccountLib = require("../lib/account-lib");
 
 async function onTick(web3) {
-  const mainWallet = web3.eth.accounts.privateKeyToAccount(secretConfig.private)
+  const mainWallet = web3.eth.accounts.privateKeyToAccount(secretConfig.privateKey)
   const transferRst = await AccountLib.transfer(web3, mainWallet, mainWallet, 1)
 
   logger.info(transferRst)
-
-  // for (let i = 0; i < 1000; i++) {
-  //   const wallet = WalletUtils.randomWallet(web3)
-  //   // 1. 批量转账到各个钱包
-  //   logger.info(wallet.address, wallet.privateKey)
-  // }
 }
 
 async function main() {

+ 24 - 0
scripts/scroll/show-generated-wallets.js

@@ -0,0 +1,24 @@
+const ChainLib = require("../lib/chain-lib");
+const Web3Utils = require("../../utils/web3-utils");
+const WalletUtils = require("../lib/wallet-lib")
+const logger = require("../../utils/logger");
+const secretConfig = require("../../.secret-config.js")
+
+async function main() {
+  const chain = await ChainLib.getChainFromCommand()
+  const web3 = Web3Utils.autoCreate(chain)
+
+  for (let index = 0; index < secretConfig.walletMax; index++) {
+    const privateKey = await WalletUtils.readWallet(index)
+    if (!privateKey) logger.info('cant find wallet in db, index:'.concat(index.toString()))
+
+    const wallet = web3.eth.accounts.privateKeyToAccount(privateKey)
+
+    logger.info(wallet.address, wallet.privateKey)
+  }
+}
+
+main().catch((error) => {
+  console.error(error);
+  process.exitCode = 1;
+})