From 68e812aac56928efb8b56c46c56a74e9343e74dc Mon Sep 17 00:00:00 2001 From: Elyan Date: Fri, 16 Feb 2024 10:57:25 -0800 Subject: [PATCH] feat:Create a script for Easepay custom signet network --- Dockerfile | 14 +++++--- generate_signet.sh | 86 ++++++++++++++++++++++++++++++++++++++++++++++ signet.sh | 61 -------------------------------- 3 files changed, 95 insertions(+), 66 deletions(-) create mode 100644 generate_signet.sh delete mode 100644 signet.sh diff --git a/Dockerfile b/Dockerfile index 051eb1a..d0778ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \ pkg-config bsdmainutils python3 libssl-dev \ libevent-dev libboost-system-dev libboost-filesystem-dev \ libboost-chrono-dev libboost-test-dev libboost-thread-dev \ - libdb-dev libdb++-dev + libdb-dev libdb++-dev python3-pip jq # Clone Bitcoin Core RUN apt-get install -y git @@ -18,12 +18,16 @@ RUN ./autogen.sh RUN ./configure RUN make -# Prepare Signet configuration -RUN mkdir /root/.bitcoin -COPY bitcoin.conf /root/.bitcoin/ +# Copy, Prepare Signet configuration and run signet script +COPY generate_signet.sh . +RUN chmod +x generate_signet.sh + +# Copy the generate.py script from the Bitcoin core source +COPY --from=0 /bitcoin/contrib/signet/generate.py /usr/local/bin/ +RUN chmod +x /usr/local/bin/generate.py # Expose necessary ports EXPOSE 38333 38332 # Start Bitcoin Core -CMD ["/bitcoin/src/bitcoind"] +CMD ["./generate_signet.sh"] diff --git a/generate_signet.sh b/generate_signet.sh new file mode 100644 index 0000000..8eebbb4 --- /dev/null +++ b/generate_signet.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +# Start Bitcoind in regtest mode +./src/bitcoind -regtest -daemon -wallet="test" #change wallet name +echo "wating for regtest bitcoind to start..." +while ! ./src/bitcoin-cli -regtest getconnectioncount 2>/dev/null 1>&2; do + echo -n "."; + sleep 1; +done +echo "started" + +# Generate mew address and keys +ADDR=$(./src/bitcoin-cli -regtest getnewaddress '' bech32) +PRIVKEY=$(./src/bitcoin-cli -regtest dumpprivkey $ADDR) +PUBKEY=$(./src/bitcoin-cli -regtest getaddressinfo $ADDR | jq -r .pubkey) + +# Calculate script length and keys +LENX2=$(printf $PUBKEY | wc -c) +LEN=$((LENX2/2)) +LENHEX=$(printf '%x\n' $LEN) +SCRIPT="51${LENHEX}${PUBKEY}51ae" + +# Output the generated values +cat < $datadir/bitcoin.conf </dev/null 1>&2; do + echo -n "."; + sleep 1; +done +echo "Started" + +# Import the private key to the custom signet node +./src/bitcoin-cli -datadir=$datadir importprivkey "$PRIVKEY" + +# Generate a new address for mining +NADDR=$(./src/bitcoin-cli -datadir=$datadir getnewaddress) + +# Examples from +# https://github.com/bitcoin/bitcoin/pull/19937#issuecomment-696419619 + + +# Start mining blocks +# Include generate.py script into docker +# Generate the first block to your Address using a specific block time +./contrib/signet/generate.py --cli="./src/bitcoin-cli -datadir=$datadir" generate 1 --block-time=1 --address="$NADDR" --grind-cmd='./src/bitcoin-util grind' + +# (WIP) +#../contrib/signet/generate.py --cli="./bitcoin-cli -datadir=$datadir" generate 1 --block-time=1 --address="$NADDR" --backdate 0 +#../contrib/signet/generate.py --cli="./bitcoin-cli -datadir=$datadir" generate 1 --block-time=1 --descriptor="wpkh(...)#..." --secondary + + +# Generate and create a block template. this generate a PBST, process it, and submit the block to the signet network +./src/bitcoin-cli -datadir=$datadir getblocktemplate '{"rules": ["signet","segwit"]}' \ + | ./contrib/signet/generate.py --cli="./src/bitcoin-cli -datadir=$datadir" genpsbt --address="$NADDR" \ + | ./src/bitcoin-cli -datadir=$datadir -stdin walletprocesspsbt + +# Solve and submit a PBST +./contrib/signet/generate.py solvepsbt --grind-cmd='./src/bitcoin-util grind' | ./src/bitcoin-cli -datadir=$datadir submitblock + +# Stop the custom Signet node +./bitcoin-cli -datadir=$datadir stop diff --git a/signet.sh b/signet.sh deleted file mode 100644 index 37daa6a..0000000 --- a/signet.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/sh - -cd ~/src/bitcoin/src - -./bitcoind -regtest -daemon=1 -wallet="test" -printf "Waiting for regtest bitcoind to start" -while ! ./bitcoin-cli -regtest getconnectioncount 2>/dev/null 1>&2 -do printf .; sleep 1 -done; echo - -ADDR=$(./bitcoin-cli -regtest getnewaddress '' bech32) -PRIVKEY=$(./bitcoin-cli -regtest dumpprivkey $ADDR) -PUBKEY=$(./bitcoin-cli -regtest getaddressinfo $ADDR | jq -r .pubkey) - -LENX2=$(printf $PUBKEY | wc -c) -LEN=$((LENX2/2)) -LENHEX=$(echo "obase=16; $LEN" | bc) -SCRIPT=$(echo 51${LENHEX}${PUBKEY}51ae) - -cat <&1 - -datadir=$HOME/signet-custom-$$ -mkdir $datadir -cat > $datadir/bitcoin.conf </dev/null 1>&2 -do printf .; sleep 1 -done; echo - -./bitcoin-cli -datadir=$datadir importprivkey "$PRIVKEY" -NADDR=$(./bitcoin-cli -datadir=$datadir getnewaddress) - -# Examples from -# https://github.com/bitcoin/bitcoin/pull/19937#issuecomment-696419619 - -../contrib/signet/generate.py --cli="./bitcoin-cli -datadir=$datadir" generate 1 --block-time=1 --address="$NADDR" --grind-cmd='./bitcoin-util grind' -#../contrib/signet/generate.py --cli="./bitcoin-cli -datadir=$datadir" generate 1 --block-time=1 --address="$NADDR" --backdate 0 -#../contrib/signet/generate.py --cli="./bitcoin-cli -datadir=$datadir" generate 1 --block-time=1 --descriptor="wpkh(...)#..." --secondary - -./bitcoin-cli -datadir=$datadir getblocktemplate '{"rules": ["signet","segwit"]}' \ - | ../contrib/signet/generate.py --cli="./bitcoin-cli -datadir=$datadir" genpsbt --address="$NADDR" \ - | ./bitcoin-cli -datadir=$datadir -stdin walletprocesspsbt - -#../contrib/signet/generate.py solvepsbt --grind-cmd='./bitcoin-util grind' | ./bitcoin-cli -datadir=$datadir submitblock - -./bitcoin-cli -datadir=$datadir stop