From a8598e3413ff47d7fbc6d28dcc90b92948b25155 Mon Sep 17 00:00:00 2001 From: Dawn <13477199767@163.com> Date: Sat, 25 May 2024 02:03:22 +0800 Subject: [PATCH 1/2] refactor(examples): Save ckbVirtualTxResult locally --- examples/rgbpp/logs/.gitkeep | 0 examples/rgbpp/shared/utils.ts | 35 +++++++++++++++++++ examples/rgbpp/spore/4-transfer-spore.ts | 4 +++ examples/rgbpp/spore/5-leap-spore-to-ckb.ts | 4 +++ .../rgbpp/spore/launch/2-create-cluster.ts | 4 +++ .../rgbpp/spore/launch/3-create-spores.ts | 4 +++ .../rgbpp/spore/local/4-transfer-spore.ts | 4 +++ .../rgbpp/spore/local/5-leap-spore-to-ckb.ts | 4 +++ examples/rgbpp/xudt/2-btc-transfer.ts | 4 +++ examples/rgbpp/xudt/3-btc-leap-ckb.ts | 4 +++ examples/rgbpp/xudt/launch/2-launch-rgbpp.ts | 4 +++ .../rgbpp/xudt/launch/3-distribute-rgbpp.ts | 4 +++ examples/rgbpp/xudt/local/2-btc-transfer.ts | 4 +++ examples/rgbpp/xudt/local/3-btc-leap-ckb.ts | 4 +++ 14 files changed, 83 insertions(+) create mode 100644 examples/rgbpp/logs/.gitkeep create mode 100644 examples/rgbpp/shared/utils.ts diff --git a/examples/rgbpp/logs/.gitkeep b/examples/rgbpp/logs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/examples/rgbpp/shared/utils.ts b/examples/rgbpp/shared/utils.ts new file mode 100644 index 00000000..57cdabca --- /dev/null +++ b/examples/rgbpp/shared/utils.ts @@ -0,0 +1,35 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +/** + * Save ckbVirtualTxResult to a log file + * @param ckbVirtualTxResult - The ckbVirtualTxResult to save + * @param exampleName - Example name used to distinguish different log files + */ +export const saveCkbVirtualTxResult = (ckbVirtualTxResult: unknown, exampleName: string) => { + try { + // Define log file path + const logDir = path.resolve(__dirname, '../logs'); + const logFilePath = path.join(logDir, `${exampleName}-ckbVirtualTxResult.log`); + + // Ensure the log directory exists + if (!fs.existsSync(logDir)) { + fs.mkdirSync(logDir); + } + + // Validate and save ckbVirtualTxResult to log file + if (typeof ckbVirtualTxResult === 'object' && ckbVirtualTxResult !== null) { + fs.writeFileSync(logFilePath, JSON.stringify(ckbVirtualTxResult, null, 2)); + console.info(`Saved ckbVirtualTxResult to ${logFilePath}`); + } else { + console.error('Invalid ckbVirtualTxResult format'); + } + + // Remind developers to save the transaction result + console.info( + `Important: It's recommended to save the rgbpp_ckb_tx_virtual locally before the isomorphic transactions are finalized.`, + ); + } catch (error) { + console.error('Failed to save ckbVirtualTxResult:', error); + } +}; diff --git a/examples/rgbpp/spore/4-transfer-spore.ts b/examples/rgbpp/spore/4-transfer-spore.ts index 3a7738a0..7646f4fe 100644 --- a/examples/rgbpp/spore/4-transfer-spore.ts +++ b/examples/rgbpp/spore/4-transfer-spore.ts @@ -3,6 +3,7 @@ import { genTransferSporeCkbVirtualTx, sendRgbppUtxos } from 'rgbpp'; import { getSporeTypeScript, Hex } from 'rgbpp/ckb'; import { serializeScript } from '@nervosnetwork/ckb-sdk-utils'; import { isMainnet, collector, btcAddress, btcDataSource, btcKeyPair, btcService } from '../env'; +import { saveCkbVirtualTxResult } from '../shared/utils'; interface SporeTransferParams { sporeRgbppLockArgs: Hex; @@ -23,6 +24,9 @@ const transferSpore = async ({ sporeRgbppLockArgs, toBtcAddress, sporeTypeArgs } isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '4-transfer-spore'); + const { commitment, ckbRawTx } = ckbVirtualTxResult; // Send BTC tx diff --git a/examples/rgbpp/spore/5-leap-spore-to-ckb.ts b/examples/rgbpp/spore/5-leap-spore-to-ckb.ts index c4af4cde..1f0ae59e 100644 --- a/examples/rgbpp/spore/5-leap-spore-to-ckb.ts +++ b/examples/rgbpp/spore/5-leap-spore-to-ckb.ts @@ -3,6 +3,7 @@ import { genLeapSporeFromBtcToCkbVirtualTx, sendRgbppUtxos } from 'rgbpp'; import { getSporeTypeScript, Hex } from 'rgbpp/ckb'; import { serializeScript } from '@nervosnetwork/ckb-sdk-utils'; import { isMainnet, collector, btcAddress, btcDataSource, btcKeyPair, btcService } from '../env'; +import { saveCkbVirtualTxResult } from '../shared/utils'; interface SporeLeapParams { sporeRgbppLockArgs: Hex; @@ -24,6 +25,9 @@ const leapSporeFromBtcToCkb = async ({ sporeRgbppLockArgs, toCkbAddress, sporeTy isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '5-leap-spore-to-ckb'); + const { commitment, ckbRawTx } = ckbVirtualTxResult; // Send BTC tx diff --git a/examples/rgbpp/spore/launch/2-create-cluster.ts b/examples/rgbpp/spore/launch/2-create-cluster.ts index 5fefc541..97e3cdd1 100644 --- a/examples/rgbpp/spore/launch/2-create-cluster.ts +++ b/examples/rgbpp/spore/launch/2-create-cluster.ts @@ -9,6 +9,7 @@ import { sendCkbTx, updateCkbTxWithRealBtcTxId, } from 'rgbpp/ckb'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; const createCluster = async ({ ownerRgbppLockArgs }: { ownerRgbppLockArgs: string }) => { const ckbVirtualTxResult = await genCreateClusterCkbVirtualTx({ @@ -19,6 +20,9 @@ const createCluster = async ({ ownerRgbppLockArgs }: { ownerRgbppLockArgs: strin ckbFeeRate: BigInt(2000), }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '2-create-cluster'); + const { commitment, ckbRawTx, clusterId } = ckbVirtualTxResult; console.log('clusterId: ', clusterId); diff --git a/examples/rgbpp/spore/launch/3-create-spores.ts b/examples/rgbpp/spore/launch/3-create-spores.ts index b073b067..342b8e6a 100644 --- a/examples/rgbpp/spore/launch/3-create-spores.ts +++ b/examples/rgbpp/spore/launch/3-create-spores.ts @@ -20,6 +20,7 @@ import { RawSporeData, } from 'rgbpp/ckb'; import { transactionToHex, utf8ToBuffer } from 'rgbpp/btc'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; interface SporeCreateParams { clusterRgbppLockArgs: Hex; @@ -38,6 +39,9 @@ const createSpores = async ({ clusterRgbppLockArgs, receivers }: SporeCreatePara ckbFeeRate: BigInt(2000), }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '3-create-spores'); + const { commitment, ckbRawTx, sumInputsCapacity, clusterCell } = ckbVirtualTxResult; // Send BTC tx diff --git a/examples/rgbpp/spore/local/4-transfer-spore.ts b/examples/rgbpp/spore/local/4-transfer-spore.ts index 369a0a9f..28e89046 100644 --- a/examples/rgbpp/spore/local/4-transfer-spore.ts +++ b/examples/rgbpp/spore/local/4-transfer-spore.ts @@ -12,6 +12,7 @@ import { sendRgbppUtxos, transactionToHex } from 'rgbpp/btc'; import { BtcAssetsApiError } from 'rgbpp'; import { serializeScript } from '@nervosnetwork/ckb-sdk-utils'; import { isMainnet, collector, btcAddress, btcDataSource, btcKeyPair, btcService } from '../../env'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; interface SporeTransferParams { sporeRgbppLockArgs: Hex; @@ -35,6 +36,9 @@ const transferSpore = async ({ sporeRgbppLockArgs, toBtcAddress, sporeTypeArgs } ckbFeeRate: BigInt(5000), }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '4-transfer-spore'); + const { commitment, ckbRawTx, sporeCell } = ckbVirtualTxResult; // console.log(JSON.stringify(ckbRawTx)) diff --git a/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts b/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts index 5d4cc7a3..c5eb3bf2 100644 --- a/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts +++ b/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts @@ -12,6 +12,7 @@ import { sendRgbppUtxos, transactionToHex } from 'rgbpp/btc'; import { serializeScript } from '@nervosnetwork/ckb-sdk-utils'; import { isMainnet, collector, btcAddress, btcDataSource, btcKeyPair, btcService } from '../../env'; import { BtcAssetsApiError } from 'rgbpp'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; interface SporeLeapParams { sporeRgbppLockArgs: Hex; @@ -35,6 +36,9 @@ const leapSpore = async ({ sporeRgbppLockArgs, toCkbAddress, sporeTypeArgs }: Sp isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '5-leap-spore-to-ckb'); + const { commitment, ckbRawTx, sporeCell } = ckbVirtualTxResult; // console.log(JSON.stringify(ckbRawTx)) diff --git a/examples/rgbpp/xudt/2-btc-transfer.ts b/examples/rgbpp/xudt/2-btc-transfer.ts index 047d8822..0fdd274a 100644 --- a/examples/rgbpp/xudt/2-btc-transfer.ts +++ b/examples/rgbpp/xudt/2-btc-transfer.ts @@ -2,6 +2,7 @@ import { buildRgbppLockArgs, getXudtTypeScript } from 'rgbpp/ckb'; import { serializeScript } from '@nervosnetwork/ckb-sdk-utils'; import { genBtcTransferCkbVirtualTx, sendRgbppUtxos } from 'rgbpp'; import { isMainnet, collector, btcAddress, btcKeyPair, btcService, btcDataSource } from '../env'; +import { saveCkbVirtualTxResult } from '../shared/utils'; interface RgbppTransferParams { rgbppLockArgsList: string[]; @@ -24,6 +25,9 @@ const transfer = async ({ rgbppLockArgsList, toBtcAddress, xudtTypeArgs, transfe isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '2-btc-transfer'); + const { commitment, ckbRawTx } = ckbVirtualTxResult; // Send BTC tx diff --git a/examples/rgbpp/xudt/3-btc-leap-ckb.ts b/examples/rgbpp/xudt/3-btc-leap-ckb.ts index 406058b3..0f54b137 100644 --- a/examples/rgbpp/xudt/3-btc-leap-ckb.ts +++ b/examples/rgbpp/xudt/3-btc-leap-ckb.ts @@ -2,6 +2,7 @@ import { buildRgbppLockArgs, getXudtTypeScript } from 'rgbpp/ckb'; import { serializeScript } from '@nervosnetwork/ckb-sdk-utils'; import { genBtcJumpCkbVirtualTx, sendRgbppUtxos } from 'rgbpp'; import { isMainnet, collector, btcAddress, btcKeyPair, btcService, btcDataSource } from '../env'; +import { saveCkbVirtualTxResult } from '../shared/utils'; interface LeapToCkbParams { rgbppLockArgsList: string[]; @@ -25,6 +26,9 @@ const leapFromBtcToCKB = async ({ rgbppLockArgsList, toCkbAddress, xudtTypeArgs, isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '3-btc-leap-ckb'); + const { commitment, ckbRawTx } = ckbVirtualTxResult; // Send BTC tx diff --git a/examples/rgbpp/xudt/launch/2-launch-rgbpp.ts b/examples/rgbpp/xudt/launch/2-launch-rgbpp.ts index 50d751f5..d7708bcf 100644 --- a/examples/rgbpp/xudt/launch/2-launch-rgbpp.ts +++ b/examples/rgbpp/xudt/launch/2-launch-rgbpp.ts @@ -9,6 +9,7 @@ import { import { RGBPP_TOKEN_INFO } from './0-rgbpp-token-info'; import { btcAddress, btcDataSource, btcKeyPair, btcService, collector, isMainnet } from '../../env'; import { transactionToHex } from 'rgbpp/btc'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; interface Params { ownerRgbppLockArgs: string; @@ -24,6 +25,9 @@ const launchRgppAsset = async ({ ownerRgbppLockArgs, launchAmount, rgbppTokenInf isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '2-launch-rgbpp'); + const { commitment, ckbRawTx } = ckbVirtualTxResult; console.log('RGB++ Asset type script args: ', ckbRawTx.outputs[0].type?.args); diff --git a/examples/rgbpp/xudt/launch/3-distribute-rgbpp.ts b/examples/rgbpp/xudt/launch/3-distribute-rgbpp.ts index 2c801113..e9c25300 100644 --- a/examples/rgbpp/xudt/launch/3-distribute-rgbpp.ts +++ b/examples/rgbpp/xudt/launch/3-distribute-rgbpp.ts @@ -21,6 +21,7 @@ import { updateCkbTxWithRealBtcTxId, } from 'rgbpp/ckb'; import { transactionToHex } from 'rgbpp/btc'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; interface Params { rgbppLockArgsList: string[]; @@ -43,6 +44,9 @@ const distributeRgbppAssetOnBtc = async ({ rgbppLockArgsList, receivers, xudtTyp isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '3-distribute-rgbpp'); + const { commitment, ckbRawTx, sumInputsCapacity, rgbppChangeOutIndex } = ckbVirtualTxResult; // The first output utxo is OP_RETURN diff --git a/examples/rgbpp/xudt/local/2-btc-transfer.ts b/examples/rgbpp/xudt/local/2-btc-transfer.ts index 4de9ab89..f70c7e7b 100644 --- a/examples/rgbpp/xudt/local/2-btc-transfer.ts +++ b/examples/rgbpp/xudt/local/2-btc-transfer.ts @@ -9,6 +9,7 @@ import { } from 'rgbpp/ckb'; import { isMainnet, collector, btcAddress, btcDataSource, btcKeyPair, btcService } from '../../env'; import { transactionToHex } from 'rgbpp/btc'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; interface RgbppTransferParams { rgbppLockArgsList: string[]; @@ -32,6 +33,9 @@ const transfer = async ({ rgbppLockArgsList, toBtcAddress, xudtTypeArgs, transfe isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '2-btc-transfer'); + const { commitment, ckbRawTx } = ckbVirtualTxResult; // Send BTC tx diff --git a/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts b/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts index 877015ed..45ba39d0 100644 --- a/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts +++ b/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts @@ -9,6 +9,7 @@ import { } from 'rgbpp/ckb'; import { isMainnet, collector, btcAddress, btcDataSource, btcKeyPair, btcService } from '../../env'; import { transactionToHex } from 'rgbpp/btc'; +import { saveCkbVirtualTxResult } from '../../shared/utils'; interface LeapToCkbParams { rgbppLockArgsList: string[]; @@ -33,6 +34,9 @@ const leapFromBtcToCkb = async ({ rgbppLockArgsList, toCkbAddress, xudtTypeArgs, isMainnet, }); + // Save ckbVirtualTxResult + saveCkbVirtualTxResult(ckbVirtualTxResult, '3-btc-leap-ckb'); + const { commitment, ckbRawTx } = ckbVirtualTxResult; // Send BTC tx From c1a9729dc6bd687246a813a39822a1a859a0393f Mon Sep 17 00:00:00 2001 From: Dawn <13477199767@163.com> Date: Sun, 26 May 2024 10:13:53 +0800 Subject: [PATCH 2/2] chore: define and use CkbVirtualTxResultType in saveCkbVirtualTxResult --- examples/rgbpp/shared/utils.ts | 18 ++++++++++++++++-- examples/rgbpp/spore/local/4-transfer-spore.ts | 2 +- .../rgbpp/spore/local/5-leap-spore-to-ckb.ts | 2 +- examples/rgbpp/xudt/local/2-btc-transfer.ts | 2 +- examples/rgbpp/xudt/local/3-btc-leap-ckb.ts | 2 +- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/examples/rgbpp/shared/utils.ts b/examples/rgbpp/shared/utils.ts index 57cdabca..2c5d2e6f 100644 --- a/examples/rgbpp/shared/utils.ts +++ b/examples/rgbpp/shared/utils.ts @@ -1,16 +1,30 @@ import * as fs from 'fs'; import * as path from 'path'; +import { + BaseCkbVirtualTxResult, + SporeVirtualTxResult, + SporeCreateVirtualTxResult, + SporeTransferVirtualTxResult, +} from 'rgbpp/ckb'; /** * Save ckbVirtualTxResult to a log file * @param ckbVirtualTxResult - The ckbVirtualTxResult to save * @param exampleName - Example name used to distinguish different log files */ -export const saveCkbVirtualTxResult = (ckbVirtualTxResult: unknown, exampleName: string) => { + +export type CkbVirtualTxResultType = + | BaseCkbVirtualTxResult + | SporeVirtualTxResult + | SporeCreateVirtualTxResult + | SporeTransferVirtualTxResult; + +export const saveCkbVirtualTxResult = (ckbVirtualTxResult: CkbVirtualTxResultType, exampleName: string) => { try { // Define log file path const logDir = path.resolve(__dirname, '../logs'); - const logFilePath = path.join(logDir, `${exampleName}-ckbVirtualTxResult.log`); + const timestamp = new Date().toISOString().replace(/:/g, '-'); // Replace colons with hyphens + const logFilePath = path.join(logDir, `${exampleName}-${timestamp}-ckbVirtualTxResult.log`); // Ensure the log directory exists if (!fs.existsSync(logDir)) { diff --git a/examples/rgbpp/spore/local/4-transfer-spore.ts b/examples/rgbpp/spore/local/4-transfer-spore.ts index 28e89046..a695c818 100644 --- a/examples/rgbpp/spore/local/4-transfer-spore.ts +++ b/examples/rgbpp/spore/local/4-transfer-spore.ts @@ -37,7 +37,7 @@ const transferSpore = async ({ sporeRgbppLockArgs, toBtcAddress, sporeTypeArgs } }); // Save ckbVirtualTxResult - saveCkbVirtualTxResult(ckbVirtualTxResult, '4-transfer-spore'); + saveCkbVirtualTxResult(ckbVirtualTxResult, '4-transfer-spore-local'); const { commitment, ckbRawTx, sporeCell } = ckbVirtualTxResult; diff --git a/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts b/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts index c5eb3bf2..06856e96 100644 --- a/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts +++ b/examples/rgbpp/spore/local/5-leap-spore-to-ckb.ts @@ -37,7 +37,7 @@ const leapSpore = async ({ sporeRgbppLockArgs, toCkbAddress, sporeTypeArgs }: Sp }); // Save ckbVirtualTxResult - saveCkbVirtualTxResult(ckbVirtualTxResult, '5-leap-spore-to-ckb'); + saveCkbVirtualTxResult(ckbVirtualTxResult, '5-leap-spore-to-ckb-local'); const { commitment, ckbRawTx, sporeCell } = ckbVirtualTxResult; diff --git a/examples/rgbpp/xudt/local/2-btc-transfer.ts b/examples/rgbpp/xudt/local/2-btc-transfer.ts index f70c7e7b..92a4185d 100644 --- a/examples/rgbpp/xudt/local/2-btc-transfer.ts +++ b/examples/rgbpp/xudt/local/2-btc-transfer.ts @@ -34,7 +34,7 @@ const transfer = async ({ rgbppLockArgsList, toBtcAddress, xudtTypeArgs, transfe }); // Save ckbVirtualTxResult - saveCkbVirtualTxResult(ckbVirtualTxResult, '2-btc-transfer'); + saveCkbVirtualTxResult(ckbVirtualTxResult, '2-btc-transfer-local'); const { commitment, ckbRawTx } = ckbVirtualTxResult; diff --git a/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts b/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts index 45ba39d0..d42615a8 100644 --- a/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts +++ b/examples/rgbpp/xudt/local/3-btc-leap-ckb.ts @@ -35,7 +35,7 @@ const leapFromBtcToCkb = async ({ rgbppLockArgsList, toCkbAddress, xudtTypeArgs, }); // Save ckbVirtualTxResult - saveCkbVirtualTxResult(ckbVirtualTxResult, '3-btc-leap-ckb'); + saveCkbVirtualTxResult(ckbVirtualTxResult, '3-btc-leap-ckb-local'); const { commitment, ckbRawTx } = ckbVirtualTxResult;