feat:Create a script for Easepay custom signet network

This commit is contained in:
Elyan 2024-02-16 10:57:25 -08:00
parent 7e4788879a
commit 68e812aac5
3 changed files with 95 additions and 66 deletions

View File

@ -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"]

86
generate_signet.sh Normal file
View File

@ -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 <<EOF
ADDR=$ADDR
PRIVKEY=$PRIVKEY
PUBKEY=$PUBKEY
SCRIPT=$SCRIPT
EOF
# Stop the regtest node
./src/bitcoin-cli -regtest stop
# Create a new directory for the custom signet
datadir=/root/signet-custom
mkdir $datadir
# Write the custom signet configuration
cat > $datadir/bitcoin.conf <<EOF
signet=1
[signet]
daemon=1
signetchallenge=$SCRIPT
EOF
# Start bitcoind with the custom signet configuration
./src/bitcoind -datadir=$datadir -wallet="test"
# Wait for the custom signet to start
echo "Waiting for custom Signet bitcoind to start"
while ! ./src/bitcoin-cli -datadir=$datadir getconnectioncount 2>/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

View File

@ -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 <<EOF
ADDR=$ADDR
PRIVKEY=$PRIVKEY
PUBKEY=$PUBKEY
SCRIPT=$SCRIPT
EOF
./bitcoin-cli -regtest stop 2>&1
datadir=$HOME/signet-custom-$$
mkdir $datadir
cat > $datadir/bitcoin.conf <<EOF
signet=1
[signet]
daemon=1
signetchallenge=$SCRIPT
EOF
./bitcoind -datadir=$datadir -wallet="test"
printf "Waiting for custom Signet bitcoind to start"
while ! ./bitcoin-cli -datadir=$datadir getconnectioncount 2>/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