From 8912dabf71a6f553d6fe4f379cda7464e6aaac1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 02:24:56 +0000 Subject: [PATCH 01/22] chore(deps): bump parse-url from 6.0.0 to 6.0.2 Bumps [parse-url](https://github.com/IonicaBizau/parse-url) from 6.0.0 to 6.0.2. - [Release notes](https://github.com/IonicaBizau/parse-url/releases) - [Commits](https://github.com/IonicaBizau/parse-url/commits) --- updated-dependencies: - dependency-name: parse-url dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 53 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index cf30a82b12..56f05fa472 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11457,7 +11457,16 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -13181,11 +13190,11 @@ is-shared-array-buffer@^1.0.2: call-bind "^1.0.2" is-ssh@^1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" - integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ== + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== dependencies: - protocols "^1.1.0" + protocols "^2.0.1" is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" @@ -16993,10 +17002,10 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-path@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" - integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== +parse-path@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.4.tgz#4bf424e6b743fb080831f03b536af9fc43f0ffea" + integrity sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw== dependencies: is-ssh "^1.3.0" protocols "^1.4.0" @@ -17004,13 +17013,13 @@ parse-path@^4.0.0: query-string "^6.13.8" parse-url@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.0.tgz#f5dd262a7de9ec00914939220410b66cff09107d" - integrity sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw== + version "6.0.2" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.2.tgz#4a30b057bfc452af64512dfb1a7755c103db3ea1" + integrity sha512-uCSjOvD3T+6B/sPWhR+QowAZcU/o4bjPrVBQBGFxcDF6J6FraCGIaDBsdoQawiaaAVdHvtqBe3w3vKlfBKySOQ== dependencies: is-ssh "^1.3.0" normalize-url "^6.1.0" - parse-path "^4.0.0" + parse-path "^4.0.4" protocols "^1.4.0" parse5-htmlparser2-tree-adapter@^6.0.0: @@ -18109,11 +18118,16 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -protocols@^1.1.0, protocols@^1.4.0: +protocols@^1.4.0: version "1.4.8" resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== +protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + protoduck@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" @@ -18213,13 +18227,20 @@ qr.js@0.0.0: resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" integrity sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8= -qs@6.10.3, qs@^6.6.0, qs@^6.9.4: +qs@6.10.3, qs@^6.6.0: version "6.10.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== dependencies: side-channel "^1.0.4" +qs@^6.9.4: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -20497,7 +20518,7 @@ strict-uri-encode@^1.0.0: strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== string-argv@^0.3.0: version "0.3.1" From 23b7b0bac38e90ad34db152533d6d09215bd3676 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 02:10:00 +0000 Subject: [PATCH 02/22] chore(deps): bump moment from 2.29.3 to 2.29.4 Bumps [moment](https://github.com/moment/moment) from 2.29.3 to 2.29.4. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.29.3...2.29.4) --- updated-dependencies: - dependency-name: moment dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index cf30a82b12..7e66a5c501 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15708,9 +15708,9 @@ modify-values@^1.0.0: integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== moment@^2.19.3: - version "2.29.3" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3" - integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw== + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== moo@^0.5.0: version "0.5.1" From c30350f95149f5bbed5147b2593633f2717d436e Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Mon, 11 Jul 2022 19:22:02 +0800 Subject: [PATCH 03/22] fix: Show confirm error. --- .../components/MultisigAddressCreateDialog/index.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/neuron-ui/src/components/MultisigAddressCreateDialog/index.tsx b/packages/neuron-ui/src/components/MultisigAddressCreateDialog/index.tsx index 53f9f5a302..a5ba185406 100644 --- a/packages/neuron-ui/src/components/MultisigAddressCreateDialog/index.tsx +++ b/packages/neuron-ui/src/components/MultisigAddressCreateDialog/index.tsx @@ -51,11 +51,14 @@ const MultisigAddressCreateDialog = ({ const [step, changeStep] = useState(Step.setMN) const [t] = useTranslation() const { m, n, setMBySelect, setNBySelect, errorI18nKey: mnErr } = useMAndN() + const [confirmErr, setConfirmErr] = useState(null) const next = useCallback(() => { changeStep(step + 1) + setConfirmErr(null) }, [changeStep, step]) const back = useCallback(() => { changeStep(step - 1) + setConfirmErr(null) }, [changeStep, step]) const { chain: { networkID }, @@ -89,9 +92,13 @@ const MultisigAddressCreateDialog = ({ n: Number(n), r: Number(r), addresses, - }).then(() => { - closeDialog() }) + .then(() => { + closeDialog() + }) + .catch(err => { + setConfirmErr(err.message) + }) }, [m, n, r, addresses, saveConfig, closeDialog]) return ( @@ -116,6 +123,7 @@ const MultisigAddressCreateDialog = ({ {step === Step.viewMultiAddress && ( )} + {confirmErr &&
{confirmErr}
}
+
diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index f368780878..216627233f 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -372,7 +372,7 @@ } }, "data": { - "ckb-node-data": "CKB Node Data", + "ckb-node-data": "CKB Node Config & Storage", "ckb-indexer-data": "CKB Indexer Data", "set": "Set", "cache": "Cache", @@ -382,10 +382,12 @@ "clearing-cache": "Clearing...", "remove-ckb-data-tip": "Please move CKB Node Data from {{prevPath}} to {{currentPath}} and then click on \"Data have been moved\" to start from the previously synchronized block; Or click on \"Synchronize from scratch\" to start with synchronizing from scratch.", "remove-indexer-data-tip": "Please move Indexer Data from {{prevPath}} to {{currentPath}} and then click on \"Data have been moved\" to start from the previously synchronized block; Or click on \"Synchronize from scratch\" to start with synchronizing from scratch.", - "resync-describe": "Attention: Synchronize from scratch won't remove previously downloaded CKB Node(or Indexer) Data.", + "resync-ckb-node-describe": "Attention: Synchronizing from scratch won't remove previously downloaded CKB Node Data, but it will remove downloaded Indexer Data", + "resync-indexer-describe": "Attention: Synchronizing from scratch won't remove previously downloaded Indexer Data.", "cancel": "Cancel", "move-data-finish": "Data have been moved", - "re-sync": "Synchronize from scratch" + "re-sync": "Synchronize from scratch", + "disabled-set-path": "When the CKB node is started manually, the CKB Node Config and Storage path configuration doesn't take effect" } }, "password-request": { diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 86bd7072c0..1efcb3f965 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -365,7 +365,7 @@ } }, "data": { - "ckb-node-data": "節點數據", + "ckb-node-data": "節點配置和數據", "ckb-indexer-data": "Indexer 數據", "set": "設置", "cache": "緩存", @@ -376,9 +376,11 @@ "remove-ckb-data-tip": "請將 CKB Node 數據從 {{prevPath}} 移動至 {{currentPath}}然後點擊 \"數據轉移完成\" 開始從已知區塊同步; 否則點擊 \"重新同步\" 開始重新同步.", "remove-indexer-data-tip": "請將 Indexer 數據從 {{prevPath}} 移動至 {{currentPath}}然後點擊 \"數據轉移完成\" 開始從已知區塊同步; 否則點擊 \"重新同步\" 開始重新同步.", "cancel": "取消", - "resync-describe": "註意: 重新同步不會刪除當前已同步的 CKB Node(Indexer) 數據.", + "resync-ckb-node-describe": "註意: 重新同步不會刪除當前已同步的 CKB Node 數據,但會刪除已同步的 Indexer 數據。", + "resync-indexer-describe": "註意: 重新同步不會刪除當前已同步的 Indexer 數據.", "move-data-finish": "數據轉移完成", - "re-sync": "重新同步" + "re-sync": "重新同步", + "disabled-set-path": "手動啟動 CKB 節點時,設置 CKB Node 節點配置和路徑無法生效" } }, "password-request": { diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index 186a8c1406..ccd351d180 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -365,7 +365,7 @@ } }, "data": { - "ckb-node-data": "节点数据", + "ckb-node-data": "节点配置和数据", "ckb-indexer-data": "Indexer 数据", "set": "设置", "cache": "缓存", @@ -375,10 +375,12 @@ "clearing-cache": "清空中...", "remove-ckb-data-tip": "请将 CKB Node 数据从 {{prevPath}} 移动至 {{currentPath}}然后点击 \"数据转移完成\" 开始从已知区块同步; 否则点击 \"重新同步\" 开始重新同步.", "remove-indexer-data-tip": "请将 Indexer 数据从 {{prevPath}} 移动至 {{currentPath}}然后点击 \"数据转移完成\" 开始从已知区块同步; 否则点击 \"重新同步\" 开始重新同步.", - "resync-describe": "注意: 重新同步不会删除当前已同步的 CKB Node(Indexer) 数据.", + "resync-ckb-node-describe": "注意: 重新同步不会删除当前已同步的 CKB Node 数据,但会删除已同步的 Indexer 数据。", + "resync-indexer-describe": "注意: 重新同步不会删除当前已同步的 Indexer 数据.", "cancel": "取消", "move-data-finish": "数据转移完成", - "re-sync": "重新同步" + "re-sync": "重新同步", + "disabled-set-path": "手动启动 CKB 节点时,设置 CKB Node 节点配置和路径无法生效" } }, "password-request": { diff --git a/packages/neuron-ui/src/services/remote/app.ts b/packages/neuron-ui/src/services/remote/app.ts index 76340290cd..20fe5a0c06 100644 --- a/packages/neuron-ui/src/services/remote/app.ts +++ b/packages/neuron-ui/src/services/remote/app.ts @@ -18,9 +18,11 @@ export const handleViewError = remoteApi('handle-view-error') export const showSettings = remoteApi('show-settings') export const setLocale = remoteApi('set-locale') export const getCkbNodeDataPath = remoteApi('get-ckb-node-data-path') -export const setCkbNodeDataPath = remoteApi('set-ckb-node-data-path') +export const setCkbNodeDataPath = remoteApi<{ dataPath: string; clearCache?: boolean }, string>( + 'set-ckb-node-data-path' +) export const getIndexerDataPath = remoteApi('get-indexer-data-path') -export const setIndexerDataPath = remoteApi('set-indexer-data-path') +export const setIndexerDataPath = remoteApi<{ dataPath: string }, string>('set-indexer-data-path') export const stopProcessMonitor = remoteApi<'ckb' | 'ckb-indexer'>('stop-process-monitor') export const startProcessMonitor = remoteApi<'ckb' | 'ckb-indexer'>('start-process-monitor') diff --git a/packages/neuron-wallet/src/controllers/api.ts b/packages/neuron-wallet/src/controllers/api.ts index 2488d9a9e7..33d77cf380 100644 --- a/packages/neuron-wallet/src/controllers/api.ts +++ b/packages/neuron-wallet/src/controllers/api.ts @@ -13,6 +13,8 @@ import { BrowserWindow } from 'electron' import { t } from 'i18next' +import path from 'path' +import fs from 'fs' import env from 'env' import { showWindow } from './app/show-window' import CommonUtils from 'utils/common' @@ -462,9 +464,27 @@ export default class ApiController { } }) - handle('set-ckb-node-data-path', (_, dataPath: string) => { + handle('set-ckb-node-data-path', async (_, { dataPath, clearCache }: { dataPath: string; clearCache: boolean }) => { + let finallyClearCache = clearCache + if (!finallyClearCache && !fs.existsSync(path.join(dataPath, 'ckb.toml'))) { + const { response } = await dialog.showMessageBox(BrowserWindow.getFocusedWindow()!, { + type: 'info', + message: t('messages.no-exist-ckb-node-data', { path: dataPath }), + buttons: [t('common.ok'), t('common.cancel')] + }) + if (response === 1) { + return { + status: ResponseCode.Fail, + } + } else { + finallyClearCache = true + } + } SettingsService.getInstance().ckbDataPath = dataPath - stopMonitor('ckb-indexer') + await stopMonitor('ckb-indexer') + if (finallyClearCache) { + await IndexerService.clearCache(true) + } startMonitor(undefined, true) return { status: ResponseCode.Success, @@ -479,7 +499,7 @@ export default class ApiController { } }) - handle('set-indexer-data-path', (_, dataPath: string) => { + handle('set-indexer-data-path', (_, { dataPath }: { dataPath: string }) => { SettingsService.getInstance().indexerDataPath = dataPath startMonitor('ckb-indexer', true) return { diff --git a/packages/neuron-wallet/src/locales/en.ts b/packages/neuron-wallet/src/locales/en.ts index 482fe0dc5a..2a1b83aff3 100644 --- a/packages/neuron-wallet/src/locales/en.ts +++ b/packages/neuron-wallet/src/locales/en.ts @@ -133,7 +133,8 @@ export default { 'multisig-lock-hash-mismatch': 'The current multisig address does not match the transaction to be approved', 'sudt-acp-have-data': 'The destroying sUDT acp account have amount', 'no-match-address-for-sign': 'Not found matched address', - 'target-lock-error': 'CKB asset account can only transfer to sepe256k1 or acp address' + 'target-lock-error': 'CKB asset account can only transfer to sepe256k1 or acp address', + 'no-exist-ckb-node-data': '{{path}} has no CKB Node config and storage, press ok to synchronize from scratch' }, messageBox: { button: { diff --git a/packages/neuron-wallet/src/locales/zh-tw.ts b/packages/neuron-wallet/src/locales/zh-tw.ts index a55529586c..41e531a3b1 100644 --- a/packages/neuron-wallet/src/locales/zh-tw.ts +++ b/packages/neuron-wallet/src/locales/zh-tw.ts @@ -123,7 +123,8 @@ export default { 'multisig-not-signed': '多簽交易缺少部分簽名', 'sudt-acp-have-data': '待銷毀的 sUDT 賬戶資產不為 0', 'no-match-address-for-sign': '没有找到匹配的地址', - 'target-lock-error': 'CKB 資產只能轉賬到 secp256k1 或者 acp 地址' + 'target-lock-error': 'CKB 資產只能轉賬到 secp256k1 或者 acp 地址', + 'no-exist-ckb-node-data': '{{path}} 目錄下沒有找到 CKB Node 配置和數據, 點擊繼續重新同步' }, messageBox: { button: { diff --git a/packages/neuron-wallet/src/locales/zh.ts b/packages/neuron-wallet/src/locales/zh.ts index 86a2a59832..158abe7ec2 100644 --- a/packages/neuron-wallet/src/locales/zh.ts +++ b/packages/neuron-wallet/src/locales/zh.ts @@ -124,7 +124,8 @@ export default { 'multisig-not-signed': '多签交易缺少部分签名', 'sudt-acp-have-data': '待销毁的 sUDT 账户资产不为 0', 'no-match-address-for-sign': '没有找到匹配的地址', - 'target-lock-error': 'CKB 资产只能转账到 secp256k1 或者 acp 地址' + 'target-lock-error': 'CKB 资产只能转账到 secp256k1 或者 acp 地址', + 'no-exist-ckb-node-data': '{{path}} 目录下没有找到 CKB Node 配置和数据, 点击继续重新同步' }, messageBox: { button: { From 6b73c144579948c4242bd6e9280eeabfbe07d243 Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Mon, 22 Aug 2022 13:22:36 +0800 Subject: [PATCH 12/22] feat: The header dep's block no need 4 epochs ago. (#2461) --- .../CompensationPeriodTooltip/index.tsx | 18 +------------ .../src/components/NervosDAORecord/index.tsx | 25 +------------------ .../src/tests/getDAOCellStatus/fixtures.json | 12 ++++----- packages/neuron-ui/src/utils/const.ts | 1 - .../neuron-ui/src/utils/getDAOCellStatus.ts | 16 +----------- 5 files changed, 9 insertions(+), 63 deletions(-) diff --git a/packages/neuron-ui/src/components/CompensationPeriodTooltip/index.tsx b/packages/neuron-ui/src/components/CompensationPeriodTooltip/index.tsx index 1ca7463ea8..5b7a9b332c 100644 --- a/packages/neuron-ui/src/components/CompensationPeriodTooltip/index.tsx +++ b/packages/neuron-ui/src/components/CompensationPeriodTooltip/index.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next' import { getCompensatedTime, getCompensationPeriod, CONSTANTS, CompensationPeriod, uniformTimeFormatter } from 'utils' import styles from './compensationPeriodTooltip.module.scss' -const { WITHDRAW_EPOCHS, IMMATURE_EPOCHS } = CONSTANTS +const { WITHDRAW_EPOCHS } = CONSTANTS const HOUR = 3_600_000 const HOURS_PER_EPOCH = 4 * HOUR @@ -47,22 +47,6 @@ const CompensationPeriodTooltip = ({ endEpochTimestamp - (1 - CompensationPeriod.REQUEST_START) * WITHDRAW_EPOCHS * HOURS_PER_EPOCH const { days, hours } = getCompensatedTime({ currentEpochValue: baseEpochValue, depositEpochValue }) - const isImmature = baseEpochValue < depositEpochValue + IMMATURE_EPOCHS - - if (isImmature) { - return ( -
-
- {t('nervos-dao.compensation-period.tooltip.compensated-period')} - {t('nervos-dao.compensation-period.tooltip.days-hours', { days, hours })} -
-
-
-
{t('nervos-dao.compensation-period.tooltip.immature-for-withdraw')}
-
-
- ) - } let stage = 'normal' if (baseEpochTimestamp > endingStartEpochTimestamp) { diff --git a/packages/neuron-ui/src/components/NervosDAORecord/index.tsx b/packages/neuron-ui/src/components/NervosDAORecord/index.tsx index 5864b6ca6d..ed41668389 100644 --- a/packages/neuron-ui/src/components/NervosDAORecord/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAORecord/index.tsx @@ -6,7 +6,6 @@ import CopyZone from 'widgets/CopyZone' import { calculateClaimEpochValue, ConnectionStatus, - CONSTANTS, shannonToCKBFormatter, uniformTimeFormatter, getDAOCellStatus, @@ -18,8 +17,6 @@ import CompensationPeriodTooltip from 'components/CompensationPeriodTooltip' import styles from './daoRecordRow.module.scss' import hooks from './hooks' -const { IMMATURE_EPOCHS, HOURS_PER_EPOCH } = CONSTANTS - const EPOCHS_PER_DAY = 6 const getDaysAndHours = (seconds: number) => { @@ -122,30 +119,10 @@ export const DAORecord = ({ message = t('nervos-dao.compensation-period.stage-messages.pending') break } - case CellStatus.ImmatureForWithdraw: { - let hours: string | number = (depositEpochValue + IMMATURE_EPOCHS - currentEpochValue) * HOURS_PER_EPOCH - if (Number.isNaN(hours) || hours < 0 || hours > HOURS_PER_EPOCH * IMMATURE_EPOCHS) { - hours = '--' - } else { - hours = hours.toFixed(1) - } - message = t('nervos-dao.compensation-period.stage-messages.immature-for-withdraw', { hours }) - break - } case CellStatus.Deposited: { message = t('nervos-dao.compensation-period.stage-messages.next-compensation-cycle', { days: leftDays || '--' }) break } - case CellStatus.ImmatureForUnlock: { - let hours: number | string = (compensationEndEpochValue + IMMATURE_EPOCHS - currentEpochValue) * HOURS_PER_EPOCH - if (Number.isNaN(hours) || hours < 0 || hours > HOURS_PER_EPOCH * IMMATURE_EPOCHS) { - hours = '--' - } else { - hours = hours.toFixed(1) - } - message = t('nervos-dao.compensation-period.stage-messages.immature-for-unlock', { hours }) - break - } case CellStatus.Locked: { message = t('nervos-dao.compensation-period.stage-messages.compensation-cycle-will-end', { days: leftDays || '--', @@ -186,7 +163,7 @@ export const DAORecord = ({ <>
Date: Tue, 23 Aug 2022 14:46:08 +0800 Subject: [PATCH 13/22] feat: bump ckb to v0.104.0 Ref: https://github.com/nervosnetwork/ckb/releases/tag/v0.104.0 --- .ckb-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ckb-version b/.ckb-version index 788549ad69..bb7c6ee9e4 100644 --- a/.ckb-version +++ b/.ckb-version @@ -1 +1 @@ -v0.103.0 +v0.104.0 From 81342e9ff9521f71580761f995600e03fa0c7ff5 Mon Sep 17 00:00:00 2001 From: Chen Yu Date: Tue, 23 Aug 2022 15:15:43 +0800 Subject: [PATCH 14/22] Create dependabot.yml --- .github/dependabot.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..c5ffe03b62 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,29 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + +updates: + - package-ecosystem: "npm" + directory: "/packages/neuron-ui" + schedule: + interval: "weekly" + +updates: + - package-ecosystem: "npm" + directory: "/packages/neuron-wallet" + schedule: + interval: "weekly" + +updates: + - package-ecosystem: "npm" + directory: "/packages/ckb-indexer" + schedule: + interval: "weekly" From d1e7c57b263ab2eedd901ee7de14f7bfe13c58b3 Mon Sep 17 00:00:00 2001 From: Chen Yu Date: Tue, 23 Aug 2022 15:19:43 +0800 Subject: [PATCH 15/22] Create codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000000..5956cb4205 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,72 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "develop", master, rc/* ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "develop" ] + schedule: + - cron: '24 10 * * 0' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript'] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 From 6acaf1dff29f4cfab935f57051b90af51aaeea80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 07:36:52 +0000 Subject: [PATCH 16/22] chore(deps): bump @ckb-lumos/rpc in /packages/ckb-indexer Bumps [@ckb-lumos/rpc](https://github.com/nervosnetwork/lumos) from 0.18.0-rc2 to 0.18.0. - [Release notes](https://github.com/nervosnetwork/lumos/releases) - [Commits](https://github.com/nervosnetwork/lumos/compare/v0.18.0-rc2...v0.18.0) --- updated-dependencies: - dependency-name: "@ckb-lumos/rpc" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/ckb-indexer/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ckb-indexer/package.json b/packages/ckb-indexer/package.json index 188d39de05..3103ce566a 100644 --- a/packages/ckb-indexer/package.json +++ b/packages/ckb-indexer/package.json @@ -16,7 +16,7 @@ }, "dependencies": { "@ckb-lumos/base": "0.18.0-rc2", - "@ckb-lumos/rpc": "0.18.0-rc2", + "@ckb-lumos/rpc": "0.18.0", "ckb-js-toolkit": "0.100.0-rc1", "cross-fetch": "3.1.5" }, From efc0af3a297256f69f9edbc00f74513de1281c4d Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Wed, 24 Aug 2022 11:11:53 +0800 Subject: [PATCH 17/22] feat: Adapt new UAN (#2465) --- .../NetworkStatus/networkStatus.module.scss | 1 + .../src/components/Overview/index.tsx | 62 +++++++++++++++++-- .../components/Overview/overview.module.scss | 33 +++++++++- .../src/components/SUDTAccountPile/index.tsx | 4 +- .../sUDTAccountPile.module.scss | 29 ++++++++- .../sUDTCreateDialog.module.scss | 2 +- .../src/components/SUDTReceive/index.tsx | 12 +++- .../SUDTReceive/sUDTReceive.module.scss | 20 +++++- .../src/components/SUDTSend/index.tsx | 27 +++++++- .../components/SUDTSend/sUDTSend.module.scss | 27 +++++++- .../sUDTUpdateDialog.module.scss | 2 +- .../src/components/TransactionList/index.tsx | 13 +++- .../transactionList.module.scss | 24 ++++++- .../components/UANDisplay/index.module.scss | 21 +++++++ .../src/components/UANDisplay/index.tsx | 58 +++++++++++++++++ packages/neuron-ui/src/locales/en.json | 6 +- packages/neuron-ui/src/locales/zh-tw.json | 6 +- packages/neuron-ui/src/locales/zh.json | 6 +- packages/neuron-ui/src/styles/mixin.scss | 25 ++++++++ .../src/tests/validators/symbol/fixtures.ts | 8 +-- .../tests/validators/tokenName/fixtures.ts | 8 +-- packages/neuron-ui/src/utils/const.ts | 4 +- .../widgets/TextField/textField.module.scss | 1 + 23 files changed, 358 insertions(+), 41 deletions(-) create mode 100644 packages/neuron-ui/src/components/UANDisplay/index.module.scss create mode 100644 packages/neuron-ui/src/components/UANDisplay/index.tsx diff --git a/packages/neuron-ui/src/components/NetworkStatus/networkStatus.module.scss b/packages/neuron-ui/src/components/NetworkStatus/networkStatus.module.scss index 8101454f48..562b4ec785 100644 --- a/packages/neuron-ui/src/components/NetworkStatus/networkStatus.module.scss +++ b/packages/neuron-ui/src/components/NetworkStatus/networkStatus.module.scss @@ -53,6 +53,7 @@ $hover-bg-color: #3cc68a4d; font-size: 0.75rem; line-height: 1.25em; white-space: nowrap; + z-index: 10; .tooltipTitle { grid-area: title; diff --git a/packages/neuron-ui/src/components/Overview/index.tsx b/packages/neuron-ui/src/components/Overview/index.tsx index b26bc99352..3bfd5296ef 100644 --- a/packages/neuron-ui/src/components/Overview/index.tsx +++ b/packages/neuron-ui/src/components/Overview/index.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useMemo, useEffect } from 'react' import { useHistory } from 'react-router-dom' -import { useTranslation } from 'react-i18next' +import { Trans, useTranslation } from 'react-i18next' import Balance from 'components/Balance' import { showTransactionDetails } from 'services/remote' @@ -20,6 +20,7 @@ import { nftFormatter, } from 'utils' +import { UANTokenName, UANTonkenSymbol } from 'components/UANDisplay' import styles from './overview.module.scss' const { PAGE_SIZE, CONFIRMATION_THRESHOLD } = CONSTANTS @@ -110,7 +111,15 @@ const Overview = () => { let confirmations = '' let typeLabel: string = '--' let amount = '--' + let amountValue = '' let { status } = item + let typeTransProps: { + i18nKey: string + components: JSX.Element[] + } = { + i18nKey: '', + components: [], + } if (item.blockNumber !== undefined) { const confirmationCount = @@ -141,7 +150,16 @@ const Overview = () => { // Asset Account if (['create', 'destroy'].includes(item.type)) { // create/destroy an account - typeLabel = `${t(`overview.${item.type}`, { name: item.sudtInfo.sUDT.tokenName || 'UDT' })}` + typeTransProps = { + i18nKey: `overview.${item.type}SUDT`, + components: [ + , + ], + } } else { // send/receive to/from an account const type = +item.sudtInfo.amount <= 0 ? 'send' : 'receive' @@ -151,6 +169,7 @@ const Overview = () => { amount = `${sUDTAmountFormatter(sudtValueToAmount(item.sudtInfo.amount, item.sudtInfo.sUDT.decimal))} ${ item.sudtInfo.sUDT.symbol }` + amountValue = sUDTAmountFormatter(sudtValueToAmount(item.sudtInfo.amount, item.sudtInfo.sUDT.decimal)) } } else { // normal tx @@ -174,6 +193,8 @@ const Overview = () => { amount, confirmations, typeLabel, + amountValue, + typeTransProps, } }) return ( @@ -184,7 +205,7 @@ const Overview = () => { {['date', 'type', 'amount', 'status'].map(field => { const title = t(`overview.${field}`) return ( - + {title} ) @@ -193,14 +214,43 @@ const Overview = () => { {activities.map(item => { - const { confirmations, createdAt, status, hash, statusLabel, timestamp, typeLabel, amount } = item + const { + confirmations, + createdAt, + status, + hash, + statusLabel, + timestamp, + typeLabel, + amount, + typeTransProps, + amountValue, + sudtInfo, + } = item const time = uniformTimeFormatter(timestamp || createdAt) return ( {time.split(' ')[0]} - {typeLabel} - {amount} + {typeTransProps.i18nKey ? ( + + + + ) : ( + {typeLabel} + )} + {amountValue ? ( + + {amountValue}  + + + ) : ( + {amount} + )}
{statusLabel} diff --git a/packages/neuron-ui/src/components/Overview/overview.module.scss b/packages/neuron-ui/src/components/Overview/overview.module.scss index 704fc0a4f8..140b41296b 100644 --- a/packages/neuron-ui/src/components/Overview/overview.module.scss +++ b/packages/neuron-ui/src/components/Overview/overview.module.scss @@ -53,6 +53,7 @@ $confirming-color: #b3b3b3; table { border-collapse: collapse; width: 100%; + table-layout: fixed; } tr { @@ -74,13 +75,43 @@ $confirming-color: #b3b3b3; color: #000; line-height: 1em; padding: 16px 0; + + &[data-field='date'] { + width: 100px; + } + &[data-field='status'] { + width: 130px; + } } td { font-size: 0.875rem; line-height: 1em; - padding: 2px 0; + padding: 8px 2px; color: #000; + white-space: nowrap; + } + + .tokenName { + max-width: 50%; + display: inline-flex; + line-height: 24px; + + &::after { + min-width: 300px; + } + & > span { + max-width: 100%; + } + } + + .symbol { + max-width: 90%; + display: inline-flex; + + &::after { + max-width: 400px; + } } .txStatus { diff --git a/packages/neuron-ui/src/components/SUDTAccountPile/index.tsx b/packages/neuron-ui/src/components/SUDTAccountPile/index.tsx index 36d03f7b83..44f952786d 100644 --- a/packages/neuron-ui/src/components/SUDTAccountPile/index.tsx +++ b/packages/neuron-ui/src/components/SUDTAccountPile/index.tsx @@ -40,10 +40,10 @@ const SUDTAccountPile = ({
{accountName || DEFAULT_SUDT_FIELDS.accountName}
-
+
{tokenName || DEFAULT_SUDT_FIELDS.tokenName}
-
+
{`(${symbol || DEFAULT_SUDT_FIELDS.symbol})`}
diff --git a/packages/neuron-ui/src/components/SUDTAccountPile/sUDTAccountPile.module.scss b/packages/neuron-ui/src/components/SUDTAccountPile/sUDTAccountPile.module.scss index d71b90431e..3c440a2509 100644 --- a/packages/neuron-ui/src/components/SUDTAccountPile/sUDTAccountPile.module.scss +++ b/packages/neuron-ui/src/components/SUDTAccountPile/sUDTAccountPile.module.scss @@ -1,8 +1,10 @@ +@import '../../styles/mixin.scss'; + .container { background: #fff; width: 290px; display: grid; - grid-template: 'avatar account-name account-name edit-btn' auto 'avatar token-name symbol .' auto '. footer footer footer' 25px/ 33px auto 1fr 15px; + grid-template: 'avatar account-name account-name edit-btn' auto 'avatar token-name symbol .' auto '. footer footer footer' 25px/ 33px 106px 106px 15px; box-sizing: border-box; & > div { @@ -40,11 +42,36 @@ .tokenName { grid-area: token-name; font-size: 0.75rem; + overflow: initial !important; + position: relative; + + &[data-tooltip] { + &:not([data-tooltip='']) { + @include tooltip; + } + } + + & > span { + @include text-overflow-ellipsis; + } } .symbol { grid-area: symbol; font-size: 0.75rem; + overflow: initial !important; + position: relative; + &[data-tooltip] { + @include tooltip; + } + + &::after { + top: -120%; + } + + & > span { + @include text-overflow-ellipsis; + } } .editBtn { diff --git a/packages/neuron-ui/src/components/SUDTCreateDialog/sUDTCreateDialog.module.scss b/packages/neuron-ui/src/components/SUDTCreateDialog/sUDTCreateDialog.module.scss index e6f30fecb3..a27c4bc86c 100644 --- a/packages/neuron-ui/src/components/SUDTCreateDialog/sUDTCreateDialog.module.scss +++ b/packages/neuron-ui/src/components/SUDTCreateDialog/sUDTCreateDialog.module.scss @@ -35,7 +35,7 @@ .dialogContainer { @include dialog-container; - width: 500px; + width: 520px; box-sizing: border-box; background: #fff; padding: 30px 50px; diff --git a/packages/neuron-ui/src/components/SUDTReceive/index.tsx b/packages/neuron-ui/src/components/SUDTReceive/index.tsx index 5a5262a13a..d8edf6610e 100644 --- a/packages/neuron-ui/src/components/SUDTReceive/index.tsx +++ b/packages/neuron-ui/src/components/SUDTReceive/index.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react' import { useLocation } from 'react-router-dom' -import { useTranslation } from 'react-i18next' +import { Trans, useTranslation } from 'react-i18next' import { addressToScript, bech32Address, AddressPrefix } from '@nervosnetwork/ckb-sdk-utils' import SUDTAvatar from 'widgets/SUDTAvatar' import { ReactComponent as AddressToggleIcon } from 'widgets/Icons/AddressTransform.svg' @@ -12,6 +12,7 @@ import CopyZone from 'widgets/CopyZone' import { useDispatch } from 'states' import { RoutePath, CONSTANTS } from 'utils' +import { getDisplayName, UANTonkenSymbol } from 'components/UANDisplay' import styles from './sUDTReceive.module.scss' const { DEFAULT_SUDT_FIELDS } = CONSTANTS @@ -56,7 +57,9 @@ const SUDTReceive = () => {
{accountName || DEFAULT_SUDT_FIELDS.accountName}
-
{tokenName || DEFAULT_SUDT_FIELDS.tokenName}
+
+ {getDisplayName(tokenName || DEFAULT_SUDT_FIELDS.tokenName, symbol)} +
@@ -74,7 +77,10 @@ const SUDTReceive = () => {

- {t('s-udt.receive.notation', { symbol: symbol || DEFAULT_SUDT_FIELDS.symbol })} + ]} + />

) diff --git a/packages/neuron-ui/src/components/SUDTReceive/sUDTReceive.module.scss b/packages/neuron-ui/src/components/SUDTReceive/sUDTReceive.module.scss index 368640fd97..a781f0fde2 100644 --- a/packages/neuron-ui/src/components/SUDTReceive/sUDTReceive.module.scss +++ b/packages/neuron-ui/src/components/SUDTReceive/sUDTReceive.module.scss @@ -1,3 +1,5 @@ +@import '../../styles/mixin.scss'; + .title { height: 28px; font-size: 1.375rem; @@ -27,7 +29,13 @@ .tokenName { font-size: 0.75rem; grid-area: token-name; - white-space: nowrap; + @include tooltip; + min-width: 300px; + max-width: 500px; + + & > span { + @include text-overflow-ellipsis; + } } } @@ -67,10 +75,20 @@ display: flex; justify-content: center; align-items: center; + word-break: break-word; svg { width: 0.75rem; height: 0.75rem; margin-right: 5px; filter: grayscale(1) brightness(2); } + .symbol { + display: inline-flex; + margin: 0 2px; + + &::after { + min-width: 140px; + text-align: left; + } + } } diff --git a/packages/neuron-ui/src/components/SUDTSend/index.tsx b/packages/neuron-ui/src/components/SUDTSend/index.tsx index a72d9fa69b..f461a6a1bd 100644 --- a/packages/neuron-ui/src/components/SUDTSend/index.tsx +++ b/packages/neuron-ui/src/components/SUDTSend/index.tsx @@ -28,6 +28,7 @@ import { CONSTANTS, } from 'utils' import { AmountNotEnoughException } from 'exceptions' +import { UANTokenName, UANTonkenSymbol } from 'components/UANDisplay' import { AddressLockType, getGenerator, useAddressLockType, useOnSumbit, useOptions, useSendType } from './hooks' import styles from './sUDTSend.module.scss' @@ -341,11 +342,23 @@ const SUDTSend = () => {
{accountInfo?.accountName}
-
{accountInfo?.tokenName}
+
+ +
{accountInfo ? sudtValueToAmount(accountInfo.balance, accountInfo.decimal) : '--'}
-
{accountInfo?.symbol}
+
+ +
{fields.map(field => { @@ -359,7 +372,15 @@ const SUDTSend = () => { required field={field.key} onChange={onInput} - suffix={field.key === Fields.Amount && accountInfo?.symbol} + suffix={ + field.key === Fields.Amount ? ( + + ) : null + } disabled={sendState.sendAll} error={errors[field.key]} className={styles[field.key]} diff --git a/packages/neuron-ui/src/components/SUDTSend/sUDTSend.module.scss b/packages/neuron-ui/src/components/SUDTSend/sUDTSend.module.scss index 18ac526e23..75db9cfa1d 100644 --- a/packages/neuron-ui/src/components/SUDTSend/sUDTSend.module.scss +++ b/packages/neuron-ui/src/components/SUDTSend/sUDTSend.module.scss @@ -41,11 +41,21 @@ font-weight: 600; align-self: center; } - .tokenName { + .tokenNameContainer { grid-area: token-name; white-space: nowrap; font-size: 0.75rem; align-self: center; + min-width: 200px; + + .tokenName { + width: 100%; + display: inline-block; + + & > span { + width: 100%; + } + } } .balance { grid-area: balance; @@ -57,15 +67,28 @@ overflow: hidden; text-overflow: ellipsis; } - .symbol { + .symbolConatiner { grid-area: symbol; font-size: 0.875rem; + max-width: 800px; } border-bottom: 1px solid #aaa; padding-bottom: 20px; } +.symbol { + max-width: 100%; + display: inline-block; + & > span { + max-width: 100%; + } + &::after { + right: -20px; + left: auto; + } +} + .sendContainer { display: grid; grid-template: diff --git a/packages/neuron-ui/src/components/SUDTUpdateDialog/sUDTUpdateDialog.module.scss b/packages/neuron-ui/src/components/SUDTUpdateDialog/sUDTUpdateDialog.module.scss index 6cd0557858..fbf6cb8e47 100644 --- a/packages/neuron-ui/src/components/SUDTUpdateDialog/sUDTUpdateDialog.module.scss +++ b/packages/neuron-ui/src/components/SUDTUpdateDialog/sUDTUpdateDialog.module.scss @@ -37,7 +37,7 @@ .dialogContainer { @include dialog-container; - width: 500px; + width: 520px; box-sizing: border-box; background: #fff; padding: 30px 50px; diff --git a/packages/neuron-ui/src/components/TransactionList/index.tsx b/packages/neuron-ui/src/components/TransactionList/index.tsx index fac69d9915..6099fe9182 100644 --- a/packages/neuron-ui/src/components/TransactionList/index.tsx +++ b/packages/neuron-ui/src/components/TransactionList/index.tsx @@ -25,6 +25,7 @@ import { import { StateDispatch } from 'states' import { showTransactionDetails, openContextMenu, openExternal } from 'services/remote' +import { getDisplayName, isTonkenInfoStandardUAN, UANTokenName } from 'components/UANDisplay' import styles from './transactionList.module.scss' const { CONFIRMATION_THRESHOLD, DEFAULT_SUDT_FIELDS } = CONSTANTS @@ -143,6 +144,7 @@ const TransactionList = ({ let amount = '--' let typeLabel = '--' let sudtAmount = '' + let showWithUANFormatter = false if (tx.nftInfo) { // NFT @@ -155,7 +157,8 @@ const TransactionList = ({ name = tx.sudtInfo.sUDT.tokenName || DEFAULT_SUDT_FIELDS.tokenName if (['create', 'destroy'].includes(tx.type)) { // create/destroy an account - typeLabel = `${t(`history.${tx.type}`, { name })}` + showWithUANFormatter = isTonkenInfoStandardUAN(tx.sudtInfo.sUDT.tokenName, tx.sudtInfo.sUDT.symbol) + typeLabel = `${t(`history.${tx.type}`, { name: getDisplayName(name, tx.sudtInfo.sUDT.symbol) })}` } else { // send/receive to/from an account const type = +tx.sudtInfo.amount <= 0 ? 'send' : 'receive' @@ -221,7 +224,13 @@ const TransactionList = ({ {typeLabel} - {name} + {showWithUANFormatter ? ( + + ) : ( +
+ {name} +
+ )}
{indicator}
diff --git a/packages/neuron-ui/src/components/TransactionList/transactionList.module.scss b/packages/neuron-ui/src/components/TransactionList/transactionList.module.scss index 961606f0b3..eefb039a86 100644 --- a/packages/neuron-ui/src/components/TransactionList/transactionList.module.scss +++ b/packages/neuron-ui/src/components/TransactionList/transactionList.module.scss @@ -26,7 +26,7 @@ $pending-color: #b3b3b3; grid-template: 'avatar wallet-name amount indicator' auto 'toggle type time indicator' auto/ - 30px minmax(130px, 300px) 1fr 30px; + 30px minmax(130px, auto) minmax(130px, auto) 30px; grid-gap: 7px 10px; font-size: 0.875rem; @@ -50,6 +50,19 @@ $pending-color: #b3b3b3; .type { grid-area: type; + @include text-overflow-ellipsis; + } + + .uanType { + grid-area: type; + + & > span { + pointer-events: initial; + + &::after { + white-space: nowrap; + } + } } .amount { @@ -58,7 +71,6 @@ $pending-color: #b3b3b3; justify-self: flex-end; align-self: center; text-align: right; - width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -70,6 +82,14 @@ $pending-color: #b3b3b3; grid-area: wallet-name; font-weight: 600; align-self: center; + + & > span { + @include text-overflow-ellipsis; + } + } + + .tooltip { + @include tooltip; } &:before { diff --git a/packages/neuron-ui/src/components/UANDisplay/index.module.scss b/packages/neuron-ui/src/components/UANDisplay/index.module.scss new file mode 100644 index 0000000000..9d59fc6d02 --- /dev/null +++ b/packages/neuron-ui/src/components/UANDisplay/index.module.scss @@ -0,0 +1,21 @@ +@import '../../styles/mixin.scss'; + +.tokenName { + @include tooltip; + white-space: nowrap; + + & > span { + @include text-overflow-ellipsis; + display: inline-block; + } +} + +.tokenSymbol { + @include tooltip; + white-space: nowrap; + + & > span { + @include text-overflow-ellipsis; + display: inline-block; + } +} diff --git a/packages/neuron-ui/src/components/UANDisplay/index.tsx b/packages/neuron-ui/src/components/UANDisplay/index.tsx new file mode 100644 index 0000000000..7da7cd11de --- /dev/null +++ b/packages/neuron-ui/src/components/UANDisplay/index.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import styles from './index.module.scss' + +const symbolReg = /^([A-Z]|[0-9])+\.([a-z]|[0-9])+(\|([a-z]|[0-9])+\.([a-z]|[0-9])+)*$/ +export function isTonkenInfoStandardUAN(name: string, symbol: string) { + const isSymbolName = symbolReg.test(symbol) + if (!isSymbolName) { + return false + } + const assetSymbol = symbol.slice(0, symbol.indexOf('.')) + const hasRouter = symbol.lastIndexOf('|') !== -1 + const lastUANRouter = hasRouter ? symbol.slice(symbol.lastIndexOf('|') + 1) : '' + if (lastUANRouter) { + const [bridgeName, chainName] = lastUANRouter.split('.') + const bridgeFullReg = bridgeName + .split('') + .reduce((pre, cur) => `${pre}(${cur}|${cur.toUpperCase()})([a-z]|[0-9]|[ ])*`, '') + const reg = `^${assetSymbol} \\(via ${bridgeFullReg} from ${chainName.toUpperCase()}\\)$` + return new RegExp(reg).test(name) + } + return assetSymbol === name +} + +export function getDisplayName(name: string, symbol: string) { + if (isTonkenInfoStandardUAN(name, symbol)) { + return name.split('(')[0] + } + return name +} + +export function getDisplaySymbol(name: string, symbol: string) { + if (isTonkenInfoStandardUAN(name, symbol)) { + return symbol.split(/\.|\|/)[0] + } + return symbol +} + +export const UANTokenName = ({ name, symbol, className }: { name: string; symbol: string; className?: string }) => { + const displayName = getDisplayName(name, symbol) + return ( + + {displayName} + + ) +} + +UANTokenName.displayName = 'UANTokenName' + +export const UANTonkenSymbol = ({ name, symbol, className }: { name: string; symbol: string; className?: string }) => { + const displaySymbol = getDisplaySymbol(name, symbol) + return ( + + {displaySymbol} + + ) +} + +UANTonkenSymbol.displayName = 'UANTonkenSymbol' diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 216627233f..3f292b9e4d 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -141,7 +141,9 @@ }, "copy-balance": "Copy Balance", "create": "Create {{name}} Asset Account", - "destroy": "Destroy {{name}} Asset Account" + "destroy": "Destroy {{name}} Asset Account", + "createSUDT": "Create <0> Asset Account", + "destroySUDT": "Destroy <0> Asset Account" }, "wizard": { "welcome-to-nervos-neuron": "Welcome to Neuron", @@ -887,7 +889,7 @@ "select-option": "Please confirm the above option before submitting" }, "receive": { - "notation": "Accept {{symbol}} only" + "notation": "Accept <0> only" }, "update-dialog": { "update-asset-account": "Account setup", diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 1efcb3f965..e416fa9759 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -134,7 +134,9 @@ }, "copy-balance": "複製餘額", "create": "創建 {{name}} 資產賬戶", - "destroy": "銷毀 {{name}} 資產賬戶" + "destroy": "銷毀 {{name}} 資產賬戶", + "createSUDT": "創建 <0> 資產賬戶", + "destroySUDT": "銷毀 <0> 資產賬戶" }, "wizard": { "welcome-to-nervos-neuron": "歡迎使用 Neuron", @@ -879,7 +881,7 @@ "select-option": "提交前請確認上述選項" }, "receive": { - "notation": "只接收 {{symbol}} 轉賬" + "notation": "只接收 <0> 轉賬" }, "update-dialog": { "update-asset-account": "賬戶設置", diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index ccd351d180..5d6279049f 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -134,7 +134,9 @@ }, "copy-balance": "复制余额", "create": "创建 {{name}} 资产账户", - "destroy": "销毁 {{name}} 资产账户" + "destroy": "销毁 {{name}} 资产账户", + "createSUDT": "创建 <0> 资产账户", + "destroySUDT": "销毁 <0> 资产账户" }, "wizard": { "welcome-to-nervos-neuron": "欢迎使用 Neuron", @@ -879,7 +881,7 @@ "select-option": "提交前请确认上述选项" }, "receive": { - "notation": "只接收 {{symbol}} 转账" + "notation": "只接收 <0> 转账" }, "update-dialog": { "update-asset-account": "账户设置", diff --git a/packages/neuron-ui/src/styles/mixin.scss b/packages/neuron-ui/src/styles/mixin.scss index 045a534061..b04b62dcc2 100644 --- a/packages/neuron-ui/src/styles/mixin.scss +++ b/packages/neuron-ui/src/styles/mixin.scss @@ -115,3 +115,28 @@ text-overflow: ellipsis; white-space: nowrap; } + +@mixin tooltip { + position: relative; + pointer-events: initial !important; + + &::after { + display: none; + position: absolute; + left: -20px; + top: 120%; + content: attr(data-tooltip); + padding: 4px 12px; + border-radius: 6px; + background: #cccccc; + font-weight: 300; + max-width: 600px; + word-wrap: break-word; + white-space: normal; + z-index: 100; + } + + &:hover::after { + display: block; + } +} diff --git a/packages/neuron-ui/src/tests/validators/symbol/fixtures.ts b/packages/neuron-ui/src/tests/validators/symbol/fixtures.ts index f04aa079fa..9a41d04f40 100644 --- a/packages/neuron-ui/src/tests/validators/symbol/fixtures.ts +++ b/packages/neuron-ui/src/tests/validators/symbol/fixtures.ts @@ -41,9 +41,9 @@ const fixtures = { }, exception: null, }, - 'Should throw an error when symbol is longer than 8 chars': { + 'Should throw an error when symbol is longer than 101 chars': { params: { - symbol: 'n'.repeat(9), + symbol: 'n'.repeat(101), required: true, isCKB: false, }, @@ -57,9 +57,9 @@ const fixtures = { }, exception: ErrorCode.FieldInvalid, }, - 'Should pass when symbol is less than or equal to 8 chars without non-ascii chars': { + 'Should pass when symbol is less than or equal to 100 chars without non-ascii chars': { params: { - symbol: 'n'.repeat(8), + symbol: 'n'.repeat(100), required: true, isCKB: false, }, diff --git a/packages/neuron-ui/src/tests/validators/tokenName/fixtures.ts b/packages/neuron-ui/src/tests/validators/tokenName/fixtures.ts index 10c50f0eb0..eee4a6464c 100644 --- a/packages/neuron-ui/src/tests/validators/tokenName/fixtures.ts +++ b/packages/neuron-ui/src/tests/validators/tokenName/fixtures.ts @@ -49,17 +49,17 @@ const fixtures = { }, exception: ErrorCode.ValueReserved, }, - 'Should throw an error when token name is longer than 16 chars': { + 'Should throw an error when token name is longer than 201 chars': { params: { - tokenName: 't'.repeat(17), + tokenName: 't'.repeat(201), required: false, isCKB: true, }, exception: ErrorCode.FieldTooLong, }, - 'Should pass when token name is less than or equal to 16 chars': { + 'Should pass when token name is less than or equal to 200 chars': { params: { - tokenName: 't'.repeat(16), + tokenName: 't'.repeat(200), required: false, isCKB: true, }, diff --git a/packages/neuron-ui/src/utils/const.ts b/packages/neuron-ui/src/utils/const.ts index a7a62894aa..83d88dcbbf 100644 --- a/packages/neuron-ui/src/utils/const.ts +++ b/packages/neuron-ui/src/utils/const.ts @@ -31,8 +31,8 @@ export const INIT_SEND_PRICE = '1000' export const MIN_CKB_REQUIRED_BY_CKB_SUDT = 61 export const MIN_CKB_REQUIRED_BY_NORMAL_SUDT = 142 export const MAX_SUDT_ACCOUNT_NAME_LENGTH = 16 -export const MAX_SUDT_TOKEN_NAME_LENGTH = 16 -export const MAX_SYMBOL_LENGTH = 8 +export const MAX_SUDT_TOKEN_NAME_LENGTH = 200 +export const MAX_SYMBOL_LENGTH = 100 export const MIN_DECIMAL = 0 export const MAX_DECIMAL = 32 diff --git a/packages/neuron-ui/src/widgets/TextField/textField.module.scss b/packages/neuron-ui/src/widgets/TextField/textField.module.scss index 53397f79d9..a1c503f923 100644 --- a/packages/neuron-ui/src/widgets/TextField/textField.module.scss +++ b/packages/neuron-ui/src/widgets/TextField/textField.module.scss @@ -67,6 +67,7 @@ $secondary-font-size: 0.63rem; color: #434343; padding: 0 10px; font-size: 0.75rem; + max-width: 200px; } &:focus-within { From 68fa9f5aa0eccc8636871a67da87c87977fb057f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 18:01:13 +0800 Subject: [PATCH 18/22] chore(deps-dev): bump eslint from 8.15.0 to 8.22.0 in /packages/ckb-indexer (#2475) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/ckb-indexer/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ckb-indexer/package.json b/packages/ckb-indexer/package.json index 188d39de05..7d4e17a515 100644 --- a/packages/ckb-indexer/package.json +++ b/packages/ckb-indexer/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "events": "3.3.0", - "eslint": "8.15.0" + "eslint": "8.22.0" }, "scripts": { "build": "tsc", From cb6aedf1559ac7203a0210dcf1cc1dbd60c37255 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 02:59:45 +0000 Subject: [PATCH 19/22] chore(deps): bump @ckb-lumos/base in /packages/ckb-indexer Bumps [@ckb-lumos/base](https://github.com/nervosnetwork/lumos) from 0.18.0-rc2 to 0.18.0. - [Release notes](https://github.com/nervosnetwork/lumos/releases) - [Commits](https://github.com/nervosnetwork/lumos/compare/v0.18.0-rc2...v0.18.0) --- updated-dependencies: - dependency-name: "@ckb-lumos/base" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/ckb-indexer/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ckb-indexer/package.json b/packages/ckb-indexer/package.json index 250db1ba59..13b3ed9df0 100644 --- a/packages/ckb-indexer/package.json +++ b/packages/ckb-indexer/package.json @@ -15,7 +15,7 @@ "test": "__tests__" }, "dependencies": { - "@ckb-lumos/base": "0.18.0-rc2", + "@ckb-lumos/base": "0.18.0", "@ckb-lumos/rpc": "0.18.0", "ckb-js-toolkit": "0.100.0-rc1", "cross-fetch": "3.1.5" From b6889d9a60b7d46d94721b7c127d4d70f7602cb4 Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Tue, 30 Aug 2022 10:54:53 +0800 Subject: [PATCH 20/22] fix: Fix some exception from set ckb node path (#2478) --- packages/neuron-wallet/src/controllers/api.ts | 5 ++--- .../neuron-wallet/src/services/indexer.ts | 21 ++++++++++--------- .../src/services/monitor/base.ts | 13 ++++++------ .../src/services/monitor/index.ts | 18 ++++------------ .../tests/services/monitor.test.ts | 11 ++++------ 5 files changed, 28 insertions(+), 40 deletions(-) diff --git a/packages/neuron-wallet/src/controllers/api.ts b/packages/neuron-wallet/src/controllers/api.ts index 33d77cf380..905064e5d3 100644 --- a/packages/neuron-wallet/src/controllers/api.ts +++ b/packages/neuron-wallet/src/controllers/api.ts @@ -481,11 +481,10 @@ export default class ApiController { } } SettingsService.getInstance().ckbDataPath = dataPath - await stopMonitor('ckb-indexer') + await startMonitor('ckb', true) if (finallyClearCache) { - await IndexerService.clearCache(true) + await IndexerService.clearCache(true, true) } - startMonitor(undefined, true) return { status: ResponseCode.Success, result: SettingsService.getInstance().ckbDataPath diff --git a/packages/neuron-wallet/src/services/indexer.ts b/packages/neuron-wallet/src/services/indexer.ts index f2da7931a8..f2228a54b6 100644 --- a/packages/neuron-wallet/src/services/indexer.ts +++ b/packages/neuron-wallet/src/services/indexer.ts @@ -6,13 +6,13 @@ import { ChildProcess, spawn } from 'child_process' import process from 'process' import { dialog } from 'electron' import logger from 'utils/logger' -import { Network } from 'models/network' +import { MAINNET_GENESIS_HASH, Network } from 'models/network' import SyncedBlockNumber from 'models/synced-block-number' import NetworksService from './networks' import CommonUtils from 'utils/common' -import { resetSyncTaskQueue } from 'block-sync-renderer' import { clean as cleanChain } from 'database/chain' import SettingsService from './settings' +import startMonitor, { stopMonitor } from './monitor' const platform = (): string => { switch (process.platform) { @@ -68,16 +68,16 @@ export default class IndexerService { await IndexerService.ensurePortUsable() } - static clearCache = async (clearIndexerFolder = false) => { - await resetSyncTaskQueue.asyncPush(false) + static clearCache = async (clearIndexerFolder = false, forceClearMainnet?: boolean) => { + await stopMonitor('ckb-indexer') await cleanChain() if (clearIndexerFolder) { - IndexerService.getInstance().clearData() + IndexerService.getInstance().clearData(forceClearMainnet) await new SyncedBlockNumber().setNextBlock(BigInt(0)) } - await resetSyncTaskQueue.asyncPush(true) + await startMonitor('ckb-indexer') } static createFolder(dir: string) { @@ -142,6 +142,7 @@ export default class IndexerService { try { const bin = IndexerService.getBinary() const params = ['-c', network.remote, '-s', dataPath, '-l', `127.0.0.1:${IndexerService.PORT}`] + logger.info(params) const indexer = spawn(bin, params) this.indexer = indexer logger.info(`Indexer:\tstart: PORT: ${IndexerService.PORT}...`) @@ -176,9 +177,9 @@ export default class IndexerService { }) } - clearData = () => { + clearData = (forceClearMainnet?: boolean) => { const network = NetworksService.getInstance().getCurrent() - const dataPath = this.#getDataPath(network) + const dataPath = this.#getDataPath(network, forceClearMainnet) logger.debug(`Removing data ${dataPath}`) fs.rmSync(dataPath, { recursive: true, force: true }) @@ -188,12 +189,12 @@ export default class IndexerService { - #getDataPath = (network: Network): string => { + #getDataPath = (network: Network, forceClearMainnet?: boolean): string => { let indexerDataPath = SettingsService.getInstance().indexerDataPath if (!indexerDataPath) { indexerDataPath = path.resolve(env.fileBasePath, IndexerService.indexerDataFolder, 'data') SettingsService.getInstance().indexerDataPath = indexerDataPath } - return path.resolve(indexerDataPath, `${network.genesisHash}`) + return path.resolve(indexerDataPath, `${forceClearMainnet ? MAINNET_GENESIS_HASH : network.genesisHash}`) } } diff --git a/packages/neuron-wallet/src/services/monitor/base.ts b/packages/neuron-wallet/src/services/monitor/base.ts index 5284c22e0b..2857985c79 100644 --- a/packages/neuron-wallet/src/services/monitor/base.ts +++ b/packages/neuron-wallet/src/services/monitor/base.ts @@ -21,7 +21,7 @@ export default abstract class Monitor { if (this.isReStarting) { return } - const timeout = timer(intervalTime / 2).pipe(map(() => true)) + const timeout = timer(intervalTime / 2).pipe(map(() => false)) const isLiving = await race(timeout, from(this.isLiving())).toPromise() if (!isLiving) { logger.info(`Monitor: is restarting ${this.name} process`) @@ -35,18 +35,19 @@ export default abstract class Monitor { } } - startMonitor(intervalTime: number = 10000, startNow: boolean = false) { + async startMonitor(intervalTime: number = 10000, startNow: boolean = false) { this.interval = interval(intervalTime) - if (startNow) { - this.monitor(intervalTime) - } if (!this.subcription?.closed) { this.subcription?.unsubscribe() } this.subcription = this.interval.subscribe(async () => this.monitor(intervalTime)) + if (startNow) { + await this.monitor(intervalTime) + } } - clearMonitor() { + async stopMonitor() { this.subcription?.unsubscribe() + await this.stop() } } diff --git a/packages/neuron-wallet/src/services/monitor/index.ts b/packages/neuron-wallet/src/services/monitor/index.ts index 89cd79621f..932bd7e788 100644 --- a/packages/neuron-wallet/src/services/monitor/index.ts +++ b/packages/neuron-wallet/src/services/monitor/index.ts @@ -4,24 +4,14 @@ import CkbMonitor from './ckb-monitor' const monitors: Base[] = [] -export default function startMonitor(name?: string, startNow?: boolean) { +export default async function startMonitor(name?: string, startNow?: boolean) { if (!monitors.length) { monitors.push(new CkbIndexerMonitor(), new CkbMonitor()) } - monitors - .filter(v => !name || v.name === name) - .forEach((v: Base) => { - v.startMonitor(undefined, startNow) - }) + const filterMonitors = monitors.filter(v => !name || v.name === name) + await Promise.all(filterMonitors.map((v: Base) => v.startMonitor(undefined, startNow))) } export async function stopMonitor(name?: string) { - await Promise.all( - monitors - .filter(v => !name || v.name === name) - .map(v => { - v.clearMonitor() - return v.stop() - }) - ) + await Promise.all(monitors.filter(v => !name || v.name === name).map(v => v.stopMonitor())) } diff --git a/packages/neuron-wallet/tests/services/monitor.test.ts b/packages/neuron-wallet/tests/services/monitor.test.ts index f471f1f6bb..94306c40aa 100644 --- a/packages/neuron-wallet/tests/services/monitor.test.ts +++ b/packages/neuron-wallet/tests/services/monitor.test.ts @@ -107,13 +107,15 @@ describe('base monitor', () => { }) describe('start monitor', () => { + afterEach(async () => { + await monitor.stopMonitor() + }) it('is living', async () => { isLivingMock.mockResolvedValue(true) monitor.startMonitor(100) await wait(200) expect(isLivingMock).toHaveBeenCalled() expect(restartMock).toHaveBeenCalledTimes(0) - monitor.clearMonitor() }) it('not living', async () => { isLivingMock.mockResolvedValue(true).mockResolvedValueOnce(false) @@ -121,15 +123,13 @@ describe('base monitor', () => { await wait(200) expect(isLivingMock).toHaveBeenCalled() expect(restartMock).toHaveBeenCalled() - monitor.clearMonitor() }) it('isLiving timeout', async () => { isLivingMock.mockImplementation(() => wait(200)) monitor.startMonitor(100) await wait(200) expect(isLivingMock).toHaveBeenCalled() - expect(restartMock).toHaveBeenCalledTimes(0) - monitor.clearMonitor() + expect(restartMock).toHaveBeenCalledTimes(1) }) it('not living wait restart', async () => { isLivingMock.mockResolvedValue(true).mockResolvedValueOnce(false) @@ -138,7 +138,6 @@ describe('base monitor', () => { await wait(800) expect(isLivingMock).toHaveBeenCalled() expect(restartMock).toHaveBeenCalledTimes(1) - monitor.clearMonitor() }) it('start monitor with first', async () => { isLivingMock.mockResolvedValue(true).mockResolvedValueOnce(false) @@ -146,7 +145,6 @@ describe('base monitor', () => { await wait(500) expect(isLivingMock).toHaveBeenCalled() expect(restartMock).toHaveBeenCalled() - monitor.clearMonitor() }) it('twice start monitor', async () => { isLivingMock.mockReset() @@ -155,7 +153,6 @@ describe('base monitor', () => { monitor.startMonitor(500) await wait(800) expect(isLivingMock).toHaveBeenCalledTimes(1) - monitor.clearMonitor() }) }) }) From c4dcd611021ad7f4ceafea8ba1bb59bd35823289 Mon Sep 17 00:00:00 2001 From: Keith Date: Fri, 2 Sep 2022 12:00:03 +0800 Subject: [PATCH 21/22] chore: update neuron version and changelog --- CHANGELOG.md | 30 +++++++++++++++++++++++++++++ lerna.json | 6 ++---- packages/neuron-ui/package.json | 2 +- packages/neuron-wallet/package.json | 4 ++-- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 335c441f54..e0e6d700f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,33 @@ +# 0.104.0 (2022-09-07) + +### CKB +[CKB v0.104.0](https://github.com/nervosnetwork/ckb/releases/tag/v0.104.0) was released on Jul. 19th, 2022. This version of CKB node is now bundled and preconfigured in Neuron. + +### Assumed valid target + +// TODO +Blocks before `` will be skipped in validation. + + +### New features +* #2442: Import and export multisig configuration which is compatible with ckb-cli.(@yanguoyu) +* #2454: Add the 'contact us' item in the help menu.(@Keith-CY) +* #2461: Remove maturity restriction of header deps.(@yanguoyu) +* #2465: Adapt new UAN for sUDT.(@yanguoyu) +* #2472: Bump ckb to v0.104.0 (@Keith-CY) + +### Bug fixes +* #2447: Show friendly error on creating multisig address.(@yanguoyu) +* #2450: Fix sending multisig tx of multiple input cells.(@yanguoyu) +* #2451: Refine textfield component.(@yanguoyu +* #2464, #2478: Optimize setting data path of ckb node/indexer.(@yanguoyu) +* #2467: Fix ckb process killed unexpectedly.(@yanguoyu) + + +**Full Changelog**: https://github.com/nervosnetwork/neuron/compare/v0.103.2...v0.104.0 + + + # 0.103.2 (2022-07-09) ### New features diff --git a/lerna.json b/lerna.json index d9a2798810..164f8289a2 100644 --- a/lerna.json +++ b/lerna.json @@ -1,8 +1,6 @@ { - "packages": [ - "packages/*" - ], - "version": "0.103.2", + "packages": ["packages/*"], + "version": "0.104.0", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index e2b3759f89..6cf8659e5a 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -1,6 +1,6 @@ { "name": "neuron-ui", - "version": "0.103.2", + "version": "0.104.0", "private": true, "author": { "name": "Nervos Core Dev", diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index b2e9e32b56..483f194e90 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -3,7 +3,7 @@ "productName": "Neuron", "description": "CKB Neuron Wallet", "homepage": "https://www.nervos.org/", - "version": "0.103.2", + "version": "0.104.0", "private": true, "author": { "name": "Nervos Core Dev", @@ -91,7 +91,7 @@ "eslint-plugin-prettier": "3.1.1", "jest-when": "2.7.2", "lint-staged": "9.2.5", - "neuron-ui": "0.103.2", + "neuron-ui": "0.104.0", "prettier": "1.19.1", "rimraf": "3.0.0", "ttypescript": "1.5.10", From 961e91481cc1f07954c4f8d3735b24b03aadfb87 Mon Sep 17 00:00:00 2001 From: Keith Date: Tue, 13 Sep 2022 14:11:05 +0800 Subject: [PATCH 22/22] chore: update assumed valid target Set block 8067227 as the assumed valid target --- packages/neuron-wallet/.env | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/neuron-wallet/.env b/packages/neuron-wallet/.env index b091d32d71..4652e4c560 100644 --- a/packages/neuron-wallet/.env +++ b/packages/neuron-wallet/.env @@ -117,4 +117,6 @@ DAO_CODE_HASH=0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e MULTISIG_CODE_HASH=0x5c5069eb0857efc65e1bca0c07df34c31663b3622fd3876c876320fc9634e2a8 # CKB NODE OPTIONS -CKB_NODE_ASSUME_VALID_TARGET='0x6c914adcfd5289e8c4058e60e83555d5eb04ddc547b6184f1fae72d5f36929a3' +# assume valid target to skip block validation +# https://explorer.nervos.org/block/8067227 +CKB_NODE_ASSUME_VALID_TARGET='0x4f682ba128386dc2b1d1e99f5aa022de9172e587e9ab49361bb88962ceac3eaa'