Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/neuron-wallet/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"@ckb-lumos/base": "0.20.0-alpha.3",
"@ckb-lumos/ckb-indexer": "0.20.0-alpha.3",
"@ckb-lumos/codec": "0.20.0-alpha.3",
"@ckb-lumos/lumos": "0.20.0-alpha.3",
"@ckb-lumos/rpc": "0.20.0-alpha.3",
"@iarna/toml": "2.2.5",
"@ledgerhq/hw-transport-node-hid": "6.27.15",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import AddressMeta from '../../database/address/meta'
import { scheduler } from 'timers/promises'
import SyncProgressService from '../../services/sync-progress'
import { BlockTips, LumosCellQuery, Connector, AppendScript } from './connector'
import { scriptToHash } from '@nervosnetwork/ckb-sdk-utils'
import { utils } from '@ckb-lumos/lumos'
import { FetchTransactionReturnType, LightRPC, LightScriptFilter } from '../../utils/ckb-rpc'
import HexUtils from '../../utils/hex'
import Multisig from '../../services/multisig'
Expand Down Expand Up @@ -125,7 +125,7 @@ export default class LightConnector extends Connector<CKBComponents.Hash> {
}
})
syncScripts.forEach(syncScript => {
const scriptHash = scriptToHash(syncScript.script)
const scriptHash = utils.computeScriptHash(syncScript.script)
const syncStatus = syncStatusMap.get(scriptHash)
if (
syncStatus &&
Expand Down Expand Up @@ -159,7 +159,7 @@ export default class LightConnector extends Connector<CKBComponents.Hash> {
const syncScripts = await this.lightRpc.getScripts()
const existSyncscripts: Record<string, LightScriptFilter> = {}
syncScripts.forEach(v => {
existSyncscripts[scriptToHash(v.script)] = v
existSyncscripts[utils.computeScriptHash(v.script)] = v
})
const currentWalletId = WalletService.getInstance().getCurrent()?.id
const allScripts = this.addressMetas
Expand Down Expand Up @@ -188,15 +188,15 @@ export default class LightConnector extends Connector<CKBComponents.Hash> {
...allScripts.map(v => ({
...v,
blockNumber:
existSyncscripts[scriptToHash(v.script)]?.blockNumber ??
existSyncscripts[utils.computeScriptHash(v.script)]?.blockNumber ??
walletStartBlockMap[v.walletId] ??
`0x${(walletMinBlockNumber?.[v.walletId] ?? 0).toString(16)}`,
})),
...appendScripts.map(v => ({
...v,
blockNumber:
existSyncscripts[scriptToHash(v.script)]?.blockNumber ??
`0x${(otherTypeSyncProgress[scriptToHash(v.script)] ?? 0).toString(16)}`,
existSyncscripts[utils.computeScriptHash(v.script)]?.blockNumber ??
`0x${(otherTypeSyncProgress[utils.computeScriptHash(v.script)] ?? 0).toString(16)}`,
})),
]
await this.lightRpc.setScripts(setScriptsParams)
Expand All @@ -205,7 +205,7 @@ export default class LightConnector extends Connector<CKBComponents.Hash> {
await SyncProgressService.updateSyncProgressFlag(walletIds)
await SyncProgressService.removeByHashesAndAddressType(
SyncAddressType.Multisig,
appendScripts.map(v => scriptToHash(v.script))
appendScripts.map(v => utils.computeScriptHash(v.script))
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { getConnection } from 'typeorm'
import { scriptToAddress } from '@nervosnetwork/ckb-sdk-utils'
import { config, helpers } from '@ckb-lumos/lumos'
import OutputEntity from '../../database/chain/entities/output'
import NetworksService from '../../services/networks'
import Output from '../../models/chain/output'
Expand Down Expand Up @@ -33,7 +33,8 @@ export default class TxAddressFinder {

const outputsResult: [boolean, Output[], AnyoneCanPayInfo[]] = this.selectOutputs()
const isMainnet = NetworksService.getInstance().isMainnet()
const outputAddresses: string[] = outputsResult[1].map(output => scriptToAddress(output.lock, isMainnet))
const lumosOptions = isMainnet ? { config: config.predefined.LINA } : { config: config.predefined.AGGRON4 }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are so many isMainnet ? LINA : AGGRON4 in the PR, such a refactoring would only increase the complexity, maybe it is better to extract a helper to cover the case

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree, we can init the config after ckb node starts and change the config when the network changes.

const outputAddresses: string[] = outputsResult[1].map(output => helpers.encodeToAddress(output.lock, lumosOptions))

return [
inputAddressesResult[0] || outputsResult[0],
Expand Down Expand Up @@ -86,6 +87,7 @@ export default class TxAddressFinder {
const anyoneCanPayInfos: AnyoneCanPayInfo[] = []
const inputs = this.tx.inputs!.filter(i => i.previousOutput !== null)
const isMainnet = NetworksService.getInstance().isMainnet()
const lumosOptions = isMainnet ? { config: config.predefined.LINA } : { config: config.predefined.AGGRON4 }

let shouldSync = false
for (const input of inputs) {
Expand All @@ -104,7 +106,7 @@ export default class TxAddressFinder {
}
if (output && this.lockHashes.has(output.lockHash)) {
shouldSync = true
addresses.push(scriptToAddress(output.lockScript(), isMainnet))
addresses.push(helpers.encodeToAddress(output.lockScript(), lumosOptions))
}
if (output && SystemScriptInfo.isMultiSignScript(output.lockScript())) {
const multiSignBlake160 = output.lockScript().args.slice(0, 42)
Expand Down
8 changes: 5 additions & 3 deletions packages/neuron-wallet/src/controllers/asset-account.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { scriptToAddress } from '@nervosnetwork/ckb-sdk-utils'
import { config, helpers } from '@ckb-lumos/lumos'
import AssetAccount from '../models/asset-account'
import Transaction from '../models/chain/transaction'
import AssetAccountService from '../services/asset-account-service'
Expand Down Expand Up @@ -81,11 +81,12 @@ export default class AssetAccountController {
}

const isMainnet = NetworksService.getInstance().isMainnet()
const lumosOptions = isMainnet ? { config: config.predefined.LINA } : { config: config.predefined.AGGRON4 }

const result = assetAccounts.map(aa => {
return {
...aa,
address: scriptToAddress(assetAccountInfo.generateAnyoneCanPayScript(aa.blake160), isMainnet),
address: helpers.encodeToAddress(assetAccountInfo.generateAnyoneCanPayScript(aa.blake160), lumosOptions),
}
})

Expand Down Expand Up @@ -125,12 +126,13 @@ export default class AssetAccountController {

const assetAccountInfo = new AssetAccountInfo()
const isMainnet = NetworksService.getInstance().isMainnet()
const lumosOptions = isMainnet ? { config: config.predefined.LINA } : { config: config.predefined.AGGRON4 }

return {
status: ResponseCode.Success,
result: {
...account,
address: scriptToAddress(assetAccountInfo.generateAnyoneCanPayScript(account.blake160), isMainnet),
address: helpers.encodeToAddress(assetAccountInfo.generateAnyoneCanPayScript(account.blake160), lumosOptions),
},
}
}
Expand Down
18 changes: 14 additions & 4 deletions packages/neuron-wallet/src/controllers/multisig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import fs from 'fs'
import path from 'path'
import { dialog, BrowserWindow } from 'electron'
import { t } from 'i18next'
import { addressToScript, scriptToAddress, scriptToHash } from '@nervosnetwork/ckb-sdk-utils'
import { ResponseCode } from '../utils/const'
import MultisigConfig from '../database/chain/entities/multisig-config'
import MultisigConfigModel from '../models/multisig-config'
Expand All @@ -12,6 +11,7 @@ import OfflineSignService from '../services/offline-sign'
import Multisig from '../models/multisig'
import SystemScriptInfo from '../models/system-script-info'
import NetworksService from '../services/networks'
import { config as lumosConig, helpers, utils, config } from '@ckb-lumos/lumos'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the difference between config as lumosConfig and config

@zhangyouxin zhangyouxin Jun 29, 2023

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setting lumosConfig as alias for config , because there is another viarable named config in the scope

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't get it, lumosConfig and config are both from @ckb-lumos/lumos.config, pointing to the same one.

BTW, lumosConig is a typo

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const saveConfigs = Object.values(configOutput.multisig_configs).map(config => ({
r: +config.require_first_n,
m: +config.threshold,
n: config.sighash_addresses.length,
blake160s: config.sighash_addresses.map(v => addressToScript(v).args),
walletId,
alias: config.alias,
}))

config is delared here in line 110, if import { config } from '@ckb-lumos/lumos', then there are two configs in the mapFunction, I'll fix the typo

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
import { config as lumosConig, helpers, utils, config } from '@ckb-lumos/lumos'
import { config as lumosConig, helpers, utils } from '@ckb-lumos/lumos'


interface MultisigConfigOutput {
multisig_configs: Record<
Expand Down Expand Up @@ -122,7 +122,13 @@ export default class MultisigController {
r: +config.require_first_n,
m: +config.threshold,
n: config.sighash_addresses.length,
blake160s: config.sighash_addresses.map(v => addressToScript(v).args),
blake160s: config.sighash_addresses.map(v => {
const isMainnet = v.startsWith('ckb')
const lumosOptions = isMainnet
? { config: lumosConig.predefined.LINA }
: { config: lumosConig.predefined.AGGRON4 }
return helpers.addressToScript(v, lumosOptions).args
}),
walletId,
alias: config.alias,
}))
Expand Down Expand Up @@ -170,11 +176,13 @@ export default class MultisigController {
return
}
const isMainnet = NetworksService.getInstance().isMainnet()
const lumosOptions = isMainnet ? { config: lumosConig.predefined.LINA } : { config: lumosConig.predefined.AGGRON4 }

const output: MultisigConfigOutput = { multisig_configs: {} }
configs.forEach(v => {
output.multisig_configs[Multisig.hash(v.blake160s, v.r, v.m, v.n)] = {
sighash_addresses: v.blake160s.map(args =>
scriptToAddress(SystemScriptInfo.generateSecpScript(args), isMainnet)
helpers.encodeToAddress(SystemScriptInfo.generateSecpScript(args), lumosOptions)
),
require_first_n: v.r,
threshold: v.m,
Expand Down Expand Up @@ -214,7 +222,9 @@ export default class MultisigController {
}
}
const tx = result.json
const lockHash = scriptToHash(addressToScript(fullPayload))
const isMainnet = fullPayload.startsWith('ckb')
const lumosOptions = isMainnet ? { config: config.predefined.LINA } : { config: config.predefined.AGGRON4 }
const lockHash = utils.computeScriptHash(helpers.addressToScript(fullPayload, lumosOptions))
if (tx.transaction.inputs.every(v => v.lockHash !== lockHash)) {
dialog.showErrorBox(t('common.error'), t('messages.multisig-lock-hash-mismatch'))
return {
Expand Down
4 changes: 2 additions & 2 deletions packages/neuron-wallet/src/controllers/sudt.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { scriptToHash } from '@nervosnetwork/ckb-sdk-utils'
import { utils } from '@ckb-lumos/lumos'
import LiveCellService from '../services/live-cell-service'
import AssetAccountInfo from '../models/asset-account-info'
import Script, { ScriptHashType } from '../models/chain/script'
Expand Down Expand Up @@ -41,7 +41,7 @@ export default class SUDTController {
const script = new Script(assetAcount.infos.sudt.codeHash, params.tokenID, assetAcount.infos.sudt.hashType)
return {
status: ResponseCode.Success,
result: scriptToHash(script.toSDK()),
result: utils.computeScriptHash(script.toSDK()),
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Entity, BaseEntity, Column, PrimaryColumn } from 'typeorm'
import Script, { ScriptHashType } from '../../../models/chain/script'
import OutPoint from '../../../models/chain/out-point'
import { scriptToHash } from '@nervosnetwork/ckb-sdk-utils'
import { utils } from '@ckb-lumos/lumos'
import { OutputStatus } from '../../../models/chain/output'

@Entity()
Expand Down Expand Up @@ -71,7 +71,7 @@ export default class MultisigOutput extends BaseEntity {
entity.lockArgs = params.output.lock.args
entity.lockCodeHash = params.output.lock.code_hash
entity.lockHashType = params.output.lock.hash_type as ScriptHashType
entity.lockHash = scriptToHash({
entity.lockHash = utils.computeScriptHash({
args: entity.lockArgs,
codeHash: entity.lockCodeHash,
hashType: entity.lockHashType,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { HexString } from '@ckb-lumos/base'
import { scriptToHash } from '@nervosnetwork/ckb-sdk-utils'
import { utils } from '@ckb-lumos/lumos'
import { Entity, PrimaryColumn, Column } from 'typeorm'

export enum SyncAddressType {
Expand Down Expand Up @@ -49,7 +49,7 @@ export default class SyncProgress {
addressType?: SyncAddressType
}) {
const res = new SyncProgress()
res.hash = scriptToHash(obj.script)
res.hash = utils.computeScriptHash(obj.script)
res.args = obj.script.args
res.codeHash = obj.script.codeHash
res.hashType = obj.script.hashType
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
import { MigrationInterface, QueryRunner } from "typeorm";
import { scriptToAddress, addressToScript } from '@nervosnetwork/ckb-sdk-utils'
import { MigrationInterface, QueryRunner } from 'typeorm'
import AddressDescription from '../entities/address-description'
import { config, helpers } from '@ckb-lumos/lumos'

export class UpdateAddressDescription1650984779265 implements MigrationInterface {
name = 'UpdateAddressDescription1650984779265'

public async up(queryRunner: QueryRunner): Promise<any> {
const descList = await queryRunner.manager.find(AddressDescription)

const updated = descList.map(desc => {
desc.address = scriptToAddress(addressToScript(desc.address), desc.address.startsWith('ckb'))
const isMainnet = desc.address.startsWith('ckb')
const lumosOptions = isMainnet ? { config: config.predefined.LINA } : { config: config.predefined.AGGRON4 }
desc.address = helpers.encodeToAddress(helpers.addressToScript(desc.address), lumosOptions)
return desc
})
await queryRunner.manager.save(updated)
Expand All @@ -17,5 +20,4 @@ export class UpdateAddressDescription1650984779265 implements MigrationInterface
public async down(): Promise<void> {
// do nothing
}

}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a migration that has already been released should not be refactored, which may pose some risks

Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
import { MigrationInterface, QueryRunner } from "typeorm"
import { addressToScript } from "@nervosnetwork/ckb-sdk-utils"
import MultisigConfig from "../entities/multisig-config"
import { MigrationInterface, QueryRunner } from 'typeorm'
import MultisigConfig from '../entities/multisig-config'
import { helpers } from '@ckb-lumos/lumos'

export class RemoveAddressesMultisigConfig1651820157100 implements MigrationInterface {
name = 'RemoveAddressesMultisigConfig1651820157100'
name = 'RemoveAddressesMultisigConfig1651820157100'

public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.renameColumn('multisig_config', 'addresses', 'blake160s')
await queryRunner.dropColumn('multisig_config', 'fullpayload')
const configList = await queryRunner.manager.find(MultisigConfig)
const updated = configList.map(v => {
v.blake160s = v.blake160s.map(v => addressToScript(v).args)
return v
})
await queryRunner.manager.save(updated)
}

public async down(): Promise<void> {
// do nothing
}
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.renameColumn('multisig_config', 'addresses', 'blake160s')
await queryRunner.dropColumn('multisig_config', 'fullpayload')
const configList = await queryRunner.manager.find(MultisigConfig)
const updated = configList.map(v => {
v.blake160s = v.blake160s.map(v => helpers.addressToScript(v).args)
return v
})
await queryRunner.manager.save(updated)
}

public async down(): Promise<void> {
// do nothing
}
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
import { In, MigrationInterface, QueryRunner } from "typeorm";
import { scriptToHash } from '@nervosnetwork/ckb-sdk-utils'
import { ScriptHashType } from "../../../models/chain/script";
import Output from "../entities/output";
import { In, MigrationInterface, QueryRunner } from 'typeorm'
import { utils } from '@ckb-lumos/lumos'
import { ScriptHashType } from '../../../models/chain/script'
import Output from '../entities/output'

export class UpdateOutputChequeLockHash1652945662504 implements MigrationInterface {
name = 'UpdateOutputChequeLockHash1652945662504'

public async up(queryRunner: QueryRunner): Promise<any> {
const errLockHash = [
scriptToHash({
utils.computeScriptHash({
args: '0x' + '0'.repeat(80),
codeHash: process.env.TESTNET_CHEQUE_SCRIPT_CODEHASH!,
hashType: process.env.TESTNET_CHEQUE_SCRIPT_HASHTYPE! as ScriptHashType
hashType: process.env.TESTNET_CHEQUE_SCRIPT_HASHTYPE! as ScriptHashType,
}),
scriptToHash({
utils.computeScriptHash({
args: '0x' + '0'.repeat(80),
codeHash: process.env.MAINNET_CHEQUE_SCRIPT_CODEHASH!,
hashType: process.env.MAINNET_CHEQUE_SCRIPT_HASHTYPE! as ScriptHashType
})
hashType: process.env.MAINNET_CHEQUE_SCRIPT_HASHTYPE! as ScriptHashType,
}),
]
const chequeOutput = await queryRunner.connection
.getRepository(Output)
.createQueryBuilder('output')
.where({ lockHash: In(errLockHash) })
.getMany()
const updated = chequeOutput.map(output => {
output.lockHash = scriptToHash({
output.lockHash = utils.computeScriptHash({
args: output.lockArgs,
hashType: output.lockHashType,
codeHash: output.lockCodeHash
codeHash: output.lockCodeHash,
})
return output
})
Expand All @@ -38,5 +38,4 @@ export class UpdateOutputChequeLockHash1652945662504 implements MigrationInterfa
public async down(): Promise<void> {
// do nothing
}

}
Loading