mirror of
https://github.com/benjamin-wilson/public-pool.git
synced 2026-09-29 09:05:06 -07:00
cleanup and support for all address types
This commit is contained in:
Generated
+145
@@ -13,8 +13,10 @@
|
|||||||
"@nestjs/config": "^2.3.2",
|
"@nestjs/config": "^2.3.2",
|
||||||
"@nestjs/core": "^9.0.0",
|
"@nestjs/core": "^9.0.0",
|
||||||
"@nestjs/platform-fastify": "^9.4.2",
|
"@nestjs/platform-fastify": "^9.4.2",
|
||||||
|
"@nestjs/schedule": "^3.0.1",
|
||||||
"@nestjs/typeorm": "^10.0.0",
|
"@nestjs/typeorm": "^10.0.0",
|
||||||
"big.js": "^6.2.1",
|
"big.js": "^6.2.1",
|
||||||
|
"bitcoin-address-validation": "^2.2.1",
|
||||||
"bitcoinjs-lib": "^6.1.3",
|
"bitcoinjs-lib": "^6.1.3",
|
||||||
"bs58": "^5.0.0",
|
"bs58": "^5.0.0",
|
||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
@@ -31,6 +33,7 @@
|
|||||||
"@nestjs/schematics": "^9.0.0",
|
"@nestjs/schematics": "^9.0.0",
|
||||||
"@nestjs/testing": "^9.0.0",
|
"@nestjs/testing": "^9.0.0",
|
||||||
"@types/big.js": "^6.1.6",
|
"@types/big.js": "^6.1.6",
|
||||||
|
"@types/cron": "^2.0.1",
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"@types/jest": "29.5.1",
|
"@types/jest": "29.5.1",
|
||||||
"@types/node": "18.16.12",
|
"@types/node": "18.16.12",
|
||||||
@@ -1724,6 +1727,28 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@nestjs/schedule": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-4CAFu4rE/QPYnz/icRg3GiuLmY1bXopG8bWTJ9d7bXzaHBaPKIjGvZ20wsK8P+MncrVCkmK0iYhQrNj0cwX9+A==",
|
||||||
|
"dependencies": {
|
||||||
|
"cron": "2.3.1",
|
||||||
|
"uuid": "9.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||||
|
"@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||||
|
"reflect-metadata": "^0.1.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@nestjs/schedule/node_modules/uuid": {
|
||||||
|
"version": "9.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
|
||||||
|
"integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
|
||||||
|
"bin": {
|
||||||
|
"uuid": "dist/bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@nestjs/schematics": {
|
"node_modules/@nestjs/schematics": {
|
||||||
"version": "9.2.0",
|
"version": "9.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.2.0.tgz",
|
||||||
@@ -2058,6 +2083,16 @@
|
|||||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/cron": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/cron/-/cron-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-WHa/1rtNtD2Q/H0+YTTZoty+/5rcE66iAFX2IY+JuUoOACsevYyFkSYu/2vdw+G5LrmO7Lxowrqm0av4k3qWNQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/luxon": "*",
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/eslint": {
|
"node_modules/@types/eslint": {
|
||||||
"version": "8.40.1",
|
"version": "8.40.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.1.tgz",
|
||||||
@@ -2157,6 +2192,12 @@
|
|||||||
"integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
|
"integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/luxon": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-uKRI5QORDnrGFYgcdAVnHvEIvEZ8noTpP/Bg+HeUzZghwinDlIS87DEenV5r1YoOF9G4x600YsUXLWZ19rmTmg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/@types/mime": {
|
"node_modules/@types/mime": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||||
@@ -3099,6 +3140,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
|
||||||
"integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
|
"integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
|
||||||
},
|
},
|
||||||
|
"node_modules/base58-js": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.5.tgz",
|
||||||
|
"integrity": "sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/base64-js": {
|
"node_modules/base64-js": {
|
||||||
"version": "1.5.1",
|
"version": "1.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||||
@@ -3168,6 +3217,16 @@
|
|||||||
"node": ">=8.0.0"
|
"node": ">=8.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/bitcoin-address-validation": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/bitcoin-address-validation/-/bitcoin-address-validation-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-f6LXNpvRKlTbHWb37N9tHoAbYGbshzM8FPWvCtloh++hxZ0/dmkokvKNVLz6HkG82zVwo8w6Sq4JmfO2timzyg==",
|
||||||
|
"dependencies": {
|
||||||
|
"base58-js": "^1.0.0",
|
||||||
|
"bech32": "^2.0.0",
|
||||||
|
"sha256-uint8array": "^0.10.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/bitcoinjs-lib": {
|
"node_modules/bitcoinjs-lib": {
|
||||||
"version": "6.1.3",
|
"version": "6.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz",
|
||||||
@@ -3955,6 +4014,14 @@
|
|||||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||||
"devOptional": true
|
"devOptional": true
|
||||||
},
|
},
|
||||||
|
"node_modules/cron": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/cron/-/cron-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-1eRRlIT0UfIqauwbG9pkg3J6CX9A6My2ytJWqAXoK0T9oJnUZTzGBNPxao0zjodIbPgf8UQWjE62BMb9eVllSQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"luxon": "^3.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cross-spawn": {
|
"node_modules/cross-spawn": {
|
||||||
"version": "7.0.3",
|
"version": "7.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||||
@@ -6942,6 +7009,14 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/luxon": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/macos-release": {
|
"node_modules/macos-release": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
|
||||||
@@ -8809,6 +8884,11 @@
|
|||||||
"sha.js": "bin.js"
|
"sha.js": "bin.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/sha256-uint8array": {
|
||||||
|
"version": "0.10.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/sha256-uint8array/-/sha256-uint8array-0.10.5.tgz",
|
||||||
|
"integrity": "sha512-KjYP8M6y8VvV62lnSSZwzutuwqphVOOVQamP+GmmClZcYhbq1HSIw/M2tlKgHndiaIwe3tFG5X38YYsQfUdItw=="
|
||||||
|
},
|
||||||
"node_modules/shebang-command": {
|
"node_modules/shebang-command": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
@@ -11604,6 +11684,22 @@
|
|||||||
"tslib": "2.5.2"
|
"tslib": "2.5.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@nestjs/schedule": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-4CAFu4rE/QPYnz/icRg3GiuLmY1bXopG8bWTJ9d7bXzaHBaPKIjGvZ20wsK8P+MncrVCkmK0iYhQrNj0cwX9+A==",
|
||||||
|
"requires": {
|
||||||
|
"cron": "2.3.1",
|
||||||
|
"uuid": "9.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"uuid": {
|
||||||
|
"version": "9.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
|
||||||
|
"integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@nestjs/schematics": {
|
"@nestjs/schematics": {
|
||||||
"version": "9.2.0",
|
"version": "9.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.2.0.tgz",
|
||||||
@@ -11870,6 +11966,16 @@
|
|||||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@types/cron": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/cron/-/cron-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-WHa/1rtNtD2Q/H0+YTTZoty+/5rcE66iAFX2IY+JuUoOACsevYyFkSYu/2vdw+G5LrmO7Lxowrqm0av4k3qWNQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/luxon": "*",
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/eslint": {
|
"@types/eslint": {
|
||||||
"version": "8.40.1",
|
"version": "8.40.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.1.tgz",
|
||||||
@@ -11969,6 +12075,12 @@
|
|||||||
"integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
|
"integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@types/luxon": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-uKRI5QORDnrGFYgcdAVnHvEIvEZ8noTpP/Bg+HeUzZghwinDlIS87DEenV5r1YoOF9G4x600YsUXLWZ19rmTmg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/mime": {
|
"@types/mime": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||||
@@ -12722,6 +12834,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
|
||||||
"integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
|
"integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
|
||||||
},
|
},
|
||||||
|
"base58-js": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.5.tgz",
|
||||||
|
"integrity": "sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA=="
|
||||||
|
},
|
||||||
"base64-js": {
|
"base64-js": {
|
||||||
"version": "1.5.1",
|
"version": "1.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||||
@@ -12761,6 +12878,16 @@
|
|||||||
"resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.0.tgz",
|
||||||
"integrity": "sha512-lkc0XyiX9E9KiVAS1ZiOqK1xfiwvf4FXDDdkDq5crcDzOq+xGytY+14qCsqz7kCiy8rpN1CRNfacRhf9G3JNSA=="
|
"integrity": "sha512-lkc0XyiX9E9KiVAS1ZiOqK1xfiwvf4FXDDdkDq5crcDzOq+xGytY+14qCsqz7kCiy8rpN1CRNfacRhf9G3JNSA=="
|
||||||
},
|
},
|
||||||
|
"bitcoin-address-validation": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/bitcoin-address-validation/-/bitcoin-address-validation-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-f6LXNpvRKlTbHWb37N9tHoAbYGbshzM8FPWvCtloh++hxZ0/dmkokvKNVLz6HkG82zVwo8w6Sq4JmfO2timzyg==",
|
||||||
|
"requires": {
|
||||||
|
"base58-js": "^1.0.0",
|
||||||
|
"bech32": "^2.0.0",
|
||||||
|
"sha256-uint8array": "^0.10.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"bitcoinjs-lib": {
|
"bitcoinjs-lib": {
|
||||||
"version": "6.1.3",
|
"version": "6.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz",
|
||||||
@@ -13361,6 +13488,14 @@
|
|||||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||||
"devOptional": true
|
"devOptional": true
|
||||||
},
|
},
|
||||||
|
"cron": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/cron/-/cron-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-1eRRlIT0UfIqauwbG9pkg3J6CX9A6My2ytJWqAXoK0T9oJnUZTzGBNPxao0zjodIbPgf8UQWjE62BMb9eVllSQ==",
|
||||||
|
"requires": {
|
||||||
|
"luxon": "^3.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cross-spawn": {
|
"cross-spawn": {
|
||||||
"version": "7.0.3",
|
"version": "7.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||||
@@ -15656,6 +15791,11 @@
|
|||||||
"yallist": "^4.0.0"
|
"yallist": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"luxon": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg=="
|
||||||
|
},
|
||||||
"macos-release": {
|
"macos-release": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
|
||||||
@@ -17045,6 +17185,11 @@
|
|||||||
"safe-buffer": "^5.0.1"
|
"safe-buffer": "^5.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sha256-uint8array": {
|
||||||
|
"version": "0.10.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/sha256-uint8array/-/sha256-uint8array-0.10.5.tgz",
|
||||||
|
"integrity": "sha512-KjYP8M6y8VvV62lnSSZwzutuwqphVOOVQamP+GmmClZcYhbq1HSIw/M2tlKgHndiaIwe3tFG5X38YYsQfUdItw=="
|
||||||
|
},
|
||||||
"shebang-command": {
|
"shebang-command": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
|
|||||||
@@ -24,8 +24,10 @@
|
|||||||
"@nestjs/config": "^2.3.2",
|
"@nestjs/config": "^2.3.2",
|
||||||
"@nestjs/core": "^9.0.0",
|
"@nestjs/core": "^9.0.0",
|
||||||
"@nestjs/platform-fastify": "^9.4.2",
|
"@nestjs/platform-fastify": "^9.4.2",
|
||||||
|
"@nestjs/schedule": "^3.0.1",
|
||||||
"@nestjs/typeorm": "^10.0.0",
|
"@nestjs/typeorm": "^10.0.0",
|
||||||
"big.js": "^6.2.1",
|
"big.js": "^6.2.1",
|
||||||
|
"bitcoin-address-validation": "^2.2.1",
|
||||||
"bitcoinjs-lib": "^6.1.3",
|
"bitcoinjs-lib": "^6.1.3",
|
||||||
"bs58": "^5.0.0",
|
"bs58": "^5.0.0",
|
||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
@@ -42,6 +44,7 @@
|
|||||||
"@nestjs/schematics": "^9.0.0",
|
"@nestjs/schematics": "^9.0.0",
|
||||||
"@nestjs/testing": "^9.0.0",
|
"@nestjs/testing": "^9.0.0",
|
||||||
"@types/big.js": "^6.1.6",
|
"@types/big.js": "^6.1.6",
|
||||||
|
"@types/cron": "^2.0.1",
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"@types/jest": "29.5.1",
|
"@types/jest": "29.5.1",
|
||||||
"@types/node": "18.16.12",
|
"@types/node": "18.16.12",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
import { DateTimeTransformer } from '../utils/DateTimeTransformer';
|
import { DateTimeTransformer } from '../utils/DateTimeTransformer';
|
||||||
import { TrackedEntity } from '../utils/TrackedEntity.entity';
|
import { TrackedEntity } from '../utils/TrackedEntity.entity';
|
||||||
@@ -15,9 +15,11 @@ export class ClientStatisticsEntity extends TrackedEntity {
|
|||||||
@Column()
|
@Column()
|
||||||
clientName: string;
|
clientName: string;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@Column({ length: 8, type: 'varchar' })
|
@Column({ length: 8, type: 'varchar' })
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
|
|
||||||
|
@Index()
|
||||||
@Column({
|
@Column({
|
||||||
type: 'datetime',
|
type: 'datetime',
|
||||||
transformer: new DateTimeTransformer()
|
transformer: new DateTimeTransformer()
|
||||||
|
|||||||
@@ -19,6 +19,17 @@ export class ClientStatisticsService {
|
|||||||
return await this.clientStatisticsRepository.save(clientStatistic);
|
return await this.clientStatisticsRepository.save(clientStatistic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async deleteOldStatistics() {
|
||||||
|
const oneDayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
||||||
|
|
||||||
|
return await this.clientStatisticsRepository
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(ClientStatisticsEntity)
|
||||||
|
.where('time < :time', { time: oneDayAgo })
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
|
||||||
public async getHashRateForAddress(address: string) {
|
public async getHashRateForAddress(address: string) {
|
||||||
|
|
||||||
const query = `
|
const query = `
|
||||||
|
|||||||
@@ -25,6 +25,19 @@ export class ClientService {
|
|||||||
return await this.clientRepository.softDelete({ sessionId });
|
return await this.clientRepository.softDelete({ sessionId });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async deleteOldClients() {
|
||||||
|
|
||||||
|
const oneDayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
||||||
|
|
||||||
|
return await this.clientRepository
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(ClientEntity)
|
||||||
|
.where('deletedAt < :time', { time: oneDayAgo })
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public async updateBestDifficulty(sessionId: string, bestDifficulty: number) {
|
public async updateBestDifficulty(sessionId: string, bestDifficulty: number) {
|
||||||
return await this.clientRepository.update({ sessionId }, { bestDifficulty });
|
return await this.clientRepository.update({ sessionId }, { bestDifficulty });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
import { Controller, Get, NotFoundException, Param } from '@nestjs/common';
|
import { Controller, Get, NotFoundException, Param } from '@nestjs/common';
|
||||||
|
|
||||||
import { AppService } from './app.service';
|
|
||||||
import { ClientStatisticsService } from './ORM/client-statistics/client-statistics.service';
|
import { ClientStatisticsService } from './ORM/client-statistics/client-statistics.service';
|
||||||
import { ClientService } from './ORM/client/client.service';
|
import { ClientService } from './ORM/client/client.service';
|
||||||
import { StratumV1Service } from './stratum-v1.service';
|
|
||||||
|
|
||||||
|
|
||||||
@Controller()
|
@Controller()
|
||||||
export class AppController {
|
export class AppController {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly appService: AppService,
|
|
||||||
private readonly stratumV1Service: StratumV1Service,
|
|
||||||
private readonly clientService: ClientService,
|
private readonly clientService: ClientService,
|
||||||
private readonly clientStatisticsService: ClientStatisticsService
|
private readonly clientStatisticsService: ClientStatisticsService
|
||||||
) { }
|
) { }
|
||||||
|
|||||||
+10
-5
@@ -1,14 +1,16 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { ConfigModule } from '@nestjs/config';
|
import { ConfigModule } from '@nestjs/config';
|
||||||
|
import { ScheduleModule } from '@nestjs/schedule';
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
|
||||||
import { BitcoinRpcService } from './bitcoin-rpc.service';
|
|
||||||
import { BlockTemplateService } from './BlockTemplateService';
|
|
||||||
import { ClientStatisticsModule } from './ORM/client-statistics/client-statistics.module';
|
import { ClientStatisticsModule } from './ORM/client-statistics/client-statistics.module';
|
||||||
import { ClientModule } from './ORM/client/client.module';
|
import { ClientModule } from './ORM/client/client.module';
|
||||||
import { StratumV1Service } from './stratum-v1.service';
|
import { BitcoinRpcService } from './services/bitcoin-rpc.service';
|
||||||
|
import { BlockTemplateService } from './services/block-template.service';
|
||||||
|
import { CleanupService } from './services/cleanup.service';
|
||||||
|
import { StratumV1Service } from './services/stratum-v1.service';
|
||||||
|
|
||||||
|
|
||||||
const ORMModules = [
|
const ORMModules = [
|
||||||
ClientStatisticsModule,
|
ClientStatisticsModule,
|
||||||
@@ -23,12 +25,15 @@ const ORMModules = [
|
|||||||
database: './DB/public-pool.sqlite',
|
database: './DB/public-pool.sqlite',
|
||||||
synchronize: true,
|
synchronize: true,
|
||||||
autoLoadEntities: true,
|
autoLoadEntities: true,
|
||||||
|
logging: false
|
||||||
}),
|
}),
|
||||||
|
ScheduleModule.forRoot(),
|
||||||
...ORMModules
|
...ORMModules
|
||||||
],
|
],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [
|
providers: [
|
||||||
AppService,
|
|
||||||
|
CleanupService,
|
||||||
StratumV1Service,
|
StratumV1Service,
|
||||||
BitcoinRpcService,
|
BitcoinRpcService,
|
||||||
BlockTemplateService
|
BlockTemplateService
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class AppService {
|
|
||||||
getHello(): string {
|
|
||||||
return 'Hello World!';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+26
-2
@@ -1,3 +1,4 @@
|
|||||||
|
import { AddressType, getAddressInfo } from 'bitcoin-address-validation';
|
||||||
import * as bitcoinjs from 'bitcoinjs-lib';
|
import * as bitcoinjs from 'bitcoinjs-lib';
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
import { MerkleTree } from 'merkletreejs';
|
import { MerkleTree } from 'merkletreejs';
|
||||||
@@ -134,10 +135,9 @@ export class MiningJob {
|
|||||||
let rewardBalance = reward;
|
let rewardBalance = reward;
|
||||||
|
|
||||||
addresses.forEach(recipientAddress => {
|
addresses.forEach(recipientAddress => {
|
||||||
const scriptPubKey = bitcoinjs.payments.p2wpkh({ address: recipientAddress.address, network: bitcoinjs.networks.testnet });
|
|
||||||
const amount = Math.floor((recipientAddress.percent / 100) * reward);
|
const amount = Math.floor((recipientAddress.percent / 100) * reward);
|
||||||
rewardBalance -= amount;
|
rewardBalance -= amount;
|
||||||
coinbaseTransaction.addOutput(scriptPubKey.output, amount);
|
coinbaseTransaction.addOutput(this.getPaymentScript(recipientAddress.address), amount);
|
||||||
})
|
})
|
||||||
|
|
||||||
//Add any remaining sats from the Math.floor
|
//Add any remaining sats from the Math.floor
|
||||||
@@ -151,6 +151,30 @@ export class MiningJob {
|
|||||||
return coinbaseTransaction;
|
return coinbaseTransaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getPaymentScript(address: string): Buffer {
|
||||||
|
const addressInfo = getAddressInfo(address);
|
||||||
|
switch (addressInfo.type) {
|
||||||
|
case AddressType.p2wpkh: {
|
||||||
|
return bitcoinjs.payments.p2wpkh({ address, network: bitcoinjs.networks.testnet }).output;
|
||||||
|
}
|
||||||
|
case AddressType.p2pkh: {
|
||||||
|
return bitcoinjs.payments.p2pkh({ address }).output;;
|
||||||
|
}
|
||||||
|
case AddressType.p2sh: {
|
||||||
|
return bitcoinjs.payments.p2sh({ address }).output;;
|
||||||
|
}
|
||||||
|
case AddressType.p2tr: {
|
||||||
|
return bitcoinjs.payments.p2tr({ address }).output;;
|
||||||
|
}
|
||||||
|
case AddressType.p2wsh: {
|
||||||
|
return bitcoinjs.payments.p2wsh({ address }).output;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
return Buffer.alloc(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private sha256(data) {
|
private sha256(data) {
|
||||||
return crypto.createHash('sha256').update(data).digest()
|
return crypto.createHash('sha256').update(data).digest()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ import * as crypto from 'crypto';
|
|||||||
import { Socket } from 'net';
|
import { Socket } from 'net';
|
||||||
import { combineLatest, interval, startWith } from 'rxjs';
|
import { combineLatest, interval, startWith } from 'rxjs';
|
||||||
|
|
||||||
import { BitcoinRpcService } from '../bitcoin-rpc.service';
|
|
||||||
import { BlockTemplateService } from '../BlockTemplateService';
|
|
||||||
import { ClientStatisticsService } from '../ORM/client-statistics/client-statistics.service';
|
import { ClientStatisticsService } from '../ORM/client-statistics/client-statistics.service';
|
||||||
import { ClientEntity } from '../ORM/client/client.entity';
|
import { ClientEntity } from '../ORM/client/client.entity';
|
||||||
import { ClientService } from '../ORM/client/client.service';
|
import { ClientService } from '../ORM/client/client.service';
|
||||||
import { StratumV1JobsService } from '../stratum-v1-jobs.service';
|
import { BitcoinRpcService } from '../services/bitcoin-rpc.service';
|
||||||
|
import { BlockTemplateService } from '../services/block-template.service';
|
||||||
|
import { StratumV1JobsService } from '../services/stratum-v1-jobs.service';
|
||||||
import { EasyUnsubscribe } from '../utils/AutoUnsubscribe';
|
import { EasyUnsubscribe } from '../utils/AutoUnsubscribe';
|
||||||
import { eRequestMethod } from './enums/eRequestMethod';
|
import { eRequestMethod } from './enums/eRequestMethod';
|
||||||
import { MiningJob } from './MiningJob';
|
import { MiningJob } from './MiningJob';
|
||||||
@@ -22,6 +22,7 @@ import { SuggestDifficulty } from './stratum-messages/SuggestDifficultyMessage';
|
|||||||
import { StratumV1ClientStatistics } from './StratumV1ClientStatistics';
|
import { StratumV1ClientStatistics } from './StratumV1ClientStatistics';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export class StratumV1Client extends EasyUnsubscribe {
|
export class StratumV1Client extends EasyUnsubscribe {
|
||||||
|
|
||||||
private clientSubscription: SubscriptionMessage;
|
private clientSubscription: SubscriptionMessage;
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ import { ConfigService } from '@nestjs/config';
|
|||||||
import { RPCClient } from 'rpc-bitcoin';
|
import { RPCClient } from 'rpc-bitcoin';
|
||||||
import { BehaviorSubject, filter } from 'rxjs';
|
import { BehaviorSubject, filter } from 'rxjs';
|
||||||
|
|
||||||
import { IBlockTemplate } from './models/bitcoin-rpc/IBlockTemplate';
|
import { IBlockTemplate } from '../models/bitcoin-rpc/IBlockTemplate';
|
||||||
import { IMiningInfo } from './models/bitcoin-rpc/IMiningInfo';
|
import { IMiningInfo } from '../models/bitcoin-rpc/IMiningInfo';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { from, map, Observable, shareReplay, switchMap, tap } from 'rxjs';
|
import { from, map, Observable, shareReplay, switchMap, tap } from 'rxjs';
|
||||||
|
|
||||||
|
import { IBlockTemplate } from '../models/bitcoin-rpc/IBlockTemplate';
|
||||||
import { BitcoinRpcService } from './bitcoin-rpc.service';
|
import { BitcoinRpcService } from './bitcoin-rpc.service';
|
||||||
import { IBlockTemplate } from './models/bitcoin-rpc/IBlockTemplate';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class BlockTemplateService {
|
export class BlockTemplateService {
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import { Injectable, OnModuleInit } from '@nestjs/common';
|
||||||
|
import { Cron, CronExpression } from '@nestjs/schedule';
|
||||||
|
|
||||||
|
import { ClientStatisticsService } from '../ORM/client-statistics/client-statistics.service';
|
||||||
|
import { ClientService } from '../ORM/client/client.service';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class CleanupService implements OnModuleInit {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private clientStatisticsService: ClientStatisticsService,
|
||||||
|
private clientService: ClientService
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
onModuleInit() {
|
||||||
|
console.log('Cleanup service running.')
|
||||||
|
}
|
||||||
|
|
||||||
|
@Cron(CronExpression.EVERY_HOUR)
|
||||||
|
private async deleteOldStatistics() {
|
||||||
|
const deletedStatistics = await this.clientStatisticsService.deleteOldStatistics();
|
||||||
|
console.log(`Deleted ${deletedStatistics.affected} old statistics`);
|
||||||
|
const deletedClients = await this.clientService.deleteOldClients();
|
||||||
|
console.log(`Deleted ${deletedClients.affected} old clients`);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { MiningJob } from './models/MiningJob';
|
import { MiningJob } from '../models/MiningJob';
|
||||||
|
|
||||||
|
|
||||||
export class StratumV1JobsService {
|
export class StratumV1JobsService {
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import { Injectable, OnModuleInit } from '@nestjs/common';
|
import { Injectable, OnModuleInit } from '@nestjs/common';
|
||||||
import { Server, Socket } from 'net';
|
import { Server, Socket } from 'net';
|
||||||
|
|
||||||
|
import { StratumV1Client } from '../models/StratumV1Client';
|
||||||
|
import { ClientStatisticsService } from '../ORM/client-statistics/client-statistics.service';
|
||||||
|
import { ClientService } from '../ORM/client/client.service';
|
||||||
import { BitcoinRpcService } from './bitcoin-rpc.service';
|
import { BitcoinRpcService } from './bitcoin-rpc.service';
|
||||||
import { BlockTemplateService } from './BlockTemplateService';
|
import { BlockTemplateService } from './block-template.service';
|
||||||
import { StratumV1Client } from './models/StratumV1Client';
|
|
||||||
import { ClientStatisticsService } from './ORM/client-statistics/client-statistics.service';
|
|
||||||
import { ClientService } from './ORM/client/client.service';
|
|
||||||
import { StratumV1JobsService } from './stratum-v1-jobs.service';
|
import { StratumV1JobsService } from './stratum-v1-jobs.service';
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user