From 14aef9b8a3dc597ecb8f0666e8bd4d9d99b9c93e Mon Sep 17 00:00:00 2001 From: Marvin ROGER Date: Wed, 13 Mar 2019 12:49:38 +0100 Subject: [PATCH] feat: move CLI into another package as a monorepo (#61) * feat: move CLI into another package as a monorepo * fix: fix lint * feat: upgrade dependencies * fix: fix pow-benchmark example * feat: add AssemblyScript wasm * Revert "feat: add AssemblyScript wasm" This reverts commit 6f658749b37012bb711568c11cc54bda84c33994. * fix: add shebang --- .gitignore | 5 +- .gitmodules | 4 +- .travis.yml | 8 +- examples/multi-threaded/index.html | 60 - examples/multi-threaded/worker.js | 14 - examples/pow-benchmark/worker.js | 14 - lerna.json | 7 + package.json | 106 +- .../nanocurrency-cli/__tests__}/cli.js | 4 +- packages/nanocurrency-cli/package.json | 41 + .../nanocurrency-cli/src}/index.ts | 8 +- packages/nanocurrency-cli/tsconfig.json | 7 + .../__tests__}/accelerated.js.bak | 0 .../nanocurrency/__tests__}/block.js | 0 .../nanocurrency/__tests__}/browser.js | 0 .../nanocurrency/__tests__}/conversion.js | 0 .../nanocurrency/__tests__}/data/invalid.js | 0 .../__tests__}/data/valid_blocks.json | 0 .../__tests__}/data/valid_keys.json | 0 .../nanocurrency/__tests__}/hash.js | 0 .../nanocurrency/__tests__}/keys.js | 0 .../nanocurrency/__tests__}/signature.js | 0 .../nanocurrency/__tests__}/work.js | 0 .../nanocurrency/docs}/assets/css/main.css | 0 .../docs}/assets/css/main.css.map | 0 .../docs}/assets/images/icons.png | Bin .../docs}/assets/images/icons@2x.png | Bin .../docs}/assets/images/widgets.png | Bin .../docs}/assets/images/widgets@2x.png | Bin .../nanocurrency/docs}/assets/js/main.js | 0 .../nanocurrency/docs}/assets/js/search.js | 0 .../nanocurrency/docs}/enums/unit.html | 0 .../nanocurrency/docs}/index.html | 0 .../docs}/interfaces/blockdata.html | 0 .../docs}/interfaces/computeworkparams.html | 0 .../docs}/interfaces/convertparams.html | 0 .../docs}/interfaces/deriveaddressparams.html | 0 .../docs}/interfaces/hashblockparams.html | 0 .../docs}/interfaces/signblockparams.html | 0 .../docs}/interfaces/validateworkparams.html | 0 .../docs}/interfaces/verifyblockparams.html | 0 .../examples}/pow-benchmark/index.html | 7 +- .../examples/pow-benchmark/worker.js | 14 + .../nanocurrency/native.d.ts | 0 packages/nanocurrency/package.json | 80 + .../nanocurrency/rollup.config.js | 11 - .../nanocurrency/src}/accelerated.ts | 0 {src => packages/nanocurrency/src}/block.ts | 0 {src => packages/nanocurrency/src}/check.ts | 0 .../nanocurrency/src}/conversion.ts | 2 +- {src => packages/nanocurrency/src}/hash.ts | 0 {src => packages/nanocurrency/src}/index.ts | 0 {src => packages/nanocurrency/src}/keys.ts | 2 +- {src => packages/nanocurrency/src}/nacl.ts | 0 .../nanocurrency/src}/nano-base32.ts | 4 +- .../nanocurrency/src/native/blake2/.gitignore | 21 + .../nanocurrency/src/native/blake2/COPYING | 121 + .../nanocurrency/src/native/blake2/README.md | 25 + .../src/native/blake2/b2sum/README.md | 12 + .../src/native/blake2/b2sum/b2sum.1 | 93 + .../src/native/blake2/b2sum/b2sum.c | 387 + .../src/native/blake2/b2sum/makefile | 24 + .../src/native/blake2/bench/bench.c | 94 + .../src/native/blake2/bench/do.gplot | 19 + .../src/native/blake2/bench/makefile | 20 + .../src/native/blake2/bench/md5.c | 22 + .../Blake2Sharp.CompressionCodeGen.csproj | 54 + .../Blake2Sharp.CompressionCodeGen/Program.cs | 93 + .../Properties/AssemblyInfo.cs | 47 + .../Blake2Sharp.Tests.csproj | 94 + .../Blake2Sharp.Tests/DebugNodeHasher.cs | 39 + .../Properties/AssemblyInfo.cs | 47 + .../Blake2Sharp.Tests/SequentialTests.cs | 76 + .../csharp/Blake2Sharp.Tests/TestVectors.cs | 539 + .../src/native/blake2/csharp/Blake2Sharp.sln | 34 + .../blake2/csharp/Blake2Sharp/Blake2B.cs | 72 + .../csharp/Blake2Sharp/Blake2BConfig.cs | 57 + .../Blake2Sharp/Blake2BCore-FullyUnrolled.cs | 1455 + .../csharp/Blake2Sharp/Blake2BCore-Inline.cs | 177 + .../csharp/Blake2Sharp/Blake2BCore-Simple.cs | 88 + .../blake2/csharp/Blake2Sharp/Blake2BCore.cs | 198 + .../csharp/Blake2Sharp/Blake2BHasher.cs | 66 + .../csharp/Blake2Sharp/Blake2BNodeHasher.cs | 52 + .../csharp/Blake2Sharp/Blake2BTreeConfig.cs | 52 + .../csharp/Blake2Sharp/Blake2IvBuilder.cs | 76 + .../csharp/Blake2Sharp/Blake2Sharp.csproj | 60 + .../blake2/csharp/Blake2Sharp/Hasher.cs | 60 + .../blake2/csharp/Blake2Sharp/NodeHasher.cs | 30 + .../Blake2Sharp/Properties/AssemblyInfo.cs | 36 + .../blake2/csharp/Blake2Sharp/TreeHasher.cs | 77 + .../blake2/csharp/Blake2Sharp/compression.c | 26 + .../src/native/blake2/ref/blake2-impl.h | 160 + .../src/native/blake2/ref/blake2.h | 195 + .../src/native/blake2/ref/blake2b-ref.c | 379 + .../src/native/blake2/ref/blake2bp-ref.c | 359 + .../src/native/blake2/ref/blake2s-ref.c | 367 + .../src/native/blake2/ref/blake2sp-ref.c | 359 + .../src/native/blake2/ref/blake2xb-ref.c | 241 + .../src/native/blake2/ref/blake2xs-ref.c | 239 + .../src/native/blake2/ref/genkat-c.c | 139 + .../src/native/blake2/ref/genkat-json.c | 154 + .../src/native/blake2/ref/makefile | 40 + .../src/native/blake2/sse/blake2-config.h | 72 + .../src/native/blake2/sse/blake2-impl.h | 160 + .../src/native/blake2/sse/blake2.h | 195 + .../src/native/blake2/sse/blake2b-load-sse2.h | 68 + .../native/blake2/sse/blake2b-load-sse41.h | 402 + .../src/native/blake2/sse/blake2b-round.h | 157 + .../src/native/blake2/sse/blake2b.c | 373 + .../src/native/blake2/sse/blake2bp.c | 361 + .../src/native/blake2/sse/blake2s-load-sse2.h | 60 + .../native/blake2/sse/blake2s-load-sse41.h | 229 + .../src/native/blake2/sse/blake2s-load-xop.h | 191 + .../src/native/blake2/sse/blake2s-round.h | 88 + .../src/native/blake2/sse/blake2s.c | 363 + .../src/native/blake2/sse/blake2sp.c | 358 + .../src/native/blake2/sse/blake2xb.c | 241 + .../src/native/blake2/sse/blake2xs.c | 239 + .../src/native/blake2/sse/genkat-c.c | 139 + .../src/native/blake2/sse/genkat-json.c | 154 + .../src/native/blake2/sse/makefile | 40 + .../native/blake2/testvectors/blake2-kat.h | 51295 ++++++++++++++++ .../native/blake2/testvectors/blake2-kat.json | 18434 ++++++ .../native/blake2/testvectors/blake2b-kat.txt | 1025 + .../blake2/testvectors/blake2bp-kat.txt | 1025 + .../native/blake2/testvectors/blake2s-kat.txt | 1025 + .../blake2/testvectors/blake2sp-kat.txt | 1025 + .../nanocurrency/src}/native/functions.c | 0 {src => packages/nanocurrency/src}/parse.ts | 0 .../nanocurrency/src}/signature.ts | 0 {src => packages/nanocurrency/src}/utils.ts | 2 +- {src => packages/nanocurrency/src}/work.ts | 2 +- packages/nanocurrency/tsconfig.json | 9 + .../nanocurrency/types-local}/blakejs.d.ts | 0 src/native/blake2 | 1 - tsconfig.json | 5 +- yarn.lock | 6365 +- 137 files changed, 88973 insertions(+), 2603 deletions(-) delete mode 100644 examples/multi-threaded/index.html delete mode 100644 examples/multi-threaded/worker.js delete mode 100644 examples/pow-benchmark/worker.js create mode 100644 lerna.json rename {__tests__ => packages/nanocurrency-cli/__tests__}/cli.js (98%) create mode 100644 packages/nanocurrency-cli/package.json rename {src/cli => packages/nanocurrency-cli/src}/index.ts (98%) create mode 100644 packages/nanocurrency-cli/tsconfig.json rename {__tests__ => packages/nanocurrency/__tests__}/accelerated.js.bak (100%) rename {__tests__ => packages/nanocurrency/__tests__}/block.js (100%) rename {__tests__ => packages/nanocurrency/__tests__}/browser.js (100%) rename {__tests__ => packages/nanocurrency/__tests__}/conversion.js (100%) rename {__tests__ => packages/nanocurrency/__tests__}/data/invalid.js (100%) rename {__tests__ => packages/nanocurrency/__tests__}/data/valid_blocks.json (100%) rename {__tests__ => packages/nanocurrency/__tests__}/data/valid_keys.json (100%) rename {__tests__ => packages/nanocurrency/__tests__}/hash.js (100%) rename {__tests__ => packages/nanocurrency/__tests__}/keys.js (100%) rename {__tests__ => packages/nanocurrency/__tests__}/signature.js (100%) rename {__tests__ => packages/nanocurrency/__tests__}/work.js (100%) rename {docs => packages/nanocurrency/docs}/assets/css/main.css (100%) rename {docs => packages/nanocurrency/docs}/assets/css/main.css.map (100%) rename {docs => packages/nanocurrency/docs}/assets/images/icons.png (100%) rename {docs => packages/nanocurrency/docs}/assets/images/icons@2x.png (100%) rename {docs => packages/nanocurrency/docs}/assets/images/widgets.png (100%) rename {docs => packages/nanocurrency/docs}/assets/images/widgets@2x.png (100%) rename {docs => packages/nanocurrency/docs}/assets/js/main.js (100%) rename {docs => packages/nanocurrency/docs}/assets/js/search.js (100%) rename {docs => packages/nanocurrency/docs}/enums/unit.html (100%) rename {docs => packages/nanocurrency/docs}/index.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/blockdata.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/computeworkparams.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/convertparams.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/deriveaddressparams.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/hashblockparams.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/signblockparams.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/validateworkparams.html (100%) rename {docs => packages/nanocurrency/docs}/interfaces/verifyblockparams.html (100%) rename {examples => packages/nanocurrency/examples}/pow-benchmark/index.html (93%) create mode 100644 packages/nanocurrency/examples/pow-benchmark/worker.js rename native.d.ts => packages/nanocurrency/native.d.ts (100%) create mode 100644 packages/nanocurrency/package.json rename rollup.config.js => packages/nanocurrency/rollup.config.js (75%) rename {src => packages/nanocurrency/src}/accelerated.ts (100%) rename {src => packages/nanocurrency/src}/block.ts (100%) rename {src => packages/nanocurrency/src}/check.ts (100%) rename {src => packages/nanocurrency/src}/conversion.ts (97%) rename {src => packages/nanocurrency/src}/hash.ts (100%) rename {src => packages/nanocurrency/src}/index.ts (100%) rename {src => packages/nanocurrency/src}/keys.ts (98%) rename {src => packages/nanocurrency/src}/nacl.ts (100%) rename {src => packages/nanocurrency/src}/nano-base32.ts (95%) create mode 100644 packages/nanocurrency/src/native/blake2/.gitignore create mode 100644 packages/nanocurrency/src/native/blake2/COPYING create mode 100644 packages/nanocurrency/src/native/blake2/README.md create mode 100644 packages/nanocurrency/src/native/blake2/b2sum/README.md create mode 100644 packages/nanocurrency/src/native/blake2/b2sum/b2sum.1 create mode 100644 packages/nanocurrency/src/native/blake2/b2sum/b2sum.c create mode 100644 packages/nanocurrency/src/native/blake2/b2sum/makefile create mode 100644 packages/nanocurrency/src/native/blake2/bench/bench.c create mode 100644 packages/nanocurrency/src/native/blake2/bench/do.gplot create mode 100644 packages/nanocurrency/src/native/blake2/bench/makefile create mode 100644 packages/nanocurrency/src/native/blake2/bench/md5.c create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.CompressionCodeGen/Blake2Sharp.CompressionCodeGen.csproj create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.CompressionCodeGen/Program.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.CompressionCodeGen/Properties/AssemblyInfo.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.Tests/Blake2Sharp.Tests.csproj create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.Tests/DebugNodeHasher.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.Tests/Properties/AssemblyInfo.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.Tests/SequentialTests.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.Tests/TestVectors.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp.sln create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2B.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BConfig.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BCore-FullyUnrolled.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BCore-Inline.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BCore-Simple.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BCore.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BHasher.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BNodeHasher.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2BTreeConfig.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2IvBuilder.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Blake2Sharp.csproj create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Hasher.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/NodeHasher.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/Properties/AssemblyInfo.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/TreeHasher.cs create mode 100644 packages/nanocurrency/src/native/blake2/csharp/Blake2Sharp/compression.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2-impl.h create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2.h create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2b-ref.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2bp-ref.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2s-ref.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2sp-ref.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2xb-ref.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/blake2xs-ref.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/genkat-c.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/genkat-json.c create mode 100644 packages/nanocurrency/src/native/blake2/ref/makefile create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2-config.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2-impl.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2b-load-sse2.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2b-load-sse41.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2b-round.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2b.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2bp.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2s-load-sse2.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2s-load-sse41.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2s-load-xop.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2s-round.h create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2s.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2sp.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2xb.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/blake2xs.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/genkat-c.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/genkat-json.c create mode 100644 packages/nanocurrency/src/native/blake2/sse/makefile create mode 100644 packages/nanocurrency/src/native/blake2/testvectors/blake2-kat.h create mode 100644 packages/nanocurrency/src/native/blake2/testvectors/blake2-kat.json create mode 100644 packages/nanocurrency/src/native/blake2/testvectors/blake2b-kat.txt create mode 100644 packages/nanocurrency/src/native/blake2/testvectors/blake2bp-kat.txt create mode 100644 packages/nanocurrency/src/native/blake2/testvectors/blake2s-kat.txt create mode 100644 packages/nanocurrency/src/native/blake2/testvectors/blake2sp-kat.txt rename {src => packages/nanocurrency/src}/native/functions.c (100%) rename {src => packages/nanocurrency/src}/parse.ts (100%) rename {src => packages/nanocurrency/src}/signature.ts (100%) rename {src => packages/nanocurrency/src}/utils.ts (97%) rename {src => packages/nanocurrency/src}/work.ts (95%) create mode 100644 packages/nanocurrency/tsconfig.json rename {types-local => packages/nanocurrency/types-local}/blakejs.d.ts (100%) delete mode 160000 src/native/blake2 diff --git a/.gitignore b/.gitignore index ac98c5a..5cbe11f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ ### App ### -/dist/ -/native.js -/_test.js +dist/ +/packages/nanocurrency/native.js ### TS ### diff --git a/.gitmodules b/.gitmodules index bb04a95..7b5d23d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "src/native/blake2"] - path = src/native/blake2 +[submodule "packages/nanocurrency/src/native/blake2"] + path = packages/nanocurrency/src/native/blake2 url = https://github.com/BLAKE2/BLAKE2.git diff --git a/.travis.yml b/.travis.yml index e302048..1fef428 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,8 +14,6 @@ branches: install: - yarn script: - - yarn build:prod - - yarn test - - yarn lint -after_success: - - yarn travis-deploy-once "yarn semantic-release" + - yarn lerna run build:prod + - yarn lerna run test + - yarn lerna run lint diff --git a/examples/multi-threaded/index.html b/examples/multi-threaded/index.html deleted file mode 100644 index 6753c9c..0000000 --- a/examples/multi-threaded/index.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -

-    
-  
-
diff --git a/examples/multi-threaded/worker.js b/examples/multi-threaded/worker.js
deleted file mode 100644
index 3219923..0000000
--- a/examples/multi-threaded/worker.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* eslint-env worker */
-/* global NanoCurrency:false */
-
-importScripts('https://cdn.jsdelivr.net/npm/nanocurrency@2.0.0/dist/nanocurrency.umd.js');
-
-onmessage = async function({ data }) {
-  const { blockHash, workerNumber, workerCount } = data;
-
-  postMessage({ type: 'started' });
-
-  const work = await NanoCurrency.computeWork(blockHash, workerNumber, workerCount);
-
-  postMessage({ type: 'done', work });
-};
diff --git a/examples/pow-benchmark/worker.js b/examples/pow-benchmark/worker.js
deleted file mode 100644
index 3219923..0000000
--- a/examples/pow-benchmark/worker.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* eslint-env worker */
-/* global NanoCurrency:false */
-
-importScripts('https://cdn.jsdelivr.net/npm/nanocurrency@2.0.0/dist/nanocurrency.umd.js');
-
-onmessage = async function({ data }) {
-  const { blockHash, workerNumber, workerCount } = data;
-
-  postMessage({ type: 'started' });
-
-  const work = await NanoCurrency.computeWork(blockHash, workerNumber, workerCount);
-
-  postMessage({ type: 'done', work });
-};
diff --git a/lerna.json b/lerna.json
new file mode 100644
index 0000000..fac1066
--- /dev/null
+++ b/lerna.json
@@ -0,0 +1,7 @@
+{
+  "packages": [
+    "packages/*"
+  ],
+  "version": "independent",
+  "npmClient": "yarn"
+}
diff --git a/package.json b/package.json
index 4b45b94..a99b184 100644
--- a/package.json
+++ b/package.json
@@ -1,95 +1,19 @@
 {
-  "name": "nanocurrency",
-  "description":
-    "A toolkit for the Nano cryptocurrency, allowing you to derive keys, generate seeds, hashes, signatures, proofs of work and blocks.",
-  "version": "0.0.0-development",
-  "author": {
-    "name": "Marvin ROGER",
-    "email": "dev@marvinroger.fr",
-    "url": "https://www.marvinroger.fr"
-  },
-  "browser": {
-    "path": false,
-    "fs": false,
-    "crypto": false,
-    "util": false,
-    "./dist/nanocurrency.cjs.js": "./dist/nanocurrency.umd.js"
-  },
-  "bugs": "https://github.com/marvinroger/nanocurrency-js/issues",
+  "private": true,
+  "workspaces": [
+    "packages/*"
+  ],
   "dependencies": {
-    "bignumber.js": "^7.2.0",
-    "blakejs": "^1.1.0",
-    "yargs": "^12.0.1"
+    "@types/node": "^11.11.0",
+    "@types/yargs": "^12.0.9",
+    "cross-env": "^5.2.0",
+    "jest": "^24.3.1",
+    "lerna": "^3.13.1",
+    "prettier": "^1.16.4",
+    "tslint": "^5.13.1",
+    "typedoc": "^0.14.2",
+    "typedoc-plugin-internal-external": "^2.0.1",
+    "typescript": "^3.3.3333"
   },
-  "devDependencies": {
-    "@types/node": "^10.0.0",
-    "@types/yargs": "^11.0.0",
-    "bundlesize": "^0.17.0",
-    "cross-env": "^5.1.3",
-    "cross-os": "^1.2.2",
-    "cross-var": "^1.1.0",
-    "jest": "^23.0.0",
-    "prettier": "^1.12.1",
-    "puppeteer": "^1.1.1",
-    "rollup": "^0.62.0",
-    "rollup-plugin-commonjs": "^9.0.0",
-    "rollup-plugin-license": "^0.7.0",
-    "rollup-plugin-node-resolve": "^3.0.2",
-    "rollup-plugin-terser": "^1.0.1",
-    "rollup-plugin-typescript2": "^0.14.0",
-    "semantic-release": "^15.0.2",
-    "travis-deploy-once": "^5.0.0",
-    "tslint": "^5.10.0",
-    "tslint-config-airbnb": "^5.8.0",
-    "tslint-config-prettier": "^1.12.0",
-    "typedoc": "^0.11.1",
-    "typedoc-plugin-internal-external": "^1.0.10",
-    "typescript": "^2.8.3"
-  },
-  "files": ["dist/"],
-  "homepage": "https://github.com/marvinroger/nanocurrency-js",
-  "jest": {
-    "testPathIgnorePatterns": ["/__tests__/data/", "/node_modules/"]
-  },
-  "keywords": ["crypto", "currency", "nano", "pow", "raiblocks"],
-  "license": "GPL-3.0",
-  "main": "dist/nanocurrency.cjs.js",
-  "module": "dist/nanocurrency.esm.js",
-  "types": "dist/types/index.d.ts",
-  "bin": {
-    "nanocurrency": "dist/bin/index.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/marvinroger/nanocurrency-js.git"
-  },
-  "scripts": {
-    "build:dev": "yarn build:dev:native && yarn build:dev:js",
-    "build:dev:js": "cross-env NODE_ENV=development rollup -c",
-    "build:dev:native": "cross-env EMCC_ARGS=\"\" cross-os build:native__cross",
-    "build:native__common":
-      "cross-var docker run --rm -v $PWD:/src trzeci/emscripten emcc -o native.js $EMCC_ARGS -s WASM=1 -s MODULARIZE=1 -s SINGLE_FILE=1 -s \"EXTRA_EXPORTED_RUNTIME_METHODS=[\\\"cwrap\\\"]\" src/native/functions.c src/native/blake2/ref/blake2b-ref.c",
-    "build:native__cross": {
-      "darwin": "cross-env PWD=\"$(pwd)\" yarn build:native__common",
-      "linux": "cross-env PWD=\"$(pwd)\" yarn build:native__common",
-      "win32": "cross-env PWD=\"%cd%\" yarn build:native__common"
-    },
-    "build:prod": "yarn build:prod:native && yarn build:prod:js",
-    "build:prod:js": "cross-env NODE_ENV=production rollup -c",
-    "build:prod:native":
-      "cross-env EMCC_ARGS=\"-O3 --closure 1 --llvm-lto 3\" cross-os build:native__cross",
-    "generate-docs": "typedoc src/index.ts",
-    "format": "prettier --write \"{src,__tests__}/**/*.{ts,js}\"",
-    "lint": "tslint --project . \"src/**/*.ts\"",
-    "prepublishOnly": "yarn build:prod:js",
-    "semantic-release": "semantic-release",
-    "test": "jest && bundlesize",
-    "travis-deploy-once": "travis-deploy-once"
-  },
-  "bundlesize": [
-    {
-      "path": "./dist/nanocurrency.*.js",
-      "maxSize": "100kB"
-    }
-  ]
+  "name": "nanocurrency-workspace"
 }
diff --git a/__tests__/cli.js b/packages/nanocurrency-cli/__tests__/cli.js
similarity index 98%
rename from __tests__/cli.js
rename to packages/nanocurrency-cli/__tests__/cli.js
index a762da6..ec01ec5 100644
--- a/__tests__/cli.js
+++ b/packages/nanocurrency-cli/__tests__/cli.js
@@ -3,12 +3,12 @@
 const path = require('path');
 const util = require('util');
 const exec = util.promisify(require('child_process').exec);
-const nano = require('../dist/nanocurrency.cjs');
+const nano = require('nanocurrency');
 
 const cli = async args => {
   try {
     const { stdout, stderr } = await exec(
-      'node ' + path.join(__dirname, '../dist/bin/index.js') + ' ' + args
+      'node ' + path.join(__dirname, '../dist/index.js') + ' ' + args
     );
 
     return {
diff --git a/packages/nanocurrency-cli/package.json b/packages/nanocurrency-cli/package.json
new file mode 100644
index 0000000..28eb76a
--- /dev/null
+++ b/packages/nanocurrency-cli/package.json
@@ -0,0 +1,41 @@
+{
+  "name": "nanocurrency-cli",
+  "description": "A toolkit for the Nano cryptocurrency, allowing you to derive keys, generate seeds, hashes, signatures, proofs of work and blocks.",
+  "version": "0.0.0-development",
+  "author": {
+    "name": "Marvin ROGER",
+    "email": "dev@marvinroger.fr",
+    "url": "https://www.marvinroger.fr"
+  },
+  "bugs": "https://github.com/marvinroger/nanocurrency-js/issues",
+  "dependencies": {
+    "nanocurrency": "^2.0.4",
+    "yargs": "^13.0.0"
+  },
+  "files": [
+    "dist/"
+  ],
+  "homepage": "https://github.com/marvinroger/nanocurrency-js",
+  "keywords": [
+    "crypto",
+    "currency",
+    "nano",
+    "pow",
+    "raiblocks"
+  ],
+  "license": "GPL-3.0",
+  "bin": {
+    "nanocurrency": "dist/index.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/marvinroger/nanocurrency-js.git"
+  },
+  "scripts": {
+    "build:prod": "tsc --build",
+    "format": "prettier --write \"{src,__tests__}/**/*.{ts,js}\"",
+    "lint": "tslint --project . \"src/**/*.ts\"",
+    "prepublishOnly": "yarn build",
+    "test": "jest"
+  }
+}
diff --git a/src/cli/index.ts b/packages/nanocurrency-cli/src/index.ts
similarity index 98%
rename from src/cli/index.ts
rename to packages/nanocurrency-cli/src/index.ts
index 12fbf4c..41694c3 100644
--- a/src/cli/index.ts
+++ b/packages/nanocurrency-cli/src/index.ts
@@ -1,6 +1,6 @@
+#!/usr/bin/env node
 import * as yargs from 'yargs';
-
-const nanocurrency = require('../nanocurrency.cjs');
+import * as nanocurrency from 'nanocurrency';
 
 const wrapSubcommand = (yargs: yargs.Argv) =>
   yargs
@@ -151,8 +151,8 @@ yargs
         },
         async argv => {
           const converted = await nanocurrency.convert(argv.input, {
-            from: argv.from,
-            to: argv.to,
+            from: argv.from as any,
+            to: argv.to as any,
           });
           console.log(converted);
         }
diff --git a/packages/nanocurrency-cli/tsconfig.json b/packages/nanocurrency-cli/tsconfig.json
new file mode 100644
index 0000000..f158630
--- /dev/null
+++ b/packages/nanocurrency-cli/tsconfig.json
@@ -0,0 +1,7 @@
+{
+  "extends": "../../tsconfig",
+  "files": ["src/index.ts"],
+  "compilerOptions": {
+    "outDir": "dist"
+  }
+}
diff --git a/__tests__/accelerated.js.bak b/packages/nanocurrency/__tests__/accelerated.js.bak
similarity index 100%
rename from __tests__/accelerated.js.bak
rename to packages/nanocurrency/__tests__/accelerated.js.bak
diff --git a/__tests__/block.js b/packages/nanocurrency/__tests__/block.js
similarity index 100%
rename from __tests__/block.js
rename to packages/nanocurrency/__tests__/block.js
diff --git a/__tests__/browser.js b/packages/nanocurrency/__tests__/browser.js
similarity index 100%
rename from __tests__/browser.js
rename to packages/nanocurrency/__tests__/browser.js
diff --git a/__tests__/conversion.js b/packages/nanocurrency/__tests__/conversion.js
similarity index 100%
rename from __tests__/conversion.js
rename to packages/nanocurrency/__tests__/conversion.js
diff --git a/__tests__/data/invalid.js b/packages/nanocurrency/__tests__/data/invalid.js
similarity index 100%
rename from __tests__/data/invalid.js
rename to packages/nanocurrency/__tests__/data/invalid.js
diff --git a/__tests__/data/valid_blocks.json b/packages/nanocurrency/__tests__/data/valid_blocks.json
similarity index 100%
rename from __tests__/data/valid_blocks.json
rename to packages/nanocurrency/__tests__/data/valid_blocks.json
diff --git a/__tests__/data/valid_keys.json b/packages/nanocurrency/__tests__/data/valid_keys.json
similarity index 100%
rename from __tests__/data/valid_keys.json
rename to packages/nanocurrency/__tests__/data/valid_keys.json
diff --git a/__tests__/hash.js b/packages/nanocurrency/__tests__/hash.js
similarity index 100%
rename from __tests__/hash.js
rename to packages/nanocurrency/__tests__/hash.js
diff --git a/__tests__/keys.js b/packages/nanocurrency/__tests__/keys.js
similarity index 100%
rename from __tests__/keys.js
rename to packages/nanocurrency/__tests__/keys.js
diff --git a/__tests__/signature.js b/packages/nanocurrency/__tests__/signature.js
similarity index 100%
rename from __tests__/signature.js
rename to packages/nanocurrency/__tests__/signature.js
diff --git a/__tests__/work.js b/packages/nanocurrency/__tests__/work.js
similarity index 100%
rename from __tests__/work.js
rename to packages/nanocurrency/__tests__/work.js
diff --git a/docs/assets/css/main.css b/packages/nanocurrency/docs/assets/css/main.css
similarity index 100%
rename from docs/assets/css/main.css
rename to packages/nanocurrency/docs/assets/css/main.css
diff --git a/docs/assets/css/main.css.map b/packages/nanocurrency/docs/assets/css/main.css.map
similarity index 100%
rename from docs/assets/css/main.css.map
rename to packages/nanocurrency/docs/assets/css/main.css.map
diff --git a/docs/assets/images/icons.png b/packages/nanocurrency/docs/assets/images/icons.png
similarity index 100%
rename from docs/assets/images/icons.png
rename to packages/nanocurrency/docs/assets/images/icons.png
diff --git a/docs/assets/images/icons@2x.png b/packages/nanocurrency/docs/assets/images/icons@2x.png
similarity index 100%
rename from docs/assets/images/icons@2x.png
rename to packages/nanocurrency/docs/assets/images/icons@2x.png
diff --git a/docs/assets/images/widgets.png b/packages/nanocurrency/docs/assets/images/widgets.png
similarity index 100%
rename from docs/assets/images/widgets.png
rename to packages/nanocurrency/docs/assets/images/widgets.png
diff --git a/docs/assets/images/widgets@2x.png b/packages/nanocurrency/docs/assets/images/widgets@2x.png
similarity index 100%
rename from docs/assets/images/widgets@2x.png
rename to packages/nanocurrency/docs/assets/images/widgets@2x.png
diff --git a/docs/assets/js/main.js b/packages/nanocurrency/docs/assets/js/main.js
similarity index 100%
rename from docs/assets/js/main.js
rename to packages/nanocurrency/docs/assets/js/main.js
diff --git a/docs/assets/js/search.js b/packages/nanocurrency/docs/assets/js/search.js
similarity index 100%
rename from docs/assets/js/search.js
rename to packages/nanocurrency/docs/assets/js/search.js
diff --git a/docs/enums/unit.html b/packages/nanocurrency/docs/enums/unit.html
similarity index 100%
rename from docs/enums/unit.html
rename to packages/nanocurrency/docs/enums/unit.html
diff --git a/docs/index.html b/packages/nanocurrency/docs/index.html
similarity index 100%
rename from docs/index.html
rename to packages/nanocurrency/docs/index.html
diff --git a/docs/interfaces/blockdata.html b/packages/nanocurrency/docs/interfaces/blockdata.html
similarity index 100%
rename from docs/interfaces/blockdata.html
rename to packages/nanocurrency/docs/interfaces/blockdata.html
diff --git a/docs/interfaces/computeworkparams.html b/packages/nanocurrency/docs/interfaces/computeworkparams.html
similarity index 100%
rename from docs/interfaces/computeworkparams.html
rename to packages/nanocurrency/docs/interfaces/computeworkparams.html
diff --git a/docs/interfaces/convertparams.html b/packages/nanocurrency/docs/interfaces/convertparams.html
similarity index 100%
rename from docs/interfaces/convertparams.html
rename to packages/nanocurrency/docs/interfaces/convertparams.html
diff --git a/docs/interfaces/deriveaddressparams.html b/packages/nanocurrency/docs/interfaces/deriveaddressparams.html
similarity index 100%
rename from docs/interfaces/deriveaddressparams.html
rename to packages/nanocurrency/docs/interfaces/deriveaddressparams.html
diff --git a/docs/interfaces/hashblockparams.html b/packages/nanocurrency/docs/interfaces/hashblockparams.html
similarity index 100%
rename from docs/interfaces/hashblockparams.html
rename to packages/nanocurrency/docs/interfaces/hashblockparams.html
diff --git a/docs/interfaces/signblockparams.html b/packages/nanocurrency/docs/interfaces/signblockparams.html
similarity index 100%
rename from docs/interfaces/signblockparams.html
rename to packages/nanocurrency/docs/interfaces/signblockparams.html
diff --git a/docs/interfaces/validateworkparams.html b/packages/nanocurrency/docs/interfaces/validateworkparams.html
similarity index 100%
rename from docs/interfaces/validateworkparams.html
rename to packages/nanocurrency/docs/interfaces/validateworkparams.html
diff --git a/docs/interfaces/verifyblockparams.html b/packages/nanocurrency/docs/interfaces/verifyblockparams.html
similarity index 100%
rename from docs/interfaces/verifyblockparams.html
rename to packages/nanocurrency/docs/interfaces/verifyblockparams.html
diff --git a/examples/pow-benchmark/index.html b/packages/nanocurrency/examples/pow-benchmark/index.html
similarity index 93%
rename from examples/pow-benchmark/index.html
rename to packages/nanocurrency/examples/pow-benchmark/index.html
index cf75f29..45a3543 100644
--- a/examples/pow-benchmark/index.html
+++ b/packages/nanocurrency/examples/pow-benchmark/index.html
@@ -5,14 +5,12 @@
 
   
     

-    
+