Electrum
如何模擬重組以進行測試?
我正在嘗試使用 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