Skip to content

Commit d2f6bf4

Browse files
committed
feat: Support load env from env file.
If we have set the env that includes scripts info, use the env value to replace the lumos config.
1 parent 4e46d03 commit d2f6bf4

File tree

6 files changed

+84
-17
lines changed

6 files changed

+84
-17
lines changed

packages/neuron-wallet/src/models/asset-account-info.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { bytes, struct, createFixedBytesCodec } from '@ckb-lumos/lumos/codec'
2-
import { predefined } from '@ckb-lumos/config-manager'
32
import CellDep, { DepType } from './chain/cell-dep'
43
import Script, { ScriptHashType } from './chain/script'
54
import OutPoint from './chain/out-point'
@@ -9,6 +8,7 @@ import SystemScriptInfo from './system-script-info'
98
import { Address } from './address'
109
import { UDTType } from '../utils/const'
1110
import { predefinedSporeConfigs, SporeConfig, SporeScript } from '@spore-sdk/core'
11+
import { AGGRON4, LINA } from '../utils/systemScripts'
1212

1313
const createFixedHexBytesCodec = (byteLength: number) =>
1414
createFixedBytesCodec({ byteLength, pack: bytes.bytify, unpack: bytes.hexify })
@@ -48,7 +48,7 @@ export default class AssetAccountInfo {
4848

4949
constructor(genesisBlockHash: string = NetworksService.getInstance().getCurrent().genesisHash) {
5050
const isMainnet = genesisBlockHash === AssetAccountInfo.MAINNET_GENESIS_BLOCK_HASH
51-
const { XUDT, SUDT, ANYONE_CAN_PAY } = isMainnet ? predefined.LINA.SCRIPTS : predefined.AGGRON4.SCRIPTS
51+
const { XUDT, SUDT, ANYONE_CAN_PAY } = isMainnet ? LINA.SCRIPTS : AGGRON4.SCRIPTS
5252
this.xudt = {
5353
cellDep: new CellDep(new OutPoint(XUDT.TX_HASH, XUDT.INDEX), XUDT.DEP_TYPE as DepType),
5454
codeHash: XUDT.CODE_HASH,

packages/neuron-wallet/src/utils/scriptAndAddress.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { type Script, hd } from '@ckb-lumos/lumos'
2-
import { predefined } from '@ckb-lumos/lumos/config'
32
import { encodeToAddress, parseAddress } from '@ckb-lumos/lumos/helpers'
43
import { systemScripts } from './systemScripts'
4+
import { AGGRON4, LINA } from '../utils/systemScripts'
55

66
export enum DefaultAddressNumber {
77
Change = 10,
@@ -22,7 +22,7 @@ export const publicKeyToAddress = (publicKey: string, isMainnet = false) => {
2222
}
2323

2424
export const scriptToAddress = (script: CKBComponents.Script, isMainnet = true): string => {
25-
const lumosConfig = !isMainnet ? predefined.AGGRON4 : predefined.LINA
25+
const lumosConfig = !isMainnet ? AGGRON4 : LINA
2626
return encodeToAddress(
2727
// omit keys other than codeHash, args and hashType
2828
{
@@ -39,6 +39,6 @@ export const addressToScript = (address: string): Script => {
3939
if (prefix !== 'ckt' && prefix !== 'ckb') {
4040
throw new Error('Invalid address prefix')
4141
}
42-
const lumosConfig = prefix === 'ckt' ? predefined.AGGRON4 : predefined.LINA
42+
const lumosConfig = prefix === 'ckt' ? AGGRON4 : LINA
4343
return parseAddress(address, { config: lumosConfig })
4444
}

packages/neuron-wallet/src/utils/systemScripts.ts

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { predefined } from '@ckb-lumos/lumos/config'
1+
import { predefined, createConfig, type ScriptConfig } from '@ckb-lumos/config-manager'
22

33
const systemScriptsMainnet = predefined.LINA.SCRIPTS
44
const systemScriptsTestnet = predefined.AGGRON4.SCRIPTS
@@ -25,3 +25,47 @@ export const systemScripts = {
2525
HASH_TYPE: systemScriptsTestnet.ANYONE_CAN_PAY.HASH_TYPE,
2626
},
2727
}
28+
29+
function getPredefinedFromEnv(
30+
isMainnet: boolean,
31+
type: 'SUDT' | 'ACP' | 'XUDT',
32+
key: keyof typeof predefined.LINA.SCRIPTS
33+
): Partial<typeof predefined.LINA.SCRIPTS> | undefined {
34+
const prefix = `${isMainnet ? 'MAINNET_' : 'TESTNET_'}${type}_`
35+
const CODE_HASH = process.env[`${prefix}SCRIPT_CODEHASH`]
36+
const HASH_TYPE = process.env[`${prefix}SCRIPT_HASHTYPE`] as ScriptConfig['HASH_TYPE']
37+
const TX_HASH = process.env[`${prefix}DEP_TXHASH`]
38+
const INDEX = process.env[`${prefix}DEP_INDEX`]
39+
const DEP_TYPE = process.env[`${prefix}DEP_TYPE`] as ScriptConfig['DEP_TYPE']
40+
if (CODE_HASH && HASH_TYPE && TX_HASH && INDEX && DEP_TYPE) {
41+
return {
42+
[key]: {
43+
CODE_HASH,
44+
HASH_TYPE,
45+
TX_HASH,
46+
INDEX,
47+
DEP_TYPE,
48+
},
49+
}
50+
}
51+
}
52+
53+
export const LINA = createConfig({
54+
PREFIX: predefined.LINA.PREFIX,
55+
SCRIPTS: {
56+
...predefined.LINA.SCRIPTS,
57+
...getPredefinedFromEnv(true, 'SUDT', 'SUDT'),
58+
...getPredefinedFromEnv(true, 'XUDT', 'XUDT'),
59+
...getPredefinedFromEnv(true, 'ACP', 'ANYONE_CAN_PAY'),
60+
},
61+
})
62+
63+
export const AGGRON4 = createConfig({
64+
PREFIX: predefined.AGGRON4.PREFIX,
65+
SCRIPTS: {
66+
...predefined.AGGRON4.SCRIPTS,
67+
...getPredefinedFromEnv(false, 'SUDT', 'SUDT'),
68+
...getPredefinedFromEnv(false, 'XUDT', 'XUDT'),
69+
...getPredefinedFromEnv(false, 'ACP', 'ANYONE_CAN_PAY'),
70+
},
71+
})

packages/neuron-wallet/tests/models/asset-account-info.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { predefined } from '@ckb-lumos/config-manager'
1+
import { AGGRON4 } from '../../src/utils/systemScripts'
22
import AssetAccountInfo from '../../src/models/asset-account-info'
33
import CellDep, { DepType } from '../../src/models/chain/cell-dep'
44
import OutPoint from '../../src/models/chain/out-point'
@@ -8,7 +8,7 @@ import AddressMeta from '../../src/database/address/meta'
88
const { AddressType } = hd
99

1010
describe('AssetAccountInfo', () => {
11-
const { SUDT, ANYONE_CAN_PAY } = predefined.AGGRON4.SCRIPTS
11+
const { SUDT, ANYONE_CAN_PAY } = AGGRON4.SCRIPTS
1212
const testnetSudtInfo = {
1313
cellDep: new CellDep(new OutPoint(SUDT.TX_HASH, SUDT.INDEX), SUDT.DEP_TYPE as DepType),
1414
codeHash: SUDT.CODE_HASH,

packages/neuron-wallet/tests/setup.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import '../src/locales/i18n'
22
import { LedgerHID, LedgerCkbApp } from './mock/hardware'
3-
import { systemScripts } from '../src/utils/systemScripts'
43

54
jest.mock('levelup', () => {
65
return () => ({
@@ -17,14 +16,18 @@ jest.mock('dotenv', () => ({
1716
process.env.MAINNET_SUDT_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000000'
1817
process.env.MAINNET_SUDT_DEP_INDEX = '0'
1918
process.env.MAINNET_SUDT_DEP_TYPE = 'code'
20-
process.env.MAINNET_SUDT_SCRIPT_CODEHASH = '0x0000000000000000000000000000000000000000000000000000000000000000'
2119
process.env.MAINNET_SUDT_SCRIPT_HASHTYPE = 'data'
20+
process.env.MAINNET_XUDT_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001'
21+
process.env.MAINNET_XUDT_DEP_INDEX = '0'
22+
process.env.MAINNET_XUDT_DEP_TYPE = 'code'
23+
process.env.MAINNET_XUDT_SCRIPT_CODEHASH = '0x0000000000000000000000000000000000000000000000000000000000000001'
24+
process.env.MAINNET_XUDT_SCRIPT_HASHTYPE = 'data'
2225

2326
process.env.MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000000'
2427
process.env.MAINNET_ACP_DEP_INDEX = '0'
2528
process.env.MAINNET_ACP_DEP_TYPE = 'code'
26-
process.env.MAINNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY_MAINNET.CODE_HASH
27-
process.env.MAINNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY_MAINNET.HASH_TYPE
29+
process.env.MAINNET_ACP_SCRIPT_CODEHASH = '0xd369597ff47f29fbc0d47d2e3775370d1250b85140c670e4718af712983a2354'
30+
process.env.MAINNET_ACP_SCRIPT_HASHTYPE = 'type'
2831

2932
process.env.LEGACY_MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001'
3033
process.env.LEGACY_MAINNET_ACP_DEP_INDEX = '0'
@@ -59,12 +62,17 @@ jest.mock('dotenv', () => ({
5962
process.env.TESTNET_SUDT_DEP_TYPE = 'code'
6063
process.env.TESTNET_SUDT_SCRIPT_CODEHASH = '0x48dbf59b4c7ee1547238021b4869bceedf4eea6b43772e5d66ef8865b6ae7212'
6164
process.env.TESTNET_SUDT_SCRIPT_HASHTYPE = 'data'
65+
process.env.TESTNET_XUDT_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000011'
66+
process.env.TESTNET_XUDT_DEP_INDEX = '0'
67+
process.env.TESTNET_XUDT_DEP_TYPE = 'code'
68+
process.env.TESTNET_XUDT_SCRIPT_CODEHASH = '0x0000000000000000000000000000000000000000000000000000000000000011'
69+
process.env.TESTNET_XUDT_SCRIPT_HASHTYPE = 'data'
6270

6371
process.env.TESTNET_ACP_DEP_TXHASH = '0x4f32b3e39bd1b6350d326fdfafdfe05e5221865c3098ae323096f0bfc69e0a8c'
6472
process.env.TESTNET_ACP_DEP_INDEX = '0'
6573
process.env.TESTNET_ACP_DEP_TYPE = 'depGroup'
66-
process.env.TESTNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY_TESTNET.CODE_HASH
67-
process.env.TESTNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY_TESTNET.HASH_TYPE
74+
process.env.TESTNET_ACP_SCRIPT_CODEHASH = '0x3419a1c09eb2567f6552ee7a8ecffd64155cffe0f1796e6e61ec088d740c1356'
75+
process.env.TESTNET_ACP_SCRIPT_HASHTYPE = 'type'
6876

6977
process.env.LEGACY_TESTNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001'
7078
process.env.LEGACY_TESTNET_ACP_DEP_INDEX = '0'
@@ -85,9 +93,9 @@ jest.mock('dotenv', () => ({
8593
process.env.TESTNET_CHEQUE_SCRIPT_CODEHASH = '0x0000000000000000000000000000000000000000000000000000000000000003'
8694
process.env.TESTNET_CHEQUE_SCRIPT_HASHTYPE = 'type'
8795

88-
process.env.SECP256K1_CODE_HASH = systemScripts.SECP256K1_BLAKE160.CODE_HASH
89-
process.env.DAO_CODE_HASH = systemScripts.DAO.CODE_HASH
90-
process.env.MULTISIG_CODE_HASH = systemScripts.SECP256K1_BLAKE160_MULTISIG.CODE_HASH
96+
process.env.SECP256K1_CODE_HASH = '0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8'
97+
process.env.DAO_CODE_HASH = '0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e'
98+
process.env.MULTISIG_CODE_HASH = '0x5c5069eb0857efc65e1bca0c07df34c31663b3622fd3876c876320fc9634e2a8'
9199

92100
process.env.TESTNET_NFT_SCRIPT_CODEHASH = '0xb1837b5ad01a88558731953062d1f5cb547adf89ece01e8934a9f0aeed2d959f'
93101
process.env.TESTNET_NFT_SCRIPT_HASH_TYPE = 'type'
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Add import env to load env
2+
import env from '../../src/env'
3+
import { AGGRON4, LINA } from '../../src/utils/systemScripts'
4+
5+
describe('Test env is loaded', () => {
6+
it('test xudt', () => {
7+
console.info(env.fileBasePath)
8+
expect(LINA.SCRIPTS.XUDT.CODE_HASH).toBe('0x0000000000000000000000000000000000000000000000000000000000000001')
9+
expect(AGGRON4.SCRIPTS.XUDT.CODE_HASH).toBe('0x0000000000000000000000000000000000000000000000000000000000000011')
10+
})
11+
it('test sudt', () => {
12+
expect(LINA.SCRIPTS.SUDT.CODE_HASH).toBe('0x48dbf59b4c7ee1547238021b4869bceedf4eea6b43772e5d66ef8865b6ae7212')
13+
expect(AGGRON4.SCRIPTS.SUDT.CODE_HASH).toBe('0x48dbf59b4c7ee1547238021b4869bceedf4eea6b43772e5d66ef8865b6ae7212')
14+
})
15+
})

0 commit comments

Comments
 (0)