From 39941521e5868ad4a9fdcb0b8d1c8c7f6e799a76 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 15:46:40 +0800 Subject: [PATCH 01/24] remove mege --- packages/cli/src/commands/mint/mint.command.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/mint/mint.command.ts b/packages/cli/src/commands/mint/mint.command.ts index a94a3c99..04d9b8d2 100644 --- a/packages/cli/src/commands/mint/mint.command.ts +++ b/packages/cli/src/commands/mint/mint.command.ts @@ -84,7 +84,7 @@ export class MintCommand extends BoardcastCommand { const MAX_RETRY_COUNT = 10; for (let index = 0; index < MAX_RETRY_COUNT; index++) { - await this.merge(token, address); + // await this.merge(token, address); const feeRate = await this.getFeeRate(); const feeUtxos = await this.getFeeUTXOs(address); if (feeUtxos.length === 0) { From cd1d2abbd6917abb7fc1266895d50af84855bdd8 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 15:59:56 +0800 Subject: [PATCH 02/24] added shell script --- packages/cli/script.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 packages/cli/script.sh diff --git a/packages/cli/script.sh b/packages/cli/script.sh new file mode 100644 index 00000000..b19839d6 --- /dev/null +++ b/packages/cli/script.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# https://mempool.fractalbitcoin.io/api/v1/fees/recommended +# bash 请求 fee + +while true; do + response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/recommended) + fastestFee=$(echo $response | jq '.fastestFee') + echo $fastestFee + + # 如果没有获取到 fastestFee,默认给 100 + if [ -z "$fastestFee" ] || [ "$fastestFee" == "null" ]; then + fastestFee=1000 + fi + + echo $fastestFee + command="yarn cli mint -i 45ee725c2c5993b3e4d308842d87e973bf1951f5f7a804b21e4dd964ecd12d6b_0 5 --fee-rate $fastestFee" + $command + + if [ $? -ne 0 ]; then + echo "命令执行失败,退出循环" + exit 1 + fi + + sleep 1 +done \ No newline at end of file From 176ae86e3db2779be4133e272ae2c991dd37f221 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 17:14:12 +0800 Subject: [PATCH 03/24] changed config.example.json --- packages/cli/config.example.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/config.example.json b/packages/cli/config.example.json index 4f8b7d8b..bd0dfcd7 100644 --- a/packages/cli/config.example.json +++ b/packages/cli/config.example.json @@ -1,10 +1,10 @@ { "network": "fractal-mainnet", - "tracker": "http://127.0.0.1:3000", + "tracker": "http://172.19.0.16:3000", "dataDir": ".", - "maxFeeRate": 3, + "maxFeeRate": 30000, "rpc": { - "url": "http://127.0.0.1:8332", + "url": "http://172.19.0.16:8332", "username": "bitcoin", "password": "opcatAwesome" } From 1603b8a9eb9d121c08e2ae2da2aa5442ab9132d2 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 17:23:34 +0800 Subject: [PATCH 04/24] fixed code --- packages/cli/src/providers/configService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/providers/configService.ts b/packages/cli/src/providers/configService.ts index ad4f9947..73c24aaf 100644 --- a/packages/cli/src/providers/configService.ts +++ b/packages/cli/src/providers/configService.ts @@ -12,7 +12,7 @@ export class ConfigService { tracker: 'http://127.0.0.1:3000', dataDir: '.', feeRate: -1, - maxFeeRate: -1, + maxFeeRate: 30_000, rpc: null, }; From 004ab28cf385b9790d51bad09f07dda2dbb69c8e Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 17:44:04 +0800 Subject: [PATCH 05/24] fixed bugs for chosen gas --- packages/cli/script.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/cli/script.sh b/packages/cli/script.sh index b19839d6..b0c98ffc 100644 --- a/packages/cli/script.sh +++ b/packages/cli/script.sh @@ -1,11 +1,8 @@ #!/bin/bash -# https://mempool.fractalbitcoin.io/api/v1/fees/recommended -# bash 请求 fee - while true; do - response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/recommended) - fastestFee=$(echo $response | jq '.fastestFee') + response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/mempool-blocks) + fastestFee=$(echo $response | jq '.[0].medianFee') # 修改获取 fastestFee 的方法 echo $fastestFee # 如果没有获取到 fastestFee,默认给 100 From 771d135399b6fab038c633af8241fcab88af732e Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 17:52:18 +0800 Subject: [PATCH 06/24] changed fee rate --- packages/cli/script.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/script.sh b/packages/cli/script.sh index b0c98ffc..64d1f8b8 100644 --- a/packages/cli/script.sh +++ b/packages/cli/script.sh @@ -1,13 +1,13 @@ #!/bin/bash while true; do - response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/mempool-blocks) - fastestFee=$(echo $response | jq '.[0].medianFee') # 修改获取 fastestFee 的方法 + response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/mempool-blocks) + fastestFee=$(echo $response | jq '.[0].feeRange | .[-3]') # 修改获取 fastestFee 的方法 echo $fastestFee # 如果没有获取到 fastestFee,默认给 100 if [ -z "$fastestFee" ] || [ "$fastestFee" == "null" ]; then - fastestFee=1000 + fastestFee=1200 fi echo $fastestFee From 6c4c5bca9126459f660fe2e49d3b257bcb746185 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 17:52:26 +0800 Subject: [PATCH 07/24] clean code --- packages/cli/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/script.sh b/packages/cli/script.sh index 64d1f8b8..982b3ede 100644 --- a/packages/cli/script.sh +++ b/packages/cli/script.sh @@ -2,7 +2,7 @@ while true; do response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/mempool-blocks) - fastestFee=$(echo $response | jq '.[0].feeRange | .[-3]') # 修改获取 fastestFee 的方法 + fastestFee=$(echo $response | jq '.[0].feeRange | .[-3]') # 倒数第三档 echo $fastestFee # 如果没有获取到 fastestFee,默认给 100 From 7075c6ea9b3c3c86c7eb9ef37cd45b24439b43ca Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Wed, 11 Sep 2024 21:40:21 +0800 Subject: [PATCH 08/24] change fee range step --- packages/cli/script.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/script.sh b/packages/cli/script.sh index 982b3ede..2ecd850c 100644 --- a/packages/cli/script.sh +++ b/packages/cli/script.sh @@ -2,12 +2,12 @@ while true; do response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/mempool-blocks) - fastestFee=$(echo $response | jq '.[0].feeRange | .[-3]') # 倒数第三档 + fastestFee=$(echo $response | jq '.[0].feeRange | .[-4]') # 倒数第四档 echo $fastestFee - # 如果没有获取到 fastestFee,默认给 100 + # 如果没有获取到 fastestFee,默认给 1000 if [ -z "$fastestFee" ] || [ "$fastestFee" == "null" ]; then - fastestFee=1200 + fastestFee=1000 fi echo $fastestFee From 9deafc6423d3e130f4855f172f52d4541580df4e Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Thu, 12 Sep 2024 01:59:19 +0800 Subject: [PATCH 09/24] changed base gas --- packages/cli/script.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/script.sh b/packages/cli/script.sh index 2ecd850c..354ec80c 100644 --- a/packages/cli/script.sh +++ b/packages/cli/script.sh @@ -2,12 +2,12 @@ while true; do response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/mempool-blocks) - fastestFee=$(echo $response | jq '.[0].feeRange | .[-4]') # 倒数第四档 + fastestFee=$(echo $response | jq '.[0].feeRange | .[-3]') # 倒数第四档 echo $fastestFee # 如果没有获取到 fastestFee,默认给 1000 if [ -z "$fastestFee" ] || [ "$fastestFee" == "null" ]; then - fastestFee=1000 + fastestFee=1700 fi echo $fastestFee From 590840eb074a588d048d4babb42b213af49b5b90 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Fri, 13 Sep 2024 05:17:21 +0800 Subject: [PATCH 10/24] changed create commands --- packages/cli/src/commands/mint/mint.command.ts | 2 +- packages/cli/src/commands/wallet/create.command.ts | 2 +- packages/cli/src/providers/configService.ts | 2 +- packages/tracker/docker-compose.yml | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/commands/mint/mint.command.ts b/packages/cli/src/commands/mint/mint.command.ts index 04d9b8d2..a94a3c99 100644 --- a/packages/cli/src/commands/mint/mint.command.ts +++ b/packages/cli/src/commands/mint/mint.command.ts @@ -84,7 +84,7 @@ export class MintCommand extends BoardcastCommand { const MAX_RETRY_COUNT = 10; for (let index = 0; index < MAX_RETRY_COUNT; index++) { - // await this.merge(token, address); + await this.merge(token, address); const feeRate = await this.getFeeRate(); const feeUtxos = await this.getFeeUTXOs(address); if (feeUtxos.length === 0) { diff --git a/packages/cli/src/commands/wallet/create.command.ts b/packages/cli/src/commands/wallet/create.command.ts index 66272470..22fdd3db 100644 --- a/packages/cli/src/commands/wallet/create.command.ts +++ b/packages/cli/src/commands/wallet/create.command.ts @@ -40,7 +40,7 @@ export class CreateCommand extends BaseCommand { : `cat-${randomBytes(4).toString('hex')}`; const wallet: Wallet = { - accountPath: "m/44'/0'/0'/0/0", + accountPath: "m/86'/0'/0'/0/0", name: name, mnemonic: bip39.generateMnemonic(), }; diff --git a/packages/cli/src/providers/configService.ts b/packages/cli/src/providers/configService.ts index 73c24aaf..ad4f9947 100644 --- a/packages/cli/src/providers/configService.ts +++ b/packages/cli/src/providers/configService.ts @@ -12,7 +12,7 @@ export class ConfigService { tracker: 'http://127.0.0.1:3000', dataDir: '.', feeRate: -1, - maxFeeRate: 30_000, + maxFeeRate: -1, rpc: null, }; diff --git a/packages/tracker/docker-compose.yml b/packages/tracker/docker-compose.yml index 1ae6f94c..ca678122 100644 --- a/packages/tracker/docker-compose.yml +++ b/packages/tracker/docker-compose.yml @@ -1,6 +1,7 @@ services: postgres: image: postgres:16 + shm_size: 1g restart: always environment: POSTGRES_USER: $DATABASE_USERNAME From 7c62528ce491044775939494616fe0a11e0c6e85 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Fri, 13 Sep 2024 05:35:03 +0800 Subject: [PATCH 11/24] updated create.command.ts 1. Enhance the create wallet command with optional settings for mnemonic and path_index --- .../cli/src/commands/wallet/create.command.ts | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/commands/wallet/create.command.ts b/packages/cli/src/commands/wallet/create.command.ts index 22fdd3db..9c1dbb0d 100644 --- a/packages/cli/src/commands/wallet/create.command.ts +++ b/packages/cli/src/commands/wallet/create.command.ts @@ -8,6 +8,8 @@ import * as bip39 from 'bip39'; interface CreateCommandOptions extends BaseCommandOptions { name: string; + path_index: number; + mnemonic: string; } @SubCommand({ @@ -39,10 +41,18 @@ export class CreateCommand extends BaseCommand { ? options.name : `cat-${randomBytes(4).toString('hex')}`; + const path_index = options.path_index + ? options.path_index + : 0; + + const mnemonic = options.mnemonic + ? options.mnemonic + : bip39.generateMnemonic(); + const wallet: Wallet = { - accountPath: "m/86'/0'/0'/0/0", + accountPath: `m/86'/0'/0'/0/${path_index}`, name: name, - mnemonic: bip39.generateMnemonic(), + mnemonic: mnemonic, }; this.walletService.createWallet(wallet); @@ -72,4 +82,27 @@ export class CreateCommand extends BaseCommand { return val; } -} + @Option({ + flags: '-p,--path_index [path_index]', + description: 'path index', + }) + parsePathIndex(val: number): number { + if (!val || val < 0) { + logerror("path index can't be empty!", new Error('invalid path_index option')); + process.exit(0); + } + return val; + } + + @Option({ + flags: '-m,--mnemonic [mnemonic]', + description: 'mnemonic', + }) + parseMnemonic(val: string): string { + if (!val) { + logerror("mnemonic can't be empty!", new Error('invalid mnemonic option')); + process.exit(0); + } + return val; + } +} \ No newline at end of file From e61c2d2dda0b0d1253b498170639a18df990b48e Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Fri, 13 Sep 2024 07:59:49 +0800 Subject: [PATCH 12/24] updated docker-compose add the -reindex command to trigger a reindexing process when the full node encounters conflicts. --- packages/tracker/docker-compose.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/tracker/docker-compose.yml b/packages/tracker/docker-compose.yml index ca678122..159fb31a 100644 --- a/packages/tracker/docker-compose.yml +++ b/packages/tracker/docker-compose.yml @@ -15,7 +15,7 @@ services: bitcoind: image: fractalbitcoin/fractal:v0.2.1 restart: always - entrypoint: ["bitcoind", "-datadir=/data/", "-maxtipage=504576000"] + entrypoint: ["bitcoind", "-datadir=/data/", "-maxtipage=504576000", "-reindex"] command: "" healthcheck: test: ["CMD", "bitcoin-cli", "-datadir=/data/", "getblockchaininfo"] @@ -27,8 +27,12 @@ services: deploy: resources: limits: + memory: 60G + cpus: '4.0' + reservations: memory: 40G - memswap_limit: 60G + cpus: '2.0' + memswap_limit: 80G mem_swappiness: 100 volumes: - ./docker/data:/data From 579a7bb6be808e80d1f5e50326529198d4255c5b Mon Sep 17 00:00:00 2001 From: KAI <35927054+ThreeAndTwo@users.noreply.github.com> Date: Fri, 13 Sep 2024 08:12:42 +0800 Subject: [PATCH 13/24] Delete packages/cli/config.example.json --- packages/cli/config.example.json | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 packages/cli/config.example.json diff --git a/packages/cli/config.example.json b/packages/cli/config.example.json deleted file mode 100644 index bd0dfcd7..00000000 --- a/packages/cli/config.example.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "network": "fractal-mainnet", - "tracker": "http://172.19.0.16:3000", - "dataDir": ".", - "maxFeeRate": 30000, - "rpc": { - "url": "http://172.19.0.16:8332", - "username": "bitcoin", - "password": "opcatAwesome" - } -} \ No newline at end of file From 10ee5e66cb143e6ddb6acc0e434d9e4e19076ce0 Mon Sep 17 00:00:00 2001 From: KAI <35927054+ThreeAndTwo@users.noreply.github.com> Date: Fri, 13 Sep 2024 08:13:19 +0800 Subject: [PATCH 14/24] Delete packages/cli/script.sh --- packages/cli/script.sh | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 packages/cli/script.sh diff --git a/packages/cli/script.sh b/packages/cli/script.sh deleted file mode 100644 index 354ec80c..00000000 --- a/packages/cli/script.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -while true; do - response=$(curl -s https://mempool.fractalbitcoin.io/api/v1/fees/mempool-blocks) - fastestFee=$(echo $response | jq '.[0].feeRange | .[-3]') # 倒数第四档 - echo $fastestFee - - # 如果没有获取到 fastestFee,默认给 1000 - if [ -z "$fastestFee" ] || [ "$fastestFee" == "null" ]; then - fastestFee=1700 - fi - - echo $fastestFee - command="yarn cli mint -i 45ee725c2c5993b3e4d308842d87e973bf1951f5f7a804b21e4dd964ecd12d6b_0 5 --fee-rate $fastestFee" - $command - - if [ $? -ne 0 ]; then - echo "命令执行失败,退出循环" - exit 1 - fi - - sleep 1 -done \ No newline at end of file From 1a5e47172bd716f82cef675417ab7729110895eb Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Fri, 13 Sep 2024 08:56:26 +0800 Subject: [PATCH 15/24] changed config.example.json --- init_cat20.sh | 16 ++++++++++++++++ packages/cli/config.example.json | 11 +++++++++++ 2 files changed, 27 insertions(+) create mode 100644 init_cat20.sh create mode 100644 packages/cli/config.example.json diff --git a/init_cat20.sh b/init_cat20.sh new file mode 100644 index 00000000..ef3ccee5 --- /dev/null +++ b/init_cat20.sh @@ -0,0 +1,16 @@ +pkg_name=your_project_name +mnemonic=your_mnemonic +path_index=your_path_index +git clone https://github.com/ThreeAndTwo/cat-token-box $pkg_name +cd $pkg_name +yarn install +yarn build +sudo chmod 777 packages/tracker/docker/data +sudo chmod 777 packages/tracker/docker/pgdata + +cd packages/cli +cat config.json +yarn cli wallet create -m "$mnemonic" -p $path_index +chmod +x script.sh +yarn cli wallet address +yarn cli wallet balances diff --git a/packages/cli/config.example.json b/packages/cli/config.example.json new file mode 100644 index 00000000..9e77dd0e --- /dev/null +++ b/packages/cli/config.example.json @@ -0,0 +1,11 @@ +{ + "network": "fractal-mainnet", + "tracker": "http://172.19.0.16:3000", + "dataDir": ".", + "maxFeeRate": 30000, + "rpc": { + "url": "http://172.19.0.16:8332", + "username": "bitcoin", + "password": "opcatAwesome" + } + } \ No newline at end of file From afb561aac3338debf5b6875db04bf185c4223d4f Mon Sep 17 00:00:00 2001 From: KAI <35927054+ThreeAndTwo@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:18:37 +0800 Subject: [PATCH 16/24] Update config.example.json to default params --- packages/cli/config.example.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/cli/config.example.json b/packages/cli/config.example.json index 9e77dd0e..8aa74d4c 100644 --- a/packages/cli/config.example.json +++ b/packages/cli/config.example.json @@ -1,11 +1,11 @@ { - "network": "fractal-mainnet", - "tracker": "http://172.19.0.16:3000", - "dataDir": ".", - "maxFeeRate": 30000, - "rpc": { - "url": "http://172.19.0.16:8332", - "username": "bitcoin", - "password": "opcatAwesome" - } - } \ No newline at end of file + "network": "fractal-mainnet", + "tracker": "http://127.0.0.1:3000", + "dataDir": ".", + "maxFeeRate": 3, + "rpc": { + "url": "http://127.0.0.1:8332", + "username": "bitcoin", + "password": "opcatAwesome" + } +} From bb7113c8d3e64a9d67a05ed113040a2406324766 Mon Sep 17 00:00:00 2001 From: KAI <35927054+ThreeAndTwo@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:23:21 +0800 Subject: [PATCH 17/24] Update config.example.json to default params From 3ec864be014804f86bad878c1f43cc46df48cf55 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Sat, 14 Sep 2024 16:13:51 +0800 Subject: [PATCH 18/24] updated code 1. added scripts for the automated deployment environment. 2. added environment variables to .env to minimize changes to docker-compose.yaml. 3. modify the naming of some parameters. --- packages/tracker/.env.example | 46 +++++++++++++++--- packages/tracker/docker-compose.yml | 34 ++++++------- packages/tracker/init_script.sh | 51 ++++++++++++++++++++ packages/tracker/src/app.module.ts | 8 +-- packages/tracker/src/common/constants.ts | 2 +- packages/tracker/src/config/configuration.ts | 10 ++-- packages/tracker/src/main.ts | 10 ++-- 7 files changed, 124 insertions(+), 37 deletions(-) create mode 100644 packages/tracker/init_script.sh diff --git a/packages/tracker/.env.example b/packages/tracker/.env.example index d5374187..949fd15f 100644 --- a/packages/tracker/.env.example +++ b/packages/tracker/.env.example @@ -1,3 +1,14 @@ +# FB Full Node image +FB_FULL_NODE_IMAGE=fractalbitcoin/fractal:v0.2.1 +POSTGRES_IMAGE=postgres:16 + +# TODO: DEVS need to update this to their own paths +USER_HOME=/home/ubuntu +DATABASE_VOLUME_PATH=$USER_HOME/data/pgdata +BITCOIND_DATA_DIR=$USER_HOME/data/bitcoin/data +DATABASE_DATA_DIR=/var/lib/postgresql/data/pgdata + +# POSTGRES DATABASE_TYPE=postgres DATABASE_HOST=127.0.0.1 DATABASE_PORT=5432 @@ -5,11 +16,32 @@ DATABASE_DB=postgres DATABASE_USERNAME=postgres DATABASE_PASSWORD=postgres -RPC_HOST=127.0.0.1 -RPC_PORT=8332 -RPC_USER=bitcoin -RPC_PASSWORD=opcatAwesome -NETWORK=mainnet -API_PORT=3000 -GENESIS_BLOCK_HEIGHT=0 # the height of block that CAT protocol launches +# TODO: DEVS needs to update this accord their machine resources +DATABASE_SHM_SIZE=1g + + +# TODO: DEVS +# BITCOIND default config in CAT protocol +BITCOIND_RPC_HOST=127.0.0.1 +BITCOIND_RPC_PORT=8332 +BITCOIND_RPC_USER=bitcoin +BITCOIND_RPC_PASSWORD=opcatAwesome + +BITCOIND_ZMQ_PUB_HASH_BLOCK_PORT=8330 +BITCOIND_ZMQ_PUB_RAW_TX_PORT=8331 +BITCOIND_P2P_PORT=8333 + +# TODO: DEVS needs to update this accord their machine resources +BITCOIND_RESOURCES_LIMITS_MEMORY=60G +BITCOIND_RESOURCES_LIMITS_CPU=4.0 +BITCOIND_RESOURCES_RESERVATIONS_MEMORY=40G +BITCOIND_RESOURCES_RESERVATIONS_CPU=2.0 + +BITCOIND_MEMSWAP_LIMIT=80G +BITCOIND_MEM_SWAPPINESS=100 + +# TODO: DEVS needs to update this accord their machine resources +CAT_PROTOCOL_NETWORK=mainnet +CAT_PROTOCOL_API_PORT=3000 +CAT_PROTOCOL_GENESIS_BLOCK_HEIGHT=0 diff --git a/packages/tracker/docker-compose.yml b/packages/tracker/docker-compose.yml index 159fb31a..82fbaf80 100644 --- a/packages/tracker/docker-compose.yml +++ b/packages/tracker/docker-compose.yml @@ -1,41 +1,41 @@ services: postgres: - image: postgres:16 - shm_size: 1g + image: $POSTGRES_IMAGE + shm_size: $DATABASE_SHM_SIZE restart: always environment: POSTGRES_USER: $DATABASE_USERNAME POSTGRES_PASSWORD: $DATABASE_PASSWORD POSTGRES_DB: $DATABASE_DB - PGDATA: /var/lib/postgresql/data/pgdata + PGDATA: $DATABASE_DATA_DIR ports: - - "5432:5432" + - "${DATABASE_PORT}:${DATABASE_PORT}" volumes: - - ./docker/pgdata:/var/lib/postgresql/data + - $DATABASE_VOLUME_PATH:$DATABASE_DATA_DIR bitcoind: - image: fractalbitcoin/fractal:v0.2.1 + image: $FB_FULL_NODE_IMAGE restart: always entrypoint: ["bitcoind", "-datadir=/data/", "-maxtipage=504576000", "-reindex"] command: "" healthcheck: test: ["CMD", "bitcoin-cli", "-datadir=/data/", "getblockchaininfo"] ports: - - "8330:8330" - - "8331:8331" - - "8332:8332" - - "8333:8333" + - "${BITCOIND_ZMQ_PUB_HASH_BLOCK_PORT}:${BITCOIND_ZMQ_PUB_HASH_BLOCK_PORT}" + - "${BITCOIND_ZMQ_PUB_RAW_TX_PORT}:${BITCOIND_ZMQ_PUB_RAW_TX_PORT}" + - "${BITCOIND_RPC_PORT}:${BITCOIND_RPC_PORT}" + - "${BITCOIND_P2P_PORT}:${BITCOIND_P2P_PORT}" deploy: resources: limits: - memory: 60G - cpus: '4.0' + memory: $BITCOIND_RESOURCES_LIMITS_MEMORY + cpus: '${BITCOIND_RESOURCES_LIMITS_CPU}' reservations: - memory: 40G - cpus: '2.0' - memswap_limit: 80G - mem_swappiness: 100 + memory: $BITCOIND_RESOURCES_RESERVATIONS_MEMORY + cpus: '${BITCOIND_RESOURCES_RESERVATIONS_CPU}' + memswap_limit: $BITCOIND_MEMSWAP_LIMIT + mem_swappiness: $BITCOIND_MEM_SWAPPINESS volumes: - - ./docker/data:/data + - $BITCOIND_DATA_DIR:/data logging: driver: "json-file" options: diff --git a/packages/tracker/init_script.sh b/packages/tracker/init_script.sh new file mode 100644 index 00000000..3836b59c --- /dev/null +++ b/packages/tracker/init_script.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +path=$(pwd) +ENV_FILE="$path/.env" + +if [ ! -f "$ENV_FILE" ]; then + echo ".env file not found: $ENV_FILE" + exit 1 +fi + +USER_HOME=$(grep -E '^USER_HOME=' "$ENV_FILE" | cut -d '=' -f 2) +DATABASE_VOLUME_PATH=$(grep -E '^DATABASE_VOLUME_PATH=' "$ENV_FILE" | cut -d '=' -f 2) +BITCOIND_DATA_DIR=$(grep -E '^BITCOIND_DATA_DIR=' "$ENV_FILE" | cut -d '=' -f 2) + +NESTED_DIRS=("$USER_HOME/data/pgdata" "$USER_HOME/data/bitcoin/data") + +for DIR in "${NESTED_DIRS[@]}"; do + if [ -d "$DIR" ]; then + echo "Checking directory: $DIR" + if [ ! -w "$DIR" ]; then + echo "Changing permissions: $DIR" + sudo chmod -R 777 "$DIR" + else + echo "Permissions are correct: $DIR" + fi + else + echo "Directory does not exist: $DIR" + echo "Creating directory: $DIR" + sudo mkdir -p "$DIR" + sudo chmod -R 777 "$DIR" + fi +done + +echo "Check completed" + +echo "Starting services" +docker compose up -d + +cd ../../ +echo "Building tracker service" +docker build -t tracker:latest . +echo "Starting tracker service" +docker run -d \ + --name tracker \ + --add-host="host.docker.internal:host-gateway" \ + -e DATABASE_HOST="host.docker.internal" \ + -e RPC_HOST="host.docker.internal" \ + -p 3000:3000 \ + tracker:latest + +echo "Tracker service started" \ No newline at end of file diff --git a/packages/tracker/src/app.module.ts b/packages/tracker/src/app.module.ts index 13bef678..15a08c21 100644 --- a/packages/tracker/src/app.module.ts +++ b/packages/tracker/src/app.module.ts @@ -42,10 +42,10 @@ require('dotenv').config(); // @ts-ignore type: process.env.DATABASE_TYPE, host: process.env.DATABASE_HOST, - port: parseInt(process.env.DATABASE_PORT), - username: process.env.DATABASE_USERNAME, - password: process.env.DATABASE_PASSWORD, - database: process.env.DATABASE_DB, + port: parseInt(process.env.DATABASE_PORT || '5432'), + username: process.env.DATABASE_USERNAME || 'postgres', + password: process.env.DATABASE_PASSWORD || 'postgres', + database: process.env.DATABASE_DB || 'postgres', entities: [ BlockEntity, TxEntity, diff --git a/packages/tracker/src/common/constants.ts b/packages/tracker/src/common/constants.ts index cdcf39c4..0bf6f200 100644 --- a/packages/tracker/src/common/constants.ts +++ b/packages/tracker/src/common/constants.ts @@ -49,7 +49,7 @@ export class Constants { static readonly QUERY_PAGING_MAX_LIMIT = 500; } -const _network = process.env.NETWORK || 'mainnet'; +const _network = process.env.CAT_PROTOCOL_NETWORK || 'mainnet'; export let network: Network; switch (_network) { diff --git a/packages/tracker/src/config/configuration.ts b/packages/tracker/src/config/configuration.ts index cb2c9f7f..f831125b 100644 --- a/packages/tracker/src/config/configuration.ts +++ b/packages/tracker/src/config/configuration.ts @@ -2,13 +2,13 @@ require('dotenv').config(); export default () => ({ - rpcHost: process.env.RPC_HOST, - rpcPort: process.env.RPC_PORT, - rpcUser: process.env.RPC_USER, - rpcPassword: process.env.RPC_PASSWORD, + rpcHost: process.env.BITCOIND_RPC_HOST, + rpcPort: process.env.BITCOIND_RPC_PORT, + rpcUser: process.env.BITCOIND_RPC_USER, + rpcPassword: process.env.BITCOIND_RPC_PASSWORD, genesisBlockHeight: Math.max( - parseInt(process.env.GENESIS_BLOCK_HEIGHT || '2'), + parseInt(process.env.CAT_PROTOCOL_GENESIS_BLOCK_HEIGHT || '2'), 2, ), }); diff --git a/packages/tracker/src/main.ts b/packages/tracker/src/main.ts index 9a72a3e0..fa42f00c 100644 --- a/packages/tracker/src/main.ts +++ b/packages/tracker/src/main.ts @@ -14,7 +14,9 @@ async function bootstrap() { .setLicense('MIT License', 'https://opensource.org/licenses/MIT') .setContact('CAT Protocol', 'https://catprotocol.org', '') .addServer(`https://tracker.catprotocol.org/api`) - .addServer(`http://127.0.0.1:${process.env.API_PORT || 3000}/api`) + .addServer( + `http://127.0.0.1:${process.env.CAT_PROTOCOL_API_PORT || 3000}/api`, + ) .build(); const swaggerDocument = SwaggerModule.createDocument(app, swaggerConfig); SwaggerModule.setup('/', app, swaggerDocument, { @@ -30,8 +32,10 @@ async function bootstrap() { app.setGlobalPrefix('api'); app.enableCors(); - await app.listen(process.env.API_PORT || 3000); - console.log(`Application is running on: ${await app.getUrl()}`); + await app.listen(process.env.CAT_PROTOCOL_API_PORT || 3000); + console.log( + `Application is running on: ${await app.getUrl()}, genesis block height: ${process.env.CAT_PROTOCOL_GENESIS_BLOCK_HEIGHT}`, + ); } bootstrap(); From de16afcc4a30a60d7f5a2ee56b2a8d1586a15b54 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Sat, 14 Sep 2024 16:40:46 +0800 Subject: [PATCH 19/24] cp bitcoin.conf to bitcoin dir --- packages/tracker/.env.example | 2 +- packages/tracker/init_script.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 packages/tracker/init_script.sh diff --git a/packages/tracker/.env.example b/packages/tracker/.env.example index 949fd15f..ebd78322 100644 --- a/packages/tracker/.env.example +++ b/packages/tracker/.env.example @@ -5,7 +5,7 @@ POSTGRES_IMAGE=postgres:16 # TODO: DEVS need to update this to their own paths USER_HOME=/home/ubuntu DATABASE_VOLUME_PATH=$USER_HOME/data/pgdata -BITCOIND_DATA_DIR=$USER_HOME/data/bitcoin/data +BITCOIND_DATA_DIR=$USER_HOME/data/bitcoin DATABASE_DATA_DIR=/var/lib/postgresql/data/pgdata # POSTGRES diff --git a/packages/tracker/init_script.sh b/packages/tracker/init_script.sh old mode 100644 new mode 100755 index 3836b59c..6862334e --- a/packages/tracker/init_script.sh +++ b/packages/tracker/init_script.sh @@ -12,8 +12,7 @@ USER_HOME=$(grep -E '^USER_HOME=' "$ENV_FILE" | cut -d '=' -f 2) DATABASE_VOLUME_PATH=$(grep -E '^DATABASE_VOLUME_PATH=' "$ENV_FILE" | cut -d '=' -f 2) BITCOIND_DATA_DIR=$(grep -E '^BITCOIND_DATA_DIR=' "$ENV_FILE" | cut -d '=' -f 2) -NESTED_DIRS=("$USER_HOME/data/pgdata" "$USER_HOME/data/bitcoin/data") - +NESTED_DIRS=("$USER_HOME/data/pgdata" "$USER_HOME/data/bitcoin") for DIR in "${NESTED_DIRS[@]}"; do if [ -d "$DIR" ]; then echo "Checking directory: $DIR" @@ -33,6 +32,7 @@ done echo "Check completed" +sudo cp docker/data/bitcoin.conf "$NESTED_DIRS[1]" echo "Starting services" docker compose up -d From ae603798a3d3d4d74610ae75e79c7c355377d753 Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Sat, 14 Sep 2024 16:46:42 +0800 Subject: [PATCH 20/24] fix bugs for init_script.sh --- packages/tracker/init_script.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/tracker/init_script.sh b/packages/tracker/init_script.sh index 6862334e..142e2ced 100755 --- a/packages/tracker/init_script.sh +++ b/packages/tracker/init_script.sh @@ -34,12 +34,20 @@ echo "Check completed" sudo cp docker/data/bitcoin.conf "$NESTED_DIRS[1]" echo "Starting services" + +docker compose down docker compose up -d cd ../../ echo "Building tracker service" docker build -t tracker:latest . echo "Starting tracker service" + +if docker ps -a | grep -q tracker; then + echo "Tracker service already exists, removing..." + docker rm -f tracker +fi + docker run -d \ --name tracker \ --add-host="host.docker.internal:host-gateway" \ From a4aba765f429a5cbd48329a280065ef9b6dcc54e Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Sat, 14 Sep 2024 18:15:06 +0800 Subject: [PATCH 21/24] updated tracker configs --- packages/tracker/docker-compose.yml | 8 ++++++++ packages/tracker/init_script.sh | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/tracker/docker-compose.yml b/packages/tracker/docker-compose.yml index 82fbaf80..54c6f645 100644 --- a/packages/tracker/docker-compose.yml +++ b/packages/tracker/docker-compose.yml @@ -1,3 +1,7 @@ +networks: + cat20_network: + external: true + services: postgres: image: $POSTGRES_IMAGE @@ -12,6 +16,8 @@ services: - "${DATABASE_PORT}:${DATABASE_PORT}" volumes: - $DATABASE_VOLUME_PATH:$DATABASE_DATA_DIR + networks: + - cat20_network bitcoind: image: $FB_FULL_NODE_IMAGE restart: always @@ -42,3 +48,5 @@ services: labels: "env,filebeat,name" max-size: "1g" max-file: "3" + networks: + - cat20_network \ No newline at end of file diff --git a/packages/tracker/init_script.sh b/packages/tracker/init_script.sh index 142e2ced..95ca1e30 100755 --- a/packages/tracker/init_script.sh +++ b/packages/tracker/init_script.sh @@ -32,10 +32,19 @@ done echo "Check completed" -sudo cp docker/data/bitcoin.conf "$NESTED_DIRS[1]" +sudo cp docker/data/bitcoin.conf "${NESTED_DIRS[1]}" echo "Starting services" docker compose down + +# Check if the network exists +if ! docker network ls | grep -q cat20_network; then + echo "Creating network cat20_network" + docker network create cat20_network +else + echo "Network cat20_network already exists" +fi + docker compose up -d cd ../../ @@ -50,9 +59,10 @@ fi docker run -d \ --name tracker \ + --network cat20_network \ --add-host="host.docker.internal:host-gateway" \ -e DATABASE_HOST="host.docker.internal" \ - -e RPC_HOST="host.docker.internal" \ + -e BITCOIND_RPC_HOST="bitcoind" \ -p 3000:3000 \ tracker:latest From 0ca11b9ab517d7953c6df65976954db30785017d Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Sat, 14 Sep 2024 19:14:53 +0800 Subject: [PATCH 22/24] updated: remove the reindex command in bitcoind --- packages/tracker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tracker/docker-compose.yml b/packages/tracker/docker-compose.yml index 54c6f645..d098e5df 100644 --- a/packages/tracker/docker-compose.yml +++ b/packages/tracker/docker-compose.yml @@ -21,7 +21,7 @@ services: bitcoind: image: $FB_FULL_NODE_IMAGE restart: always - entrypoint: ["bitcoind", "-datadir=/data/", "-maxtipage=504576000", "-reindex"] + entrypoint: ["bitcoind", "-datadir=/data/", "-maxtipage=504576000"] command: "" healthcheck: test: ["CMD", "bitcoin-cli", "-datadir=/data/", "getblockchaininfo"] From 6031a5c58222413386ccdffc31e038835565009b Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Sat, 14 Sep 2024 19:29:53 +0800 Subject: [PATCH 23/24] removed init_cat20.sh --- init_cat20.sh | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 init_cat20.sh diff --git a/init_cat20.sh b/init_cat20.sh deleted file mode 100644 index ef3ccee5..00000000 --- a/init_cat20.sh +++ /dev/null @@ -1,16 +0,0 @@ -pkg_name=your_project_name -mnemonic=your_mnemonic -path_index=your_path_index -git clone https://github.com/ThreeAndTwo/cat-token-box $pkg_name -cd $pkg_name -yarn install -yarn build -sudo chmod 777 packages/tracker/docker/data -sudo chmod 777 packages/tracker/docker/pgdata - -cd packages/cli -cat config.json -yarn cli wallet create -m "$mnemonic" -p $path_index -chmod +x script.sh -yarn cli wallet address -yarn cli wallet balances From e6f5e3e50eee17ba6cabea3a393f0bc0b3c8540b Mon Sep 17 00:00:00 2001 From: ThreeAndTwo Date: Sat, 21 Sep 2024 19:59:38 +0800 Subject: [PATCH 24/24] fix bugs for chosen UTXO Signed-off-by: ThreeAndTwo --- .gitignore | 3 ++- packages/cli/src/commands/mint/mint.command.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index fe3e9609..2800d83c 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ typings/ # build / generate output **/dist -/bitcoin/signet \ No newline at end of file +/bitcoin/signet +*.sh \ No newline at end of file diff --git a/packages/cli/src/commands/mint/mint.command.ts b/packages/cli/src/commands/mint/mint.command.ts index aaceed63..25ece007 100644 --- a/packages/cli/src/commands/mint/mint.command.ts +++ b/packages/cli/src/commands/mint/mint.command.ts @@ -27,6 +27,7 @@ import { import { broadcastMergeTokenTxs, mergeTokens } from '../send/merge'; import { calcTotalAmount, sendToken } from '../send/ft'; import { pickLargeFeeUtxo } from '../send/pick'; +import { MAX_INPUT } from '@cat-protocol/cat-smartcontracts'; interface MintCommandOptions extends BoardcastCommandOptions { id: string; new?: number; @@ -87,12 +88,13 @@ export class MintCommand extends BoardcastCommand { for (let index = 0; index < MAX_RETRY_COUNT; index++) { await this.merge(token, address); const feeRate = await this.getFeeRate(); - const feeUtxos = await this.getFeeUTXOs(address); + let feeUtxos = await this.getFeeUTXOs(address); if (feeUtxos.length === 0) { console.warn('Insufficient satoshis balance!'); return; } + feeUtxos = this.selectUtxos(feeUtxos); const count = await getTokenMinterCount( this.configService, token.tokenId, @@ -286,6 +288,12 @@ export class MintCommand extends BoardcastCommand { return val; } + selectUtxos(feeUtxos: any[]) { + const filteredUtxos = feeUtxos.filter(utxo => utxo.satoshis !== 546); + filteredUtxos.sort((a, b) => b.satoshis - a.satoshis); + return filteredUtxos.slice(0, MAX_INPUT); + } + async getFeeUTXOs(address: btc.Address) { let feeUtxos = await getUtxos( this.configService,