Skip to content

Commit

Permalink
Merge pull request #276 from ckb-cell/feat/transfer-all-example
Browse files Browse the repository at this point in the history
feat(example): Add example for batch transfer of RGBPP XUDT assets
  • Loading branch information
Dawn-githup authored Aug 13, 2024
2 parents 29220da + fa64250 commit 27b9fbe
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 3 deletions.
12 changes: 9 additions & 3 deletions examples/rgbpp/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# RGB++ Examples

- xUDT directory: The examples for RGB++ UDT issuance, transfer, and leap
- xUDT directory: The examples for RGB++ UDT issuance, transfer, transferAll and leap
- Spore directory: The examples for RGB++ Spore creation, transfer and leap

> [!TIP]
Expand Down Expand Up @@ -116,13 +116,19 @@ npx tsx xudt/1-ckb-leap-btc.ts
npx tsx xudt/2-btc-transfer.ts
```

#### 3. Leap RGB++ xUDT from BTC to CKB with Queue Service
#### 3. Transfer all RGB++ xUDT on BTC using a queue service

```shell
npx tsx xudt/btc-transfer-all/1-btc-transfer-all.ts
```

#### 4. Leap RGB++ xUDT from BTC to CKB with Queue Service

```shell
npx tsx xudt/3-btc-leap-ckb.ts
```

#### 4. Unlock xUDT BTC time cells on CKB
#### 5. Unlock xUDT BTC time cells on CKB

A cron job in RGB++ Queue service will construct a transaction unlocking the mature BTC time cells to the their `target_ckb_address`.

Expand Down
69 changes: 69 additions & 0 deletions examples/rgbpp/xudt/btc-transfer-all/1-btc-transfer-all.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import { bitcoin } from 'rgbpp/btc';
import { buildRgbppTransferAllTxs, sendRgbppTxGroups } from 'rgbpp';
import { btcDataSource, isMainnet, collector, btcAccount } from '../../env';
import { signPsbt } from '../../shared/btc-account';
import { saveCkbVirtualTxResult } from '../../shared/utils';

interface TestParams {
xudtTypeArgs: string;
fromAddress: string;
toAddress: string;
}

const rgbppTransferAllTxs = async ({ xudtTypeArgs, fromAddress, toAddress }: TestParams) => {
const result = await buildRgbppTransferAllTxs({
ckb: {
xudtTypeArgs,
collector,
},
btc: {
assetAddresses: [fromAddress],
fromAddress: fromAddress,
toAddress: toAddress,
dataSource: btcDataSource,
feeRate: 5,
},
isMainnet,
});

console.log('result.transactions.length', result.transactions.length);
console.log('result.summary.included.assets', result.summary.included.xudtAssets);
console.log('result.summary.excluded.assets', result.summary.excluded.xudtAssets);

const signedGroups = await Promise.all(
result.transactions.map(async (group) => {
const psbt = bitcoin.Psbt.fromHex(group.btc.psbtHex);

// Sign transactions
await signPsbt(psbt, btcAccount);

psbt.finalizeAllInputs();

return {
ckbVirtualTxResult: JSON.stringify(group.ckb.virtualTxResult),
btcTxHex: psbt.extractTransaction().toHex(),
};
}),
);

const signedGroupsData = JSON.parse(JSON.stringify(signedGroups, null, 2));

// Save signedGroupsData
saveCkbVirtualTxResult(signedGroupsData, '1-btc-transfer-all');

console.log('signedGroups', signedGroupsData);

// Send transactions
const sentGroups = await sendRgbppTxGroups({
txGroups: signedGroups,
btcService: btcDataSource.service,
});
console.log('sentGroups', JSON.stringify(sentGroups, null, 2));
};

rgbppTransferAllTxs({
// Please use your own RGB++ xudt asset's xudtTypeArgs
xudtTypeArgs: '0xdec25e81ad1d5b909926265b0cdf404e270250b9885d436852b942d56d06be38',
fromAddress: btcAccount.from,
toAddress: 'tb1qdnvvnyhc5wegxgh0udwaej04n8w08ahrr0w4q9',
}).catch(console.error);

1 comment on commit 27b9fbe

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New snapshot version of the rgbpp-sdk packages have been released:

Name Version
@rgbpp-sdk/btc 0.0.0-snap-20240813134155
@rgbpp-sdk/ckb 0.0.0-snap-20240813134155
rgbpp 0.0.0-snap-20240813134155
@rgbpp-sdk/service 0.0.0-snap-20240813134155

Please sign in to comment.