haha how does it work?
Discussion
# ==============================================
# Configuration
PRIVKEY="PUT A HEX PRIVKEY HERE"
RELAY="wss://nostr-pub.wellorder.net"
RELAYBIS="wss://relay.nostr.band"
RELAYFALLBACK="wss://relay.damus.io"
POW=10
# Set the bet date and target
bet_date="2023-03-17 19:30:00"
target_btc_price=1000000
# Function to get the current Bitcoin price
get_btc_price() {
price=$(curl -s https://api.coindesk.com/v1/bpi/currentprice/BTC.json | jq '.bpi.USD.rate_float')
echo "${price}"
}
# Function to calculate the remaining time
get_remaining_time() {
now=$(date +%s)
end=$(date -d "$bet_date" +%s)
remaining_time=$(( end + 90 * 24 * 60 * 60 - now ))
echo "${remaining_time}"
}
# Function to format the price difference
format_price_difference() {
printf "%'d" "$(echo "$1" | awk '{print int($1+0.5)}')"
}
# Function to calculate the multiplier
calculate_multiplier() {
btc_price="$1"
difference="$2"
multiplier=$(echo "scale=2; $difference / $btc_price" | bc)
echo "${multiplier}"
}
# Function to build the remaining time message
build_remaining_time_message() {
days="$1"
hours="$2"
minutes="$3"
message=""
if (( days > 0 )); then
message="${days} days"
fi
if (( hours > 0 )); then
message="${message}${message:+, }${hours} hours"
fi
if (( minutes > 0 )); then
message="${message}${message:+, }${minutes} minutes"
fi
echo "$message"
}
# Main loop
while true; do
remaining_time=$(get_remaining_time)
# Check if the bet has ended
if (( remaining_time <= 0 )); then
btc_price=$(get_btc_price)
if (( $(echo "$btc_price >= $target_btc_price" | bc -l) )); then
MSG="The bet has ended. Balajis has won the bet!"
nostril --envelope --pow "$POW" --sec "$PRIVKEY" --content "$MSG" | tee >(websocat $RELAY) >(websocat $RELAYBIS) >(websocat $RELAYFALLBACK)
else
MSG="The bet has ended. Balajis has lost bet."
nostril --envelope --pow "$POW" --sec "$PRIVKEY" --content "$MSG" | tee >(websocat $RELAY) >(websocat $RELAYBIS) >(websocat $RELAYFALLBACK)
fi
exit 0
fi
# Calculate remaining time
days=$(( remaining_time / (24 * 60 * 60) ))
hours=$(( (remaining_time % (24 * 60 * 60)) / (60 * 60) ))
minutes=$(( (remaining_time % (60 * 60)) / 60 ))
# Get the current Bitcoin price
btc_price=$(get_btc_price)
difference=$(echo "$target_btc_price - $btc_price" | bc)
formatted_difference=$(format_price_difference "$difference")
multiplier=$(calculate_multiplier "$btc_price" "$difference")
# Determine when the next check will be
if (( days > 0 )); then
next_check="in 1 day"
sleep_duration="1d"
elif (( hours > 0 )); then
next_check="in 1 hour"
sleep_duration="1h"
else
next_check="in 1 minute"
sleep_duration="1m"
fi
remaining_time_message=$(build_remaining_time_message "$days" "$hours" "$minutes")
# Display the message
MSG="The bet will end in $remaining_time_message. Bitcoin has to go up $formatted_difference USD ($multiplier X) for the bet to be won by Balajis. "
ecHo "Next check: $next_check"
nostril --envelope --pow "$POW" --sec "$PRIVKEY" --content "$MSG" | tee >(websocat $RELAY) >(websocat $RELAYBIS) >(websocat $RELAYFALLBACK)
# Sleep until the next check
sleep "$sleep_duration"
done
It grabs BTC price, calculates time left, and posts updates to Nostr relays using the nostril CLI. This script also calculates the price difference needed for Balajis to win the bet, computes the multiplier, formats the remaining time message, and sets intervals for the next price check, all while continuously looping until the bet's end date.
Nice :) 🤙🤙