Migrate to Lumos v0.24
BREAKING: Buffer replaced by Uint8Array
Lumos can now run in browsers without any extra configs / polyfills with vite, webpack or create-react-app.
Buffer
was return type
Methods / functions used to return a Buffer
now returns a Uint8Array
, e.g. In @ckb-lumos/hd
- export function privateToPublic(privateKey: Buffer | HexString): Buffer | HexString
+ export function privateToPublic(privateKey: Uint8Array | HexString): Uint8Array | HexString
- export function mnemonicToSeedSync(mnemonic = "", password = ""): Buffer
+ export function mnemonicToSeedSync(mnemonic = "", password = ""): Uint8Array
- export function mnemonicToSeed(mnemonic = "", password = ""): Promise<Buffer>
+ export function mnemonicToSeed(mnemonic = "", password = ""): Promise<Uint8Array>
You can use the hexify
method from @ckb-lumos/lumos/codec
to replace buffer.toString('hex')
- "0x" + privateToPublick(privKey).toString('hex')
+ hexify(privateToPublic(privKey))
Notice: hexify
returns HexString
which starts with '0x'
while buffer.toString('hex')
result has no '0x'
prefix.
Same for @ckb-lumos/hd/KeyStore
export default class Keystore {
...
- derivedKey(password: string): Buffer
+ derivedKey(password: string): Uint8Array
...
}
Buffer
was parameter type
You can still pass in Buffer
because Buffer
is a subclass of Uint8Array
, but using Uint8Array
is recomended.
@ckb-lumos/hd/KeyChain
export default class Keychain {
...
- constructor(privateKey: Buffer, chainCode: Buffer)
+ constructor(privateKey: Uint8Array, chainCode: Uint8Array)
...
- hash160(data: Buffer): Buffer
+ hash160(data: Uint8Array): Uint8Array
}
@ckb-lumos/hd/KeyStore
export default class Keystore {
...
static create(
extendedPrivateKey: ExtendedPrivateKey,
password: string,
- options: { salt?: Buffer; iv?: Buffer } = {}
+ options: { salt?: Uint8Array; iv?: Uint8Array } = {}
): Keystore
...
- static mac(derivedKey: Buffer, ciphertext: Buffer): HexStringWithoutPrefix
+ static mac(derivedKey: Uint8Array, ciphertext: Uint8Array): HexStringWithoutPrefix
}
BREAKING: Disallow the Omnilock P2SH Address by Default
The default options of createOmnilockScript
disallows the use of P2SH addresses for security reasons.
Not all P2SH addresses are P2SH-P2WPKH addresses.
This means that developers may unintentionally use a non-P2SH-P2WPKH address to convert to an Omnilock script,
which can lead to the script not being lockable.
If you still need to use a P2SH address, use the following code
createOmnilockScript({
auth: {
flag: "BITCOIN",
content: addr,
+ allows: ["P2WPKH", "P2PKH", "P2SH-P2WPKH"]
}
})