1
+ #! /usr/bin/env bash
2
+
3
+ # Script for operating a SPO
4
+
5
+ ARTIFACTS_DIR=pool
6
+ NETWORK_MAGIC=2
7
+ cd $ARTIFACTS_DIR
8
+
9
+ # 1. Create keys and addresses
10
+ # # Create payment keypair
11
+ ./cardano-cli address key-gen \
12
+ --verification-key-file payment.vkey \
13
+ --signing-key-file payment.skey
14
+
15
+ # # Create stake keypair
16
+ ./cardano-cli stake-address key-gen \
17
+ --verification-key-file stake.vkey \
18
+ --signing-key-file stake.skey
19
+
20
+ # # Create payment address
21
+ ./cardano-cli address build \
22
+ --payment-verification-key-file payment.vkey \
23
+ --stake-verification-key-file stake.vkey \
24
+ --out-file payment.addr \
25
+ --testnet-magic $NETWORK_MAGIC
26
+
27
+ # # Create stake address
28
+ ./cardano-cli stake-address build \
29
+ --stake-verification-key-file stake.vkey \
30
+ --out-file stake.addr \
31
+ --testnet-magic $NETWORK_MAGIC
32
+
33
+ # 2. Generate your stake pool keys
34
+ # # Generate Cold Keys and a Cold_counter
35
+ ./cardano-cli node key-gen \
36
+ --cold-verification-key-file cold.vkey \
37
+ --cold-signing-key-file cold.skey \
38
+ --operational-certificate-issue-counter-file opcert.counter
39
+
40
+ # # Generate VRF Key pair
41
+ ./cardano-cli node key-gen-VRF \
42
+ --verification-key-file vrf.vkey \
43
+ --signing-key-file vrf.skey
44
+
45
+ # # Generate the KES Key pair
46
+ ./cardano-cli node key-gen-KES \
47
+ --verification-key-file kes.vkey \
48
+ --signing-key-file kes.skey
49
+
50
+ # # Generate the Operational Certificate
51
+ # ## Compute KES period
52
+ # ## Replace /home/curry/docker/cardano-configurations/network/preview w/ /config
53
+ PROTOCOL_FILE=/home/curry/docker/cardano-configurations/network/preview/genesis/shelley.json
54
+ SLOTS_KES_PERIOD=$( cat $PROTOCOL_FILE | jq .slotsPerKESPeriod)
55
+ SLOT=$( CARDANO_NODE_SOCKET_PATH=../ipc/node.socket ./cardano-cli query tip --testnet-magic $NETWORK_MAGIC | jq .slot)
56
+ KES_PERIOD=` expr $SLOT / $SLOTS_KES_PERIOD `
57
+
58
+ # ## Generate Operational Certificate
59
+ ./cardano-cli node issue-op-cert \
60
+ --kes-verification-key-file kes.vkey \
61
+ --cold-signing-key-file cold.skey \
62
+ --operational-certificate-issue-counter opcert.counter \
63
+ --kes-period $KES_PERIOD \
64
+ --out-file opcert.cert
65
+
66
+ # ## Create a registration certificate
67
+ ./cardano-cli stake-address registration-certificate \
68
+ --stake-verification-key-file stake.vkey \
69
+ --out-file stake.cert
70
+
71
+ # ## Send tokens to / Check utxo payment address
72
+ CARDANO_NODE_SOCKET_PATH=../ipc/node.socket
73
+ echo Send tokens to ' $(cat payment.addr)' at https://docs.cardano.org/cardano-testnet/tools/faucet
74
+ watch CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli query utxo --address $( cat payment.addr) --testnet-magic $NETWORK_MAGIC
75
+
76
+ # ## Register stake address on chain
77
+ AMOUNT_STAKED=1000000000
78
+ # ### Build transaction
79
+ CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli transaction build \
80
+ --babbage-era \
81
+ --tx-in $( CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli query utxo \
82
+ --testnet-magic $NETWORK_MAGIC \
83
+ --address $( cat payment.addr) | tail -n 1 | awk ' {print $1;}' ) # 0 \
84
+ --tx-out $( cat payment.addr) +${AMOUNT_STAKED} \
85
+ --change-address $( cat payment.addr) \
86
+ --testnet-magic $NETWORK_MAGIC \
87
+ --certificate-file stake.cert \
88
+ --invalid-hereafter $(( $SLOT + 100000 )) \
89
+ --out-file stake-registration.txbody \
90
+ --witness-override 2
91
+
92
+ # ### Sign transaction
93
+ CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli transaction sign \
94
+ --signing-key-file payment.skey \
95
+ --signing-key-file stake.skey \
96
+ --testnet-magic $NETWORK_MAGIC \
97
+ --tx-body-file stake-registration.txbody \
98
+ --out-file stake-registration.tx
99
+
100
+ # ### Submit transaction
101
+ CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli transaction submit \
102
+ --tx-file stake-registration.tx \
103
+ --testnet-magic $NETWORK_MAGIC
104
+
105
+ # ## Register stake pool on chain
106
+
107
+ # ### Create pool metadata
108
+ # ### TODO: custom metadata
109
+ cat > ./pool-metadata.json << EOF
110
+ {
111
+ "name": "Mithril Pool 1",
112
+ "description": "Mithril Pool 1",
113
+ "ticker": "MIT01",
114
+ "homepage": "https://mithril.network"
115
+ }
116
+ EOF
117
+ POOL_METADATA_HASH=$( ./cardano-cli stake-pool metadata-hash --pool-metadata-file pool-metadata.json)
118
+
119
+ # ### Generate stake pool registration certificate
120
+ POOL_PLEDGE=$AMOUNT_STAKED
121
+ POOL_COST=$( cat $PROTOCOL_FILE | jq .protocolParams.minPoolCost)
122
+ POOL_MARGIN=0.1
123
+ POOL_METADATA_URL=" https://mithril.network/tbd.json"
124
+ POOL_RELAY_URL=" https://aggregator.dev-preview.api.mithril.network/"
125
+
126
+ ./cardano-cli stake-pool registration-certificate \
127
+ --cold-verification-key-file cold.vkey \
128
+ --vrf-verification-key-file vrf.vkey \
129
+ --pool-pledge $POOL_PLEDGE \
130
+ --pool-cost $POOL_COST \
131
+ --pool-margin $POOL_MARGIN \
132
+ --pool-reward-account-verification-key-file stake.vkey \
133
+ --pool-owner-stake-verification-key-file stake.vkey \
134
+ --testnet-magic $NETWORK_MAGIC \
135
+ --single-host-pool-relay $POOL_RELAY_URL \
136
+ --metadata-url $POOL_METADATA_URL \
137
+ --metadata-hash $POOL_METADATA_HASH \
138
+ --out-file pool-registration.cert
139
+
140
+ # ### Generate delegation certificate pledge
141
+ ./cardano-cli stake-address delegation-certificate \
142
+ --stake-verification-key-file stake.vkey \
143
+ --cold-verification-key-file cold.vkey \
144
+ --out-file delegation.cert
145
+
146
+ # ### Submit the pool certificate and delegation certificate to the blockchain
147
+ # #### Build transaction
148
+ STAKE_ADDRESS_DEPOSIT=$( cat $PROTOCOL_FILE | jq .protocolParams.poolDeposit)
149
+ CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli transaction build \
150
+ --babbage-era \
151
+ --tx-in $( CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli query utxo \
152
+ --testnet-magic $NETWORK_MAGIC \
153
+ --address $( cat payment.addr) | tail -n 1 | awk ' {print $1;}' ) # 1 \
154
+ --tx-out $( cat payment.addr) +$STAKE_ADDRESS_DEPOSIT \
155
+ --change-address $( cat payment.addr) \
156
+ --invalid-hereafter $(( $SLOT + 100000 )) \
157
+ --out-file pool-registration.txbody \
158
+ --certificate-file pool-registration.cert \
159
+ --certificate-file delegation.cert \
160
+ --witness-override 4 \
161
+ --testnet-magic $NETWORK_MAGIC
162
+
163
+ # ### Sign transaction
164
+ CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli transaction sign \
165
+ --signing-key-file payment.skey \
166
+ --signing-key-file stake.skey \
167
+ --signing-key-file cold.skey \
168
+ --testnet-magic $NETWORK_MAGIC \
169
+ --tx-body-file pool-registration.txbody \
170
+ --out-file pool-registration.tx
171
+
172
+ # ### Submit transaction
173
+ CARDANO_NODE_SOCKET_PATH=$CARDANO_NODE_SOCKET_PATH ./cardano-cli transaction submit \
174
+ --tx-file pool-registration.tx \
175
+ --testnet-magic $NETWORK_MAGIC
176
+
177
+ # ## Compute Pool Id
178
+ POOL_ID=$( ./cardano-cli stake-pool id --cold-verification-key-file cold.vkey)
179
+ echo $POOL_ID
0 commit comments