From ee0443b5fa40be6bf2de3b94ac200d4d002782f2 Mon Sep 17 00:00:00 2001 From: nikugogoi Date: Fri, 9 Dec 2022 14:25:13 +0530 Subject: [PATCH] Changes to use laconic-sdk with console-app (#10) * Use older version of tiny-secp256k1 to work in browser * Make REST endpoint optional --- .env.example | 1 + package.json | 5 ++-- src/auction.test.ts | 2 +- src/bond.test.ts | 2 +- src/index.test.ts | 2 +- src/index.ts | 14 ++++++----- src/nameservice-expiry.test.ts | 2 +- src/naming.test.ts | 2 +- src/registry-client.ts | 9 +++---- src/sdk.test.ts | 2 +- src/testing/helper.ts | 4 +-- src/util.test.ts | 2 +- yarn.lock | 45 +++++++++++++++++++++++++--------- 13 files changed, 59 insertions(+), 33 deletions(-) diff --git a/.env.example b/.env.example index d27f846..9354a4b 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,2 @@ PRIVATE_KEY=75f719e613d05efab06a3f1dde5250b497723b13d4afa4f8ed80145764e40cf7 +COSMOS_CHAIN_ID=laconic_9000-1 diff --git a/package.json b/package.json index a9fcf73..4a3e3d1 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,11 @@ "@types/jest": "^27.4.1", "@types/lodash": "^4.14.181", "@types/semver": "^7.3.9", + "@types/tiny-secp256k1": "1.0.0", "dotenv": "^16.0.0", - "protoc-gen-ts": "^0.8.5", "google-protobuf": "^3.21.0", "jest": "29.0.0", + "protoc-gen-ts": "^0.8.5", "ts-jest": "^29.0.2", "typescript": "^4.6.2" }, @@ -39,7 +40,7 @@ "lodash": "^4.17.21", "node-yaml": "^4.0.1", "semver": "^7.3.5", - "tiny-secp256k1": "^2.2.1" + "tiny-secp256k1": "^1.1.6" }, "scripts": { "test": "jest --runInBand --verbose", diff --git a/src/auction.test.ts b/src/auction.test.ts index 111484c..06637c3 100644 --- a/src/auction.test.ts +++ b/src/auction.test.ts @@ -16,7 +16,7 @@ const auctionTests = (numBidders = 3) => { beforeAll(async () => { console.log('Running auction tests with num bidders', numBidders); - registry = new Registry(restEndpoint, gqlEndpoint, chainId); + registry = new Registry(gqlEndpoint, restEndpoint, chainId); }); test('Setup bidder accounts', async () => { diff --git a/src/bond.test.ts b/src/bond.test.ts index 77369c4..2b7f93c 100644 --- a/src/bond.test.ts +++ b/src/bond.test.ts @@ -29,7 +29,7 @@ const bondTests = () => { }; beforeAll(async () => { - registry = new Registry(restEndpoint, gqlEndpoint, chainId); + registry = new Registry(gqlEndpoint, restEndpoint, chainId); }); test('Create bond.', async () => { diff --git a/src/index.test.ts b/src/index.test.ts index b1ee44a..fc96f80 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -10,7 +10,7 @@ const registryTests = () => { let registry: Registry; beforeAll(async () => { - registry = new Registry(restEndpoint, gqlEndpoint, chainId); + registry = new Registry(gqlEndpoint, restEndpoint, chainId); }); diff --git a/src/index.ts b/src/index.ts index ae06546..c83797d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -53,6 +53,8 @@ import { MessageMsgRevealBid } from './messages/auction'; +export const DEFAULT_CHAIN_ID = 'laconic_9000-1'; + const DEFAULT_WRITE_ERROR = 'Unable to write to laconicd.'; // Parse Tx response from cosmos-sdk. @@ -119,21 +121,21 @@ export class Registry { return errorMessage || DEFAULT_WRITE_ERROR; } - constructor(restUrl: string, gqlUrl: string, chainId: string) { - if (!isUrl(restUrl)) { - throw new Error('Path to a REST endpoint should be provided.'); - } - + constructor(gqlUrl: string, restUrl: string = "", chainId: string = DEFAULT_CHAIN_ID) { if (!isUrl(gqlUrl)) { throw new Error('Path to a GQL endpoint should be provided.'); } + if (restUrl && !isUrl(restUrl)) { + throw new Error('REST endpoint is not a URL string.'); + } + this._endpoints = { rest: restUrl, gql: gqlUrl }; - this._client = new RegistryClient(restUrl, gqlUrl); + this._client = new RegistryClient(gqlUrl, restUrl); this._chainID = chainId; this._chain = { diff --git a/src/nameservice-expiry.test.ts b/src/nameservice-expiry.test.ts index afa49ed..a52ab3b 100644 --- a/src/nameservice-expiry.test.ts +++ b/src/nameservice-expiry.test.ts @@ -20,7 +20,7 @@ const nameserviceExpiryTests = () => { let recordExpiryTime: Date; beforeAll(async () => { - registry = new Registry(restEndpoint, gqlEndpoint, chainId); + registry = new Registry(gqlEndpoint, restEndpoint, chainId); // Create bond. bondId = await registry.getNextBondId(privateKey); diff --git a/src/naming.test.ts b/src/naming.test.ts index 943d122..7445e41 100644 --- a/src/naming.test.ts +++ b/src/naming.test.ts @@ -25,7 +25,7 @@ const namingTests = () => { let crn: string; beforeAll(async () => { - registry = new Registry(restEndpoint, gqlEndpoint, chainId); + registry = new Registry(gqlEndpoint, restEndpoint, chainId); // Create bond. bondId = await registry.getNextBondId(privateKey); diff --git a/src/registry-client.ts b/src/registry-client.ts index 79cc5f7..ec49994 100644 --- a/src/registry-client.ts +++ b/src/registry-client.ts @@ -122,15 +122,14 @@ export class RegistryClient { /** * New Client. */ - constructor(restEndpoint: string, gqlEndpoint: string) { - assert(restEndpoint); - - this._restEndpoint = restEndpoint; - + constructor(gqlEndpoint: string, restEndpoint: string) { + assert(gqlEndpoint); this._graph = graphqlClient(gqlEndpoint, { method: 'POST', asJSON: true }); + + this._restEndpoint = restEndpoint; } /** diff --git a/src/sdk.test.ts b/src/sdk.test.ts index 0380d86..80038cf 100644 --- a/src/sdk.test.ts +++ b/src/sdk.test.ts @@ -15,7 +15,7 @@ describe('Querying', () => { let bondId: string; beforeAll(async () => { - registry = new Registry(restEndpoint, gqlEndpoint, chainId); + registry = new Registry(gqlEndpoint, restEndpoint, chainId); bondId = await provisionBondId(registry, privateKey, fee); const publishNewWatcherVersion = async () => { diff --git a/src/testing/helper.ts b/src/testing/helper.ts index be127b1..86cde9f 100644 --- a/src/testing/helper.ts +++ b/src/testing/helper.ts @@ -3,7 +3,7 @@ import yaml from 'node-yaml'; import semver from 'semver'; import { Fee } from '@tharsis/transactions'; -import { Registry } from '../index'; +import { DEFAULT_CHAIN_ID, Registry } from '../index'; export const ensureUpdatedConfig = async (path: string) => { const conf = await yaml.read(path); @@ -37,7 +37,7 @@ export const getConfig = () => { assert(process.env.PRIVATE_KEY); return { - chainId: process.env.COSMOS_CHAIN_ID || 'laconic_9000-1', + chainId: process.env.COSMOS_CHAIN_ID || DEFAULT_CHAIN_ID, privateKey: process.env.PRIVATE_KEY, restEndpoint: process.env.LACONICD_REST_ENDPOINT || 'http://localhost:1317', gqlEndpoint: process.env.LACONICD_GQL_ENDPOINT || 'http://localhost:9473/api', diff --git a/src/util.test.ts b/src/util.test.ts index c0103c6..df58da1 100644 --- a/src/util.test.ts +++ b/src/util.test.ts @@ -18,7 +18,7 @@ const utilTests = () => { let watcherId: string; beforeAll(async () => { - registry = new Registry(restEndpoint, gqlEndpoint, chainId); + registry = new Registry(gqlEndpoint, restEndpoint, chainId); // Create bond. bondId = await registry.getNextBondId(privateKey); diff --git a/yarn.lock b/yarn.lock index 0d62909..38fbfb0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1169,6 +1169,13 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/tiny-secp256k1@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/tiny-secp256k1/-/tiny-secp256k1-1.0.0.tgz#0c8fde0dfd320c9d089907e37805d67a346ad991" + integrity sha512-IW3dFGNyVkVLC1MCMogVWQaKH/ZtjPQdOW9c3X128o5lVpFYNsq/l3Qo1pV7sfTmvDzWEXR3QTxg1TMy1pyaAQ== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" @@ -1331,6 +1338,13 @@ big-integer@1.6.36: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== +bindings@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + bip32@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/bip32/-/bip32-3.0.1.tgz#1d1121469cce6e910e0ec3a5a1990dd62687e2a3" @@ -1670,7 +1684,7 @@ electron-to-chromium@^1.4.251: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.266.tgz#b2ce973eedbff309e2b98d1ed348e447bd4681fe" integrity sha512-saJTYECxUSv7eSpnXw0XIEvUkP9x4s/x2mm3TVX7k4rIFS6f5TjBih1B5h437WzIhHQjid+d8ouQzPQskMervQ== -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -1871,6 +1885,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2738,6 +2757,11 @@ multiformats@^9.5.4: resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.6.4.tgz#5dce1f11a407dbb69aa612cb7e5076069bb759ca" integrity sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg== +nan@^2.13.2: + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -3252,12 +3276,16 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -tiny-secp256k1@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-2.2.1.tgz#a61d4791b7031aa08a9453178a131349c3e10f9b" - integrity sha512-/U4xfVqnVxJXN4YVsru0E6t5wVncu2uunB8+RVR40fYUxkKYUPS10f+ePQZgFBoE/Jbf9H1NBveupF2VmB58Ng== +tiny-secp256k1@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" + integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== dependencies: - uint8array-tools "0.0.7" + bindings "^1.3.0" + bn.js "^4.11.8" + create-hmac "^1.1.7" + elliptic "^6.4.0" + nan "^2.13.2" tmpl@1.0.5: version "1.0.5" @@ -3320,11 +3348,6 @@ typescript@^4.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== -uint8array-tools@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/uint8array-tools/-/uint8array-tools-0.0.7.tgz#a7a2bb5d8836eae2fade68c771454e6a438b390d" - integrity sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ== - update-browserslist-db@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18"