From 839c19cf3daa35889d881b5eeca8d45aad9c8554 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 13:33:04 +0200 Subject: [PATCH 01/10] Add repl command --- packages/iov-api/init.txt | 4 ++++ packages/iov-api/package.json | 5 ++++- yarn.lock | 38 ++++++++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 packages/iov-api/init.txt diff --git a/packages/iov-api/init.txt b/packages/iov-api/init.txt new file mode 100644 index 000000000..5c5f5e01b --- /dev/null +++ b/packages/iov-api/init.txt @@ -0,0 +1,4 @@ +import colors = require('colors/safe'); +import { Encoding } from '@iov/encoding'; +console.log(Encoding.toHex(new Uint8Array([0x00]))); +console.log(colors.green('Done initializing session for you. Have fun!')); diff --git a/packages/iov-api/package.json b/packages/iov-api/package.json index 6d684e4ad..13066ffc9 100644 --- a/packages/iov-api/package.json +++ b/packages/iov-api/package.json @@ -11,6 +11,7 @@ "url": "https://github.com/iov-one/web4/tree/master/packages/iov-api" }, "scripts": { + "repl": "echo '\\nTo get started type: .load init.txt\\n' && ts-node", "lint": "tslint -t verbose --project .", "format": "prettier --write --loglevel warn './src/**/*.ts'", "test-node": "./jasmine-testrunner.js", @@ -29,6 +30,8 @@ "@iov/keycontrol": "^0.0.0", "@iov/types": "^0.0.0", "@types/long": "^4.0.0", - "long": "^4.0.0" + "colors": "^1.3.0", + "long": "^4.0.0", + "ts-node": "^7.0.0" } } diff --git a/yarn.lock b/yarn.lock index 1dc11f36c..a76516f48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -494,7 +494,7 @@ arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" -arrify@^1.0.1: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -833,7 +833,7 @@ buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" -buffer-from@^1.0.0: +buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" @@ -1119,7 +1119,7 @@ color-name@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" -colors@^1.1.0: +colors@^1.1.0, colors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.0.tgz#5f20c9fef6945cb1134260aab33bfbdc8295e04e" @@ -1690,7 +1690,7 @@ di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" -diff@^3.2.0: +diff@^3.1.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3658,6 +3658,10 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +make-error@^1.1.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" + mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -5297,11 +5301,18 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@0.6.1, source-map@^0.6.1, source-map@~0.6.1: +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -5727,6 +5738,19 @@ trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" +ts-node@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.0.tgz#a94a13c75e5e1aa6b82814b84c68deb339ba7bff" + dependencies: + arrify "^1.0.0" + buffer-from "^1.1.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.6" + yn "^2.0.0" + tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -6311,3 +6335,7 @@ yargs@~3.10.0: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" From a998898801af54a9703f6b3867c966d886497f66 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 15:29:15 +0200 Subject: [PATCH 02/10] Create package @iov/cli --- packages/iov-api/init.txt | 4 ---- packages/iov-api/package.json | 4 +--- packages/iov-cli/init | 6 ++++++ packages/iov-cli/package.json | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 7 deletions(-) delete mode 100644 packages/iov-api/init.txt create mode 100644 packages/iov-cli/init create mode 100644 packages/iov-cli/package.json diff --git a/packages/iov-api/init.txt b/packages/iov-api/init.txt deleted file mode 100644 index 5c5f5e01b..000000000 --- a/packages/iov-api/init.txt +++ /dev/null @@ -1,4 +0,0 @@ -import colors = require('colors/safe'); -import { Encoding } from '@iov/encoding'; -console.log(Encoding.toHex(new Uint8Array([0x00]))); -console.log(colors.green('Done initializing session for you. Have fun!')); diff --git a/packages/iov-api/package.json b/packages/iov-api/package.json index 13066ffc9..e071358a4 100644 --- a/packages/iov-api/package.json +++ b/packages/iov-api/package.json @@ -11,7 +11,6 @@ "url": "https://github.com/iov-one/web4/tree/master/packages/iov-api" }, "scripts": { - "repl": "echo '\\nTo get started type: .load init.txt\\n' && ts-node", "lint": "tslint -t verbose --project .", "format": "prettier --write --loglevel warn './src/**/*.ts'", "test-node": "./jasmine-testrunner.js", @@ -31,7 +30,6 @@ "@iov/types": "^0.0.0", "@types/long": "^4.0.0", "colors": "^1.3.0", - "long": "^4.0.0", - "ts-node": "^7.0.0" + "long": "^4.0.0" } } diff --git a/packages/iov-cli/init b/packages/iov-cli/init new file mode 100644 index 000000000..ed1c6a6e1 --- /dev/null +++ b/packages/iov-cli/init @@ -0,0 +1,6 @@ +import colors = require('colors/safe'); +import { Encoding } from '@iov/encoding'; Encoding as any; +console.log(colors.green('Done initializing session for you. Have fun!')); +console.log(colors.yellow('Available imports:')); +console.log(colors.yellow(' from @iov/encoding')); +console.log(colors.yellow(' - Encoding')); diff --git a/packages/iov-cli/package.json b/packages/iov-cli/package.json new file mode 100644 index 000000000..f16b126ef --- /dev/null +++ b/packages/iov-cli/package.json @@ -0,0 +1,17 @@ +{ + "name": "@iov/cli", + "version": "0.0.0", + "description": "Command line interface for web4", + "author": "simon ", + "license": "AGPL-3.0", + "repository": { + "type": "git", + "url": "https://github.com/iov-one/web4/tree/master/packages/iov-cli" + }, + "scripts": { + "cli": "echo '\\nTo get started type: .load init\\n' && ts-node" + }, + "dependencies": { + "ts-node": "^7.0.0" + } +} From ea23d100524ab55b1e7cb9219591a44f7a9ac190 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 15:30:29 +0200 Subject: [PATCH 03/10] Move colors dependency --- packages/iov-api/package.json | 1 - packages/iov-cli/package.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/iov-api/package.json b/packages/iov-api/package.json index e071358a4..6d684e4ad 100644 --- a/packages/iov-api/package.json +++ b/packages/iov-api/package.json @@ -29,7 +29,6 @@ "@iov/keycontrol": "^0.0.0", "@iov/types": "^0.0.0", "@types/long": "^4.0.0", - "colors": "^1.3.0", "long": "^4.0.0" } } diff --git a/packages/iov-cli/package.json b/packages/iov-cli/package.json index f16b126ef..25e7352ae 100644 --- a/packages/iov-cli/package.json +++ b/packages/iov-cli/package.json @@ -12,6 +12,7 @@ "cli": "echo '\\nTo get started type: .load init\\n' && ts-node" }, "dependencies": { + "colors": "^1.3.0", "ts-node": "^7.0.0" } } From b0a5a4019a68d6cb6a6e401639ab5891f7fe4f13 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 16:04:20 +0200 Subject: [PATCH 04/10] Rename command to web4 --- packages/iov-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/iov-cli/package.json b/packages/iov-cli/package.json index 25e7352ae..e6a053412 100644 --- a/packages/iov-cli/package.json +++ b/packages/iov-cli/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/iov-one/web4/tree/master/packages/iov-cli" }, "scripts": { - "cli": "echo '\\nTo get started type: .load init\\n' && ts-node" + "web4": "echo '\\nTo get started type: .load init\\n' && ts-node" }, "dependencies": { "colors": "^1.3.0", From 7f89d2f0c4ac40e11b9a3419357594b347ed89d7 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 16:10:16 +0200 Subject: [PATCH 05/10] Add Ed25519SimpleAddressKeyringEntry import --- packages/iov-cli/init | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/iov-cli/init b/packages/iov-cli/init index ed1c6a6e1..3a3b4e971 100644 --- a/packages/iov-cli/init +++ b/packages/iov-cli/init @@ -1,6 +1,9 @@ import colors = require('colors/safe'); import { Encoding } from '@iov/encoding'; Encoding as any; +import { Ed25519SimpleAddressKeyringEntry } from '@iov/keycontrol'; Ed25519SimpleAddressKeyringEntry as any; console.log(colors.green('Done initializing session for you. Have fun!')); console.log(colors.yellow('Available imports:')); console.log(colors.yellow(' from @iov/encoding')); console.log(colors.yellow(' - Encoding')); +console.log(colors.yellow(' from @iov/keycontrol')); +console.log(colors.yellow(' - Ed25519SimpleAddressKeyringEntry')); From f4b9be3419ca5b87bda8714fd09f2755a5749f02 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 16:12:17 +0200 Subject: [PATCH 06/10] Allow unused locals --- packages/iov-cli/init | 4 ++-- packages/iov-cli/tsconfig.json | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 packages/iov-cli/tsconfig.json diff --git a/packages/iov-cli/init b/packages/iov-cli/init index 3a3b4e971..ea27ea898 100644 --- a/packages/iov-cli/init +++ b/packages/iov-cli/init @@ -1,6 +1,6 @@ import colors = require('colors/safe'); -import { Encoding } from '@iov/encoding'; Encoding as any; -import { Ed25519SimpleAddressKeyringEntry } from '@iov/keycontrol'; Ed25519SimpleAddressKeyringEntry as any; +import { Encoding } from '@iov/encoding'; +import { Ed25519SimpleAddressKeyringEntry } from '@iov/keycontrol'; console.log(colors.green('Done initializing session for you. Have fun!')); console.log(colors.yellow('Available imports:')); console.log(colors.yellow(' from @iov/encoding')); diff --git a/packages/iov-cli/tsconfig.json b/packages/iov-cli/tsconfig.json new file mode 100644 index 000000000..a4457b071 --- /dev/null +++ b/packages/iov-cli/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noUnusedLocals": false, + } +} From c2686cfdb332bb5999b976b3f55052f89a9f2d06 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 16:38:33 +0200 Subject: [PATCH 07/10] Auto import UserProfile --- packages/iov-cli/init | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/iov-cli/init b/packages/iov-cli/init index ea27ea898..7b9d8181a 100644 --- a/packages/iov-cli/init +++ b/packages/iov-cli/init @@ -1,9 +1,10 @@ import colors = require('colors/safe'); import { Encoding } from '@iov/encoding'; -import { Ed25519SimpleAddressKeyringEntry } from '@iov/keycontrol'; +import { Ed25519SimpleAddressKeyringEntry, UserProfile } from '@iov/keycontrol'; console.log(colors.green('Done initializing session for you. Have fun!')); console.log(colors.yellow('Available imports:')); console.log(colors.yellow(' from @iov/encoding')); console.log(colors.yellow(' - Encoding')); console.log(colors.yellow(' from @iov/keycontrol')); console.log(colors.yellow(' - Ed25519SimpleAddressKeyringEntry')); +console.log(colors.yellow(' - UserProfile')); From 39d96b56b4350f0f5324430d5e8bee8a53062b22 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 16:41:46 +0200 Subject: [PATCH 08/10] Update README for web4 cli --- packages/iov-keycontrol/README.md | 36 ++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/iov-keycontrol/README.md b/packages/iov-keycontrol/README.md index ac477e200..2a9c7af9c 100644 --- a/packages/iov-keycontrol/README.md +++ b/packages/iov-keycontrol/README.md @@ -1,11 +1,10 @@ -@iov/keycontrol -=============== +How to use the web4 cli +======================= ## Example usage -1. Navigate into a directory where @iov/keycontrol is installed - (e.g `cd web4 && yarn install && yarn build`) -2. Run `node` in interactive mode +1. Build all dependencies: `cd web4 && yarn install && yarn build` +2. Go to `packages/iov-cli`, run `yarn web4` and follow on-screen instructions 3. Play around like in the following example code: ``` @@ -37,11 +36,28 @@ [ { pubkey: { algo: 'ed25519', data: [Object] }, label: 'the first one' } ] -> const Long = require("long") -> const fakeTransaction = { } -> const fakeCodec = { bytesToSign: () => { return new Uint8Array([0x00, 0x11, 0x22]); }, } -> const nonce = new Long(0x11223344, 0x55667788) -> profile.signTransaction(0, mainIdentity, fakeTransaction, fakeCodec, nonce).then(signed => console.log(signed)) +> import { Nonce } from "@iov/types"; +> import Long = require("long") +> const nonce = new Long(0x11223344, 0x55667788) as Nonce; + +> .editor +import { AddressBytes, ChainId, SendTx, TokenTicker, TransactionKind } from "@iov/types"; +const sendTx: SendTx = { + kind: TransactionKind.SEND, + chainId: "aabb" as ChainId, + signer: mainIdentity.pubkey, + recipient: new Uint8Array([0x11]) as AddressBytes, + memo: "Web4 write style", + amount: { + whole: 11000, + fractional: 777, + tokenTicker: "CASH" as TokenTicker, + }, +}; +^D + +> import { bnsCodec } from "@iov/bns"; +> profile.signTransaction(0, mainIdentity, sendTx, bnsCodec, nonce).then(signed => console.log(signed)) ``` 4. Congratulations, you created the first signed transaction! From 033a574e8d4b1d6fa028a734c7876d4df05b8a05 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 16:42:30 +0200 Subject: [PATCH 09/10] Move web4 cli README --- packages/{iov-keycontrol => iov-cli}/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/{iov-keycontrol => iov-cli}/README.md (100%) diff --git a/packages/iov-keycontrol/README.md b/packages/iov-cli/README.md similarity index 100% rename from packages/iov-keycontrol/README.md rename to packages/iov-cli/README.md From 7b3ba3c7fe7782f498c2599fbfa2c8c9fbe1bba8 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 19 Jul 2018 16:55:24 +0200 Subject: [PATCH 10/10] Add more auto imports --- packages/iov-cli/README.md | 11 +---------- packages/iov-cli/init | 28 +++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/packages/iov-cli/README.md b/packages/iov-cli/README.md index 2a9c7af9c..4457f54a7 100644 --- a/packages/iov-cli/README.md +++ b/packages/iov-cli/README.md @@ -8,7 +8,6 @@ How to use the web4 cli 3. Play around like in the following example code: ``` -> const { Ed25519SimpleAddressKeyringEntry, Keyring, UserProfile } = require("@iov/keycontrol") > const profile = new UserProfile(); > profile.addEntry(Ed25519SimpleAddressKeyringEntry.fromMnemonic("melt wisdom mesh wash item catalog talk enjoy gaze hat brush wash")) @@ -36,12 +35,7 @@ How to use the web4 cli [ { pubkey: { algo: 'ed25519', data: [Object] }, label: 'the first one' } ] -> import { Nonce } from "@iov/types"; -> import Long = require("long") -> const nonce = new Long(0x11223344, 0x55667788) as Nonce; - > .editor -import { AddressBytes, ChainId, SendTx, TokenTicker, TransactionKind } from "@iov/types"; const sendTx: SendTx = { kind: TransactionKind.SEND, chainId: "aabb" as ChainId, @@ -55,8 +49,7 @@ const sendTx: SendTx = { }, }; ^D - -> import { bnsCodec } from "@iov/bns"; +> const nonce = new Long(0x11223344, 0x55667788) as Nonce; > profile.signTransaction(0, mainIdentity, sendTx, bnsCodec, nonce).then(signed => console.log(signed)) ``` @@ -92,8 +85,6 @@ const sendTx: SendTx = { 6. Now store to disk ``` -> const leveldown = require('leveldown') -> const levelup = require('levelup') > const db = levelup(leveldown('./my_userprofile_db')) > profile.storeIn(db, "secret passwd") ``` diff --git a/packages/iov-cli/init b/packages/iov-cli/init index 7b9d8181a..3d32e5510 100644 --- a/packages/iov-cli/init +++ b/packages/iov-cli/init @@ -1,10 +1,28 @@ import colors = require('colors/safe'); +const leveldown = require('leveldown') +const levelup = require('levelup') +import Long from "long"; +import { bnsCodec } from "@iov/bns"; import { Encoding } from '@iov/encoding'; import { Ed25519SimpleAddressKeyringEntry, UserProfile } from '@iov/keycontrol'; +import { AddressBytes, ChainId, Nonce, SendTx, TokenTicker, TransactionKind } from "@iov/types"; console.log(colors.green('Done initializing session for you. Have fun!')); console.log(colors.yellow('Available imports:')); -console.log(colors.yellow(' from @iov/encoding')); -console.log(colors.yellow(' - Encoding')); -console.log(colors.yellow(' from @iov/keycontrol')); -console.log(colors.yellow(' - Ed25519SimpleAddressKeyringEntry')); -console.log(colors.yellow(' - UserProfile')); +console.log(colors.yellow(' * leveldown')); +console.log(colors.yellow(' * levelup')); +console.log(colors.yellow(' * from long')); +console.log(colors.yellow(' - Long')); +console.log(colors.yellow(' * from @iov/bns')); +console.log(colors.yellow(' - bnsCodec')); +console.log(colors.yellow(' * from @iov/encoding')); +console.log(colors.yellow(' - Encoding')); +console.log(colors.yellow(' * from @iov/keycontrol')); +console.log(colors.yellow(' - Ed25519SimpleAddressKeyringEntry')); +console.log(colors.yellow(' - UserProfile')); +console.log(colors.yellow(' * from @iov/types')); +console.log(colors.yellow(' - AddressBytes')); +console.log(colors.yellow(' - ChainId')); +console.log(colors.yellow(' - Nonce')); +console.log(colors.yellow(' - SendTx')); +console.log(colors.yellow(' - TokenTicker')); +console.log(colors.yellow(' - TransactionKind'));