Skip to content
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
65f3506
chore: publish canary by pr comment
Hanssen0 Aug 14, 2025
705b27d
fix(core): avoid circular dependency
Hanssen0 Aug 14, 2025
b8a07c1
feat(core): `Signer.findCellsOnChain`
Hanssen0 Jun 20, 2025
7cd7696
feat(core): auto capacity completion
Hanssen0 Jun 14, 2025
e900c59
perf(core): optimize Transaction.completeFee
Hanssen0 Jun 14, 2025
4393803
feat(udt): `Udt.complete*` methods
Hanssen0 Aug 16, 2025
1c51782
docs: CONTRIBUTING.md
Hanssen0 Aug 17, 2025
2bfc53e
docs: pull request template
Hanssen0 Aug 17, 2025
eb1fdb3
fix(playground): some messages are not displyed
Hanssen0 Aug 17, 2025
b4f64ce
feat(core): multiple scripts for `SignerCkbScriptReadonly`
Hanssen0 Aug 17, 2025
e496560
feat(core): add `CellAny`
Hanssen0 Aug 16, 2025
5530fa9
feat(core): `reduce` and `reduceAsync` for `Iterable`
Hanssen0 Aug 17, 2025
b90cd5b
feat(mol): add support for fixed-size Union (#174)
phroi Aug 18, 2025
265af7d
fix: `prettier-vscode` doesn't work with `import`
Hanssen0 Aug 21, 2025
4675e6f
chore: move release branch from `master` to `release`
Hanssen0 Aug 21, 2025
5c24eb9
Merge branch 'release'
Hanssen0 Aug 22, 2025
698df9a
Merge branch 'releases/joy-id'
Hanssen0 Aug 22, 2025
638e5dc
fix(core)!: `getFeeRateStatistics` may returns `null` on devnet
Hanssen0 Aug 20, 2025
f547718
docs: fix images in README.md
Hanssen0 Aug 28, 2025
f82f9af
feat(core): default `Signer.prepareTransaction`
Hanssen0 Aug 17, 2025
d3695d1
Merge pull request #285 from ckb-devrel/release
Hanssen0 Aug 28, 2025
f52d761
Merge pull request #289 from ckb-devrel/release
Hanssen0 Aug 28, 2025
a789668
Merge pull request #300 from ckb-devrel/release
Hanssen0 Aug 29, 2025
99a2036
Revert "feat(udt): `Udt.complete*` methods"
Hanssen0 Sep 9, 2025
b96b7a6
Revert "feat: add RGB++ known scripts (RgbppLock, BtcTimeLock)"
Hanssen0 Sep 9, 2025
e2ce0a2
Merge branch 'release'
Hanssen0 Sep 9, 2025
f642cc5
feat(core): improve hex utils (#268)
phroi Sep 16, 2025
e413333
fix(core): Invalid Uint64 0x00: with redundant leading zeros.
Hanssen0 Sep 18, 2025
1070a7e
Merge branch `release` into `master`
Hanssen0 Sep 19, 2025
98e06ca
Merge branch `release` into `master`
Hanssen0 Sep 24, 2025
78f8588
Merge branch `release` into `master`
Hanssen0 Oct 1, 2025
3aa4425
chore: search manual proxy lock when signer isn't the proxy provider
ashuralyk Oct 16, 2025
d0af061
chore(release): bump packages version
github-actions[bot] Nov 21, 2025
5d4ad4e
feat(app): signature textarea for signing
Hanssen0 Nov 11, 2025
792ecc0
feat(rgbpp): implement network-aware JWT authentication for BTC Asset…
fghdotio Jul 29, 2025
a25497f
feat(rgbpp): add BTC address balance query interface to `RgbppBtcWallet`
fghdotio Jul 29, 2025
fef3e24
feat(playground): add RGB++ UDT issuance support
fghdotio Nov 19, 2025
f9b52fb
feat(playground): add RGB++ UDT issuance example and comprehensive guide
fghdotio Nov 26, 2025
fce9a70
refactor(rgbpp): migrate from shell to core dependencies and fix imports
fghdotio Nov 26, 2025
90b9290
fix(connector): resolve ESLint no-misused-promises error in setTimeou…
fghdotio Nov 26, 2025
28dfab1
feat(shell): integrate RGB++ protocol into shell package
fghdotio Nov 26, 2025
470b473
refactor(playground): update RGB++ integration
fghdotio Nov 26, 2025
3358203
chore: update pnpm-lock.yaml after rgbpp dependency changes
fghdotio Nov 26, 2025
b7392d8
fix(playground): correct mainnet address prefix check in RGB++ examples
fghdotio Nov 26, 2025
1480322
fix(rgbpp): fix typo
fghdotio Nov 26, 2025
ee04a44
fix(playground): update reference to CkbRgbppUnlockSigner
fghdotio Nov 26, 2025
0375cc3
refactor(playground): remove direct rgbpp dependency from execution e…
fghdotio Nov 26, 2025
ce15f60
fix(demo): correct CkbRgbppUnlockSigner class name spelling
fghdotio Nov 26, 2025
2221d9c
fix(playground): correct typo in RGB++ wallet creation error message
fghdotio Nov 26, 2025
ec1f097
fix(demo): resolve variable name shadowing in RGB++ UDT issuance
fghdotio Nov 26, 2025
83de9e3
refactor(rgbpp): enhance prepareUtxoSeal with robust retry mechanism
fghdotio Dec 2, 2025
9129f44
feat(btc): add SignPsbtOptions support for PSBT signing
fghdotio Nov 11, 2025
685b44c
feat(rgbpp): add SignPsbtOptions support and refactor to composition …
fghdotio Nov 11, 2025
9e97f88
refactor(btc): standardize PSBT API and improve type safety
fghdotio Nov 25, 2025
d335656
fix(rgbpp): resolve build errors and variable naming consistency
fghdotio Dec 2, 2025
c114284
fix(rgbpp): use duck typing instead of constructor.name for wallet de…
fghdotio Dec 3, 2025
7be409a
feat(rgbpp): add Xverse wallet support with automatic PSBT input dete…
fghdotio Dec 3, 2025
d03798e
refactor(xverse): extract psbt logic
fghdotio Dec 9, 2025
3379252
refactor(psbt): add unified sign+push flow and combined-wallet support
fghdotio Dec 9, 2025
a926111
refactor(rgbpp): use signAndBroadcast
fghdotio Dec 9, 2025
eab4987
docs(playground): update supported wallets
fghdotio Dec 9, 2025
ea7e626
chore: bump version of react
Hanssen0 Dec 13, 2025
f458ad0
chore(release): bump packages version
github-actions[bot] Dec 13, 2025
ef72b27
Merge branch `release` into `master`
Hanssen0 Dec 13, 2025
ca5514c
feat(rgbpp): add PublicKeyProvider system for P2TR PSBT inputs
fghdotio Dec 17, 2025
115e653
fix(rgbpp): add UTXO deduplication to prevent duplicate inputs
fghdotio Dec 17, 2025
585781f
refactor: migrate script management to use ccc.KnownScript
fghdotio Dec 17, 2025
d775270
refactor(rgbpp): remove signet network support
fghdotio Dec 17, 2025
9df1343
feat(rgbpp): add getRgbppScriptInfos method and fix async calls
fghdotio Dec 17, 2025
f179154
refactor(rgbpp): make transaction confirmation polling interval confi…
fghdotio Dec 22, 2025
a4b2ab5
refactor(rgbpp): refactor CkbRgbppUnlockSigner to use object paramete…
fghdotio Dec 22, 2025
c74aeca
Merge remote-tracking branch 'upstream/release' into feat/rgbpp-itera…
Dec 23, 2025
208fa66
feat(rgbpp): add linting and formatting support
Dec 23, 2025
15e8a28
refactor(rgbpp): refactor script management with provider pattern
Dec 24, 2025
1d98ace
feat(core): update RGB++ script configurations and remove Bitcoin Sig…
Dec 24, 2025
e50bb0e
feat(demo): add RGB++ xUDT transfer functionality
fghdotio Dec 30, 2025
2a24c87
refactor(rgbpp): reorganize bitcoin module directory structure
fghdotio Dec 30, 2025
88b6033
refactor(rgbpp): update import paths in rgbpp utils
fghdotio Dec 30, 2025
e89141d
fix(rgbpp): remove empty witness fields in CkbRgbppUnlockSigner
fghdotio Jan 6, 2026
22f3d51
feat(joy-id): address info in identity
Hanssen0 Sep 17, 2025
ef882bd
feat(core): `Signer.fromSignature`
Hanssen0 Sep 18, 2025
b3b3914
refactor(rgbpp): improve UDT example functions flexibility
fghdotio Jan 6, 2026
28c6673
fix(playground): remove `raw-loader` in `require.context` for turbopack
Hanssen0 Jan 7, 2026
6a3be47
fix: wrong capacity completion while deserializing transaction
Hanssen0 Jan 7, 2026
093fc3e
chore(release): bump packages version
github-actions[bot] Jan 8, 2026
f048ad8
Merge remote-tracking branch 'origin/release' into 'master'
Hanssen0 Jan 9, 2026
b4aa99f
fix(core): circular dependency due to btc.verify
Hanssen0 Jan 9, 2026
68b7147
chore(release): bump packages version
github-actions[bot] Jan 9, 2026
66ae81b
feat(core): Add `bytesLen` and `bytesLenUnsafe` utilities (#353)
phroi Jan 12, 2026
a96dec6
chore(core): bump nostr-lock mainnet cell deps
RetricSu Jan 15, 2026
3d11c1e
chore(release): bump packages version
github-actions[bot] Jan 15, 2026
99f815a
refactor(psbt): standardize btc signer interface and update dependencies
fghdotio Feb 4, 2026
a8d5cf3
feat(rgbpp): add playground RGB++ UDT issuance example, normalize BTC…
fghdotio Feb 4, 2026
50d657b
Merge remote-tracking branch 'origin/release'
Hanssen0 Feb 4, 2026
0113acc
Merge remote-tracking branch 'upstream/master' into feat/rgbpp-iteration
fghdotio Feb 4, 2026
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
2 changes: 1 addition & 1 deletion packages/connector/src/signers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export class SignersController {
hostConnected(): void {
void this.refresh();
// Wait for plugins to be loaded
setTimeout(() => this.refresh(), 500);
setTimeout(() => void this.refresh(), 500);
}

hostDisconnected(): void {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,9 @@ export default function IssueRGBPPXUdt() {

const config: BtcAssetApiConfig = {
url: process.env.NEXT_PUBLIC_BTC_ASSETS_API_URL!,
token: process.env.NEXT_PUBLIC_BTC_ASSETS_API_TOKEN!,
origin: process.env.NEXT_PUBLIC_BTC_ASSETS_API_ORIGIN!,
token: process.env.NEXT_PUBLIC_BTC_ASSETS_API_TOKEN,
origin: process.env.NEXT_PUBLIC_BTC_ASSETS_API_ORIGIN,
isMainnet: networkConfig.isMainnet,
};

return createBrowserRgbppBtcWallet(signer, networkConfig, config);
Expand Down
126 changes: 126 additions & 0 deletions packages/playground/RGBPP_UDT_ISSUANCE_GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# `@ckb-ccc/rgbpp` Development Guide

## Overview

This guide demonstrates how to use the `@ckb-ccc/rgbpp` package to build RGB++ applications on Bitcoin and CKB. We'll walk through a complete RGB++ [xUDT](https://docs.nervos.org/docs/tech-explanation/xudt) issuance example to showcase the key concepts and development patterns on the interactive playground environment.

## Prerequisites

Before running this example, ensure you have:

1. **Supported Wallet**: UniSat, JoyID
2. **Testnet Environment**: Currently only Bitcoin Testnet3 and CKB Testnet are supported on the playground environment
3. **Test Funds**:
- Bitcoin Testnet3 funds from [Bitcoin Faucet](https://bitcoinfaucet.uo1.net/)
- CKB Testnet funds from [Nervos Faucet](https://faucet.nervos.org/)

Basic understanding of the RGB++ protocol is also desired. Learn more at [RGB++ Protocol](https://rgbpp.com/).

## RGB++ xUDT Issuance Example

Let's walk through a complete RGB++ xUDT issuance example using `@ckb-ccc/rgbpp`:

### Step 1: Basic Setup

Environment validation and network configuration:

```typescript
// Basic wallet and network validation
if (!signer || !(signer instanceof ccc.SignerBtc)) {
throw new Error("Wallet not supported");
}
if (client.addressPrefix !== "ckt") {
throw new Error("Only Testnet is supported for now");
}

// Initialize RGB++ network configuration
const networkConfig = ccc.rgbpp.buildNetworkConfig(
ccc.rgbpp.PredefinedNetwork.BitcoinTestnet3,
{ cellDeps: { /* ... */ } }
);
```

`buildNetworkConfig` sets up the essential RGB++ network configuration with proper cell dependencies for isomorphic binding, among other configurations.

### Step 2: RGB++ Wallet and Client Setup

```typescript
const btcRgbppSigner = await ccc.rgbpp.createBrowserRgbppBtcWallet(
signer,
networkConfig,
{
url: "https://api-testnet.rgbpp.com",
isMainnet: signer.client.addressPrefix === "ckt",
Comment thread
fghdotio marked this conversation as resolved.
Outdated
},
);

const rgbppUdtClient = new ccc.rgbpp.RgbppUdtClient(networkConfig, signer.client);
const ckbRgbppUnlockSinger = new ccc.rgbpp.CkbRgbppUnlockSinger(...);
```

`https://api-testnet.rgbpp.com` here is the testnet btc-assets-api URL. It's a service that retrieves BTC/RGB++ information/assets and processes transactions with these assets. It serves as the critical infrastructure component that connects Bitcoin and CKB networks for RGB++ operations.

**Key Components**:
- `createBrowserRgbppBtcWallet`: Creates RGB++ Bitcoin wallet for cross-chain operations
- `RgbppUdtClient`: High-level APIs for xUDT operations
- `CkbRgbppUnlockSinger`: Handles RGB++ lock script unlock logic

### Step 3: UTXO Seal and Issuance Cell

```typescript
const utxoSeal = await btcRgbppSigner.prepareUtxoSeal();

const rgbppIssuanceCells = await rgbppUdtClient.createRgbppUdtIssuanceCells(
signer,
utxoSeal,
);
```

The `prepareUtxoSeal` method creates the foundation for **isomorphic binding** - a one-to-one mapping between Bitcoin UTXOs and CKB Cells. This UTXO becomes cryptographically "sealed" to the CKB Cell containing xUDT data.

`rgbppIssuanceCells` is a CKB cell with its lock script set to the RGB++ lock script, using the UTXO as its argument. This configuration represents the user's intent to issue a RGB++ xUDT token, which will only be fulfilled after the initial UTXO is spent.

### Step 4: Partial CKB Transaction and RGB++ Bitcoin Transaction

```typescript
const ckbPartialTx = await rgbppUdtClient.issuanceCkbPartialTx({
token: {
name: "Just UDT",
symbol: "jUDT",
decimal: 8,
},
amount: 2100_0000n,
rgbppLiveCells: rgbppIssuanceCells,
udtScriptInfo: {/* ... */},
});

const { psbt, indexedCkbPartialTx } = await btcRgbppSigner.buildPsbt({
ckbPartialTx,
ckbClient: signer.client,
rgbppUdtClient,
btcChangeAddress: btcAddress,
receiverBtcAddresses: [btcAddress],
});

const btcTxId = await btcRgbppSigner.signAndBroadcast(psbt);
```

A partial CKB transaction is constructed using the CKB cell and xUDT script information, initially containing a placeholder for the corresponding Bitcoin transaction ID. Based on this, the commitment is calculated and the BTC transaction is assembled, which is then submitted to the network.

### Step 5: Final RGB++ CKB Transaction

```typescript
const ckbPartialTxInjected = await rgbppUdtClient.injectTxIdToRgbppCkbTx(
indexedCkbPartialTx,
btcTxId,
);

const rgbppSignedCkbTx = await ckbRgbppUnlockSinger.signTransaction(ckbPartialTxInjected);
await rgbppSignedCkbTx.completeFeeBy(signer);
const ckbFinalTx = await signer.signTransaction(rgbppSignedCkbTx);
const txHash = await signer.client.sendTransaction(ckbFinalTx);
```

In `ckbRgbppUnlockSinger.signTransaction`, the BTC transaction's confirmation status is periodically checked through the SPV service. Upon confirmation, we acquire the new single-use seal which represents ownership of the issued RGB++ xUDT token. The transaction ID of this UTXO is used to replace the placeholder value in the RGB++ lock script, enabling the assembly of the final CKB transaction.

The final CKB transaction is then submitted to the network, completing the token issuance process.
2 changes: 1 addition & 1 deletion packages/playground/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@
"tailwindcss": "^4.1.12"
},
"packageManager": "pnpm@10.8.1"
}
}
7 changes: 6 additions & 1 deletion packages/playground/src/app/components/Editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,14 @@ export function Editor({
});

monaco.languages.typescript.typescriptDefaults.addExtraLib(
"import { ccc } from '@ckb-ccc/core'; export function render(...msgs: unknown[]): Promise<void>; export const signer: ccc.Signer; export const client: ccc.Client;",
`import { ccc } from '@ckb-ccc/core';
export * from '@ckb-ccc/rgbpp';
export function render(...msgs: unknown[]): Promise<void>;
export const signer: ccc.Signer;
export const client: ccc.Client;`,
"file:///node_modules/@ckb-ccc/playground/index.d.ts",
);

monaco.languages.typescript.typescriptDefaults.addExtraLib(
'{ "type": "commonjs" }',
"file:///node_modules/@ckb-ccc/playground/package.json",
Expand Down
125 changes: 125 additions & 0 deletions packages/playground/src/app/examples.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,128 @@ await render(tx);
await tx.completeFeeBy(signer, 1000);
await render(tx);
`;

export const RGBPP_UDT_ISSUANCE = `import { ccc } from "@ckb-ccc/ccc";
import { render, signer, client } from "@ckb-ccc/playground";

// ensure supported wallet is connected
if (!signer || !(signer instanceof ccc.SignerBtc)) {
throw new Error("Wallet not supported");
}

// only support Testnet for now
if (client.addressPrefix !== "ckt") {
throw new Error("Only Testnet is supported for now");
}

const btcAddress = await signer.getBtcAccount();

// initialize RGB++ env
const networkConfig = ccc.rgbpp.buildNetworkConfig(
ccc.rgbpp.PredefinedNetwork.BitcoinTestnet3,
// TODO: remove the following 2 configs after updating RGB++ cell deps in ccc
{
cellDeps: {
[ccc.rgbpp.PredefinedScriptName.RgbppLock]: ccc.CellDep.from({
outPoint: {
txHash:
"0x0d1567da0979f78b297d5311442669fbd1bd853c8be324c5ab6da41e7a1ed6e5",
index: "0x0",
},
depType: "code",
}),
[ccc.rgbpp.PredefinedScriptName.BtcTimeLock]: ccc.CellDep.from({
outPoint: {
txHash:
"0x8fb747ff0416a43e135c583b028f98c7b81d3770551b196eb7ba1062dd9acc94",
index: "0x0",
},
depType: "code",
}),
},
},
);

const btcRgbppSigner = await ccc.rgbpp.createBrowserRgbppBtcWallet(
signer,
networkConfig,
{
url: "https://api-testnet.rgbpp.com",
isMainnet: signer.client.addressPrefix === "ckt",
Comment thread
fghdotio marked this conversation as resolved.
Outdated
},
);
if (!btcRgbppSigner) {
throw new Error("Failed to create browser RGBPP BTC singer");

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.

medium

There's a typo in the error message. 'singer' should be 'signer'.

Suggested change
throw new Error("Failed to create browser RGBPP BTC singer");
throw new Error("Failed to create browser RGBPP BTC signer");

}

const rgbppUdtClient = new ccc.rgbpp.RgbppUdtClient(networkConfig, signer.client);
const ckbRgbppUnlockSinger = new ccc.rgbpp.CkbRgbppUnlockSinger(
signer.client,
await btcRgbppSigner.getAddress(),
btcRgbppSigner,
btcRgbppSigner,
rgbppUdtClient.getRgbppScriptInfos(),
);

const utxos = await btcRgbppSigner.getUtxos(await btcRgbppSigner.getAddress());
if (!utxos.length) {
throw new Error(
"No Testnet3 BTC available. Go to a Testnet3 faucet (https://bitcoinfaucet.uo1.net/) to get some.",
);
}

const ckbBalance = await signer.getBalance();
if (ckbBalance === BigInt(0)) {
throw new Error(
"No Testnet CKB available. Go to https://faucet.nervos.org/ to get some.",
);
}
const utxoSeal = await btcRgbppSigner.prepareUtxoSeal({ feeRate: 7 });

const rgbppIssuanceCells = await rgbppUdtClient.createRgbppUdtIssuanceCells(
signer,
utxoSeal,
);
const ckbPartialTx = await rgbppUdtClient.issuanceCkbPartialTx({
token: {
name: "Just UDT",
symbol: "jUDT",
decimal: 8,
},
amount: 2100_0000n,
rgbppLiveCells: rgbppIssuanceCells,
udtScriptInfo: {
name: ccc.KnownScript.XUdt,
script: await ccc.Script.fromKnownScript(client, ccc.KnownScript.XUdt, ""),
cellDep: (await client.getKnownScript(ccc.KnownScript.XUdt)).cellDeps[0]
.cellDep,
},
});

const { psbt, indexedCkbPartialTx } = await btcRgbppSigner.buildPsbt({
ckbPartialTx,
ckbClient: signer.client,
rgbppUdtClient,
btcChangeAddress: btcAddress,
receiverBtcAddresses: [btcAddress],
feeRate: 7,
});
await render("Partial RGB++ CKB tx", indexedCkbPartialTx);

const btcTxId = await btcRgbppSigner.signAndBroadcast(psbt);
await render("RGB++ BTC tx id", btcTxId);

const ckbPartialTxInjected = await rgbppUdtClient.injectTxIdToRgbppCkbTx(
indexedCkbPartialTx,
btcTxId,
);
const rgbppSignedCkbTx =
await ckbRgbppUnlockSinger.signTransaction(ckbPartialTxInjected);
await rgbppSignedCkbTx.completeFeeBy(signer);
const ckbFinalTx = await signer.signTransaction(rgbppSignedCkbTx);
await render("Final RGB++ CKB tx", ckbFinalTx);

const txHash = await signer.client.sendTransaction(ckbFinalTx);
await ckbRgbppUnlockSinger.client.waitTransaction(txHash);
await render("RGB++ CKB tx", txHash);
`;
2 changes: 2 additions & 0 deletions packages/playground/src/app/execute/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import * as cccLib from "@ckb-ccc/ccc";
import * as cccAdvancedLib from "@ckb-ccc/ccc/advanced";
import { ccc } from "@ckb-ccc/connector-react";
import * as rgbppLib from "@ckb-ccc/rgbpp";
import * as dobRenderLib from "@nervina-labs/dob-render";
import * as React from "react";
import ts from "typescript";
Expand Down Expand Up @@ -64,6 +65,7 @@ export async function execute(
"@ckb-ccc/ccc": cccLib,
"@ckb-ccc/ccc/advanced": cccAdvancedLib,
"@nervina-labs/dob-render": dobRenderLib,
"@ckb-ccc/rgbpp": rgbppLib,
"@ckb-ccc/playground": {
render: async (...msgs: unknown[]) => {
log("info", formatTimestamp(Date.now()), msgs);
Expand Down
25 changes: 13 additions & 12 deletions packages/rgbpp/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,16 @@
"author": "",
"license": "ISC",
"devDependencies": {
"@ckb-ccc/spore": "workspace:*",
"@ckb-ccc/udt": "workspace:*",
"@ckb-lumos/base": "^0.22.2",
"@ckb-lumos/codec": "^0.22.2",
"@exact-realty/multipart-parser": "^1.0.13",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.17.14",
"@types/node": "^22.10.6",
"copyfiles": "^2.4.1",
"dotenv": "^16.4.7",
"eslint": "^9.18.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-prettier": "^5.2.1",
Expand All @@ -34,24 +40,19 @@
"prettier-plugin-organize-imports": "^4.1.0",
"rimraf": "^6.0.1",
"ts-jest": "^29.2.5",
"typescript": "^5.7.3",
"@ckb-ccc/shell": "workspace:*",
"@ckb-lumos/base": "^0.22.2",
"@ckb-lumos/codec": "^0.22.2",
"@ckb-ccc/spore": "workspace:*",
"dotenv": "^16.4.7",
"@exact-realty/multipart-parser": "^1.0.13"
"tsx": "^4.20.4",
"typescript": "^5.7.3"
},
"dependencies": {
"@ckb-ccc/shell": "workspace:*",
"@bitcoinerlab/secp256k1": "1.1.1",
"@ckb-ccc/core": "workspace:*",
"@ckb-lumos/base": "^0.23.0",
"@ckb-lumos/bi": "^0.23.0",
"@ckb-lumos/codec": "^0.23.0",
"bip32": "4.0.0",
"bitcoinjs-lib": "6.1.6",
"ecpair": "2.1.0",
"js-sha256": "^0.11.0",
"lodash": "^4.17.21",
"@bitcoinerlab/secp256k1": "1.1.1",
"bip32": "4.0.0",
"ecpair": "2.1.0"
"lodash": "^4.17.21"
}
}
Loading
Loading