// extension/popup.jsx
function Popup() {
let [pubKey, setPubKey] = useState('')
let keys = useRef([])
let [ckbAddress, setCkbAddress] = useState('')
useEffect(() => {
browser.storage.local.get(['private_key', 'relays']).then(results => {
if (results.private_key) {
// results.private_key is a hex with length 64, no '0x' prefix
const ckb_addr = getCkbAddress(`0x${results.private_key}`);
setCkbAddress(ckb_addr);
let hexKey = getPublicKey(results.private_key)
let npubKey = nip19.npubEncode(hexKey)
setPubKey(npubKey)
extension 目录中添加nervos.js文件:
···
import { Buffer } from ‘buffer’;
import { ec as EC } from “elliptic”;
import { HexString, utils } from “@ckb-lumos/base”;
import { initializeConfig, predefined } from ‘@ckb-lumos/config-manager’;
import { encodeToAddress } from ‘@ckb-lumos/helpers’;
global.Buffer = Buffer;
const ec = new EC(“secp256k1”);
function assertPrivateKey(privateKey) {
utils.assertHexString(“privateKey”, privateKey);
if (privateKey.length !== 66) {
throw new Error(privateKey must be length of 32 bytes!);
}
}
function assertPublicKey(publicKey, debugPath) {
debugPath = debugPath || “publicKey”;
utils.assertHexString(debugPath, publicKey);
if (publicKey.length !== 68) {
throw new Error(publicKey must be length of 33 bytes!);
}
}
export function privateToPublic(privateKey) {
let pkBuffer = privateKey;
if (typeof privateKey === “string”) {
assertPrivateKey(privateKey);
pkBuffer = Buffer.from(privateKey.slice(2), “hex”);
}
if (pkBuffer.length !== 32) {
throw new Error(“Private key must be 32 bytes!”);
}
const publickey = ec.keyFromPrivate(pkBuffer).getPublic(true, “hex”);
if (typeof privateKey === “string”) {
return “0x” + publickey;
}
return Buffer.from(publickey, “hex”);
}
export function publicKeyToBlake160(publicKey) {
assertPublicKey(publicKey);
const blake160 = new utils.CKBHasher()
.update(publicKey)
.digestHex()
.slice(0, 42);
return blake160;
}