Electrum

如何模擬重組以進行測試?

  • June 12, 2022

我正在嘗試使用 Electrs 0.9.1 測試比特幣開發套件 Electrum 客戶端,以應對 1 塊重組的情況。我 invalidateblock在我的單一 regtest bitcoind 22.0 上使用,但我沒有看到我的測試交易未經確認。有沒有更好的方法來模擬 1 塊重組?

史蒂夫邁爾斯從這個問題略微編輯。

正如Murch 在 Twitter 上建議的那樣,我能夠electrs通過使用第二個挖礦節點成功地將交易從已確認更改為未確認。我的測試設置如下所示:

電子 -> 電子 -> bitcoind(1) -> bitcoind(2) (生成/使塊無效)

訣竅是我必須使我的挖礦節點 (2) 上的兩個區塊無效,這也從挖礦節點的記憶體池中刪除了我的測試交易。然後我必須再生成 3 個來創建一個不包含我的測試交易的新的最長鏈。畢竟,我的電子節點將交易從已確認更改為未確認。

我不知道為什麼當我在它所連接的一個節點上使塊無效時,電子不將交易標記為未確認。我用 electrumx 進行了同樣的測試,它的行為與電子一樣。對於其他試圖重現此測試的人,所有血腥細節如下:

安裝電工

sudo apt-get update
sudo apt-get install librocksdb-dev wget
sudo apt-get install -qqy cargo clang cmake build-essential

來自正在測試的電子 git repo:

ROCKSDB_INCLUDE_DIR=/usr/include
ROCKSDB_LIB_DIR=/usr/lib
cargo install --locked --path .
electrs --version

安裝比特幣

BITCOIND_VERSION=22.0

wget -q https://bitcoincore.org/bin/bitcoin-core-$BITCOIND_VERSION/bitcoin-$BITCOIND_VERSION-x86_64-linux-gnu.tar.gz
tar xvf bitcoin-$BITCOIND_VERSION-x86_64-linux-gnu.tar.gz
mv -v bitcoin-$BITCOIND_VERSION/bin/bitcoind .
mv -v bitcoin-$BITCOIND_VERSION/bin/bitcoin-cli .

安裝電子客戶端

sudo apt-get install -qqy git libsecp256k1-0 python3-cryptography python3-setuptools python3-pip jq curl

git clone --recurse-submodules https://github.com/spesmilo/electrum/

python3 -m pip install -e electrum/

electrum version --offline

刪除舊數據

rm -rf data/
mkdir -p data/{bitcoin1,bitcoin2,electrum,electrs}

啟動 bitcoind 節點 1 和資金錢包

./bitcoind -version
./bitcoind -regtest -regtest -txindex=1 -datadir=data/bitcoin1 -printtoconsole=0 -fallbackfee=0.0001 &
BITCOIND1_PID=$!

開始並資助探勘 bitcoind 節點 2 並添加到節點 1

./bitcoind -regtest -txindex=1 -datadir=data/bitcoin2 -port=28444 -rpcport=28443 -printtoconsole=0 -fallbackfee=0.0001 &
BITCOIND2_PID=$!

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 createwallet "test"
NODE_ADDR=`./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getnewaddress`
echo $NODE_ADDR

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 generatetoaddress 101 $NODE_ADDR 
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getwalletinfo

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 addnode "127.0.0.1:18444" "add"

./bitcoin-cli -regtest -datadir=data/bitcoin1 getpeerinfo
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getpeerinfo

bitcoind節點的狀態

啟動電子和電子

export RUST_LOG=electrs=debug
electrs \
 --db-dir=data/electrs \
 --daemon-dir=data/bitcoin1 \
 --network=regtest \
 2> data/electrs/regtest-debug.log &
ELECTRS_PID=$!

electrum --regtest daemon --server localhost:60401:t -1 -vDEBUG 2> data/electrum/regtest-debug.log &
ELECTRUM_PID=$!

基金電子錢包

electrum --regtest --wallet=data/electrum/wallet getinfo
electrum --regtest --wallet=data/electrum/wallet create --seed_type=segwit
electrum --regtest --wallet=data/electrum/wallet load_wallet
electrum --regtest --wallet=data/electrum/wallet getbalance
WALLET_ADDR1=`electrum --regtest --wallet=data/electrum/wallet getunusedaddress`
echo $WALLET_ADDR1

TX1=`./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 sendtoaddress $WALLET_ADDR1 1.11 "test1"`

./bitcoin-cli -regtest -datadir=data/bitcoin1 getrawtransaction $TX1 true

electrum --regtest --wallet=data/electrum/wallet getaddresshistory $WALLET_ADDR1
electrum --regtest --wallet=data/electrum/wallet getbalance

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 generatetoaddress 1 $NODE_ADDR

./bitcoin-cli -regtest -datadir=data/bitcoin1 getrawtransaction $TX1 true
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getrawtransaction $TX1 true

electrum --regtest --wallet=data/electrum/wallet getaddresshistory $WALLET_ADDR1
electrum --regtest --wallet=data/electrum/wallet getbalance

bitcoind節點的狀態

電子錢包狀態

確認:1.11

使節點 2 上的第一個塊無效

TIP=`./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443  getbestblockhash`
echo $TIP

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 invalidateblock $TIP

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getrawtransaction $TX1 true
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getmempoolinfo 

./bitcoin-cli -regtest -datadir=data/bitcoin1 getrawtransaction $TX1 true
./bitcoin-cli -regtest -datadir=data/bitcoin1 getmempoolinfo 

electrum --regtest --wallet=data/electrum/wallet getbalance

bitcoind節點的狀態

電子錢包狀態

確認:1.11

使節點 2 上的第二個塊無效

TIP=`./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getbestblockhash`
echo $TIP

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 invalidateblock $TIP

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getblockchaininfo
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getrawtransaction $TX1 true
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getmempoolinfo 

./bitcoin-cli -regtest -datadir=data/bitcoin1 getblockchaininfo
./bitcoin-cli -regtest -datadir=data/bitcoin1 getrawtransaction $TX1 true
./bitcoin-cli -regtest -datadir=data/bitcoin1 getmempoolinfo

electrum --regtest --wallet=data/electrum/wallet getbalance
electrum --regtest --wallet=data/electrum/wallet listunspent

bitcoind節點的狀態

電子錢包狀態

確認:1.11

在節點 2 上生成 3 個新塊


./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 generatetoaddress 3 $NODE_ADDR

./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getblockchaininfo
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getrawtransaction $TX1 true
./bitcoin-cli -regtest -datadir=data/bitcoin2 -rpcport=28443 getmempoolinfo

./bitcoin-cli -regtest -datadir=data/bitcoin1 getblockchaininfo
./bitcoin-cli -regtest -datadir=data/bitcoin1 getrawtransaction $TX1 true
./bitcoin-cli -regtest -datadir=data/bitcoin1 getmempoolinfo

electrum --regtest --wallet=data/electrum/wallet getbalance

bitcoind節點的狀態

電子錢包狀態

已確認:0

未確認:1.11

停止守護程序


electrum --regtest --wallet=data/electrum/wallet stop
wait $ELECTRUM_PID

kill -INT $ELECTRS_PID
wait $ELECTRS_PID

./bitcoin-cli -regtest -datadir=data/bitcoin1 stop
wait $BITCOIND1_PID

./bitcoin-cli -regtest -datadir=data/bitcoin2 --rpcport=28443 stop
wait $BITCOIND2_PID

引用自:https://bitcoin.stackexchange.com/questions/114044