-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathself_trx_fee.sh
100 lines (88 loc) · 2.43 KB
/
self_trx_fee.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/bash
set -e
# args
SENDER="main"
AMOUNT=1
RECEIVER=$SENDER
# Convert ada into lovelaces
num=1000000
AMOUNT=$(echo "${num}*${AMOUNT}" | bc)
AMOUNT=${AMOUNT%.*}
#
BASE="${CNODE_HOME}/dchat/"
SENDER_FOLDER="${BASE}${SENDER}_user/"
RECEIVER_FOLDER="${BASE}${RECEIVER}_user/"
SENDER_ADDR="${SENDER_FOLDER}${SENDER}_base.addr"
RECEIVER_ADDR="${RECEIVER_FOLDER}${RECEIVER}_base.addr"
TMP_FOLDER="${SENDER_FOLDER}/TMP/"
# create temporary directory if missing
mkdir -p "${TMP_FOLDER}" # Create if missing
# start with a clean slate
rm -f "${TMP_FOLDER}"/*
# move to tmp folder
cd ${TMP_FOLDER}
# protocol
cardano-cli query protocol-parameters \
--allegra-era \
--mainnet \
--out-file protocol.json
# get utxo
cardano-cli query utxo \
--allegra-era \
--cardano-mode \
--mainnet \
--address $(cat ${SENDER_ADDR}) \
--out-file utxo.json
# # transaction variables
TXNS=$(jq length utxo.json)
alltxin=""
TXIN=$(jq -r --arg alltxin "" 'keys[] | . + $alltxin + " --tx-in"' utxo.json)
HEXTXIN=${TXIN::-8}
BALANCE=$(jq .[].amount utxo.json | awk '{sum=sum+$0} END{print sum}' )
# Next tip before no transaction
cardano-cli query tip --mainnet --out-file tip.json
TIP=$(jq .slotNo tip.json)
DELTA=200000
FINALTIP=$(( $DELTA + $TIP ))
# echo "Building Draft Transaction"
cardano-cli transaction build-raw \
--tx-in $HEXTXIN \
--tx-out $(cat ${RECEIVER_ADDR})+${AMOUNT} \
--tx-out $(cat ${SENDER_ADDR})+0 \
--invalid-hereafter $FINALTIP \
--fee 0 \
--metadata-json-file ${BASE}"metadata.json" \
--allegra-era \
--out-file tx.draft \
# echo "Calculating Transaction Fee"
FEE=$(cardano-cli transaction calculate-min-fee \
--tx-body-file tx.draft \
--tx-in-count ${TXNS} \
--tx-out-count 2 \
--witness-count 3 \
--mainnet \
--protocol-params-file protocol.json \
| tr -dc '0-9')
# echo $SENDER "has" $BALANCE "ADA"
# echo "The fee is" ${FEE} "to move" ${AMOUNT} "Lovelace"
echo ${FEE}
CHANGE=$(( ${BALANCE} - ${AMOUNT} ))
CHANGE=$(( ${CHANGE} - ${FEE} ))
# echo "The change is" ${CHANGE}
# echo "Building Raw Transaction"
cardano-cli transaction build-raw \
--tx-in $HEXTXIN \
--tx-out $(cat ${RECEIVER_ADDR})+${AMOUNT} \
--tx-out $(cat ${SENDER_ADDR})+${CHANGE} \
--invalid-hereafter $FINALTIP \
--fee $FEE \
--metadata-json-file ${BASE}"metadata.json" \
--allegra-era \
--out-file tx.raw \
# echo "Signing Transaction"
cardano-cli transaction sign \
--tx-body-file tx.raw \
--signing-key-file ${BASE}${SENDER}"_user/"${SENDER}"_payment.skey" \
--mainnet \
--out-file tx.signed
# NO ERRORS HERE