Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 83 additions & 9 deletions docs/runbook/era-markers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export SCRIPT_TX_VALUE=**MINIUM_SCRIPT_TX_VALUE**
A common value for the transaction amount used when a script transaction is made is:

```bash
export SCRIPT_TX_VALUE=2000000
export SCRIPT_TX_VALUE=2100000
```

Compute the network magic parameter that handles both the Cardano mainnet and Cardano test networks:
Expand Down Expand Up @@ -129,7 +129,10 @@ An example output of the command is:
Verify that the payment address has funds:

```bash
$CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
```

```bash
TxHash TxIx Amount
--------------------------------------------------------------------------------------
f0c0345f151f9365fbbb4e7afa217e56b987d9e91fd754ca609d9dfec97275c7 0 10000000000 lovelace + TxOutDatumNone
Expand All @@ -151,6 +154,9 @@ $CARDANO_CLI $CARDANO_ERA transaction build $CARDANO_NETWORK_MAGIC \
--change-address $(cat $CARDANO_WALLET_PATH/payment.addr) \
--out-file $ASSETS_PATH/tx.raw \
--socket-path $CARDANO_NODE_SOCKET_PATH
```

```bash
Estimated transaction fee: Lovelace 168669
```

Expand All @@ -171,20 +177,29 @@ $CARDANO_CLI $CARDANO_ERA transaction submit \
$CARDANO_NETWORK_MAGIC \
--tx-file $ASSETS_PATH/tx.signed \
--socket-path $CARDANO_NODE_SOCKET_PATH
```

```bash
Transaction successfully submitted.
```

Also get the transaction id:

```bash
$CARDANO_CLI transaction txid --tx-file $ASSETS_PATH/tx.signed
$CARDANO_CLI $CARDANO_ERA transaction txid --tx-file $ASSETS_PATH/tx.signed
```

```bash
6518b3cea0b49b55746ec61148e7c60ab042959d534f6bb6e8f6a844d4af69fb
```

We need to wait a few seconds before the transaction is available and we can see the initial datum for the script address:

```bash
$CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
```

```bash
TxHash TxIx Amount
--------------------------------------------------------------------------------------
6518b3cea0b49b55746ec61148e7c60ab042959d534f6bb6e8f6a844d4af69fb 0 1500000 lovelace + TxOutDatumInline ReferenceTxInsScriptsInlineDatumsInBabbageEra (ScriptDataConstructor 0 [ScriptDataBytes "[{\"n\":\"thales\",\"e\":1}]",ScriptDataBytes "\165\143\232\227\&6\244e\222\211\187\167\197\167\175\229\181\162o/\182[|Nnt.h\ACKE\241=\242\139\242\182:a\204r\217\200&\190I\SO,\US\DLE\152\217U\223P5\128\164\232\153\181\ETB8\132\227\SO"])
Expand All @@ -196,7 +211,10 @@ Optional: We can retrieve the initial value stored in the datum with the cardano
The full utxo json representation:

```bash
$CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH --out-file temp.json && cat temp.json | jq '. [] | select(.inlineDatum | . != null and . != "")'
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH --out-file temp.json && cat temp.json | jq '.[] | select(.inlineDatum | . != null and . != "")'
```

```bash
{
"address": "addr_test1qzzngukkj9ydjemqjlgfn42sevy2xnvauay46weushlpuq9thd4ray00csjssf4sxftv04xeequ3xfx72nujg9y4d5ysgkxxlh",
"datum": null,
Expand All @@ -219,6 +237,28 @@ $CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARD
}
```

The parsed era markers json representation:

```bash
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH --out-file temp.json && cat temp.json | jq -r '.[] | select(.inlineDatum | . != null and . != "")| .inlineDatum.fields[].bytes' | tr '\n' ' ' | xxd -r -p | jq
```

```json
{
"markers": [
{
"name": "thales",
"epoch": 1
},
{
"name": "pythagoras",
"epoch": null
}
],
"signature": "a83a8dee3b875a7e8d259500a8ce14cc73587ef838899d269ad58aadd16086cfe0486528e54b841b3a1d5aa8b7176d55c0803337ca59fbd3654b2bdd5a480d05"
}
```

## Update Era Markers: Write a new version of datum on chain

> [!IMPORTANT]
Expand All @@ -228,7 +268,10 @@ $CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARD
Retrieve the utxo of the payment address:

```bash
$CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
```

```bash
TxHash TxIx Amount
--------------------------------------------------------------------------------------
6518b3cea0b49b55746ec61148e7c60ab042959d534f6bb6e8f6a844d4af69fb 0 1500000 lovelace + TxOutDatumInline ReferenceTxInsScriptsInlineDatumsInBabbageEra (ScriptDataConstructor 0 [ScriptDataBytes "[{\"n\":\"thales\",\"e\":1}]",ScriptDataBytes "\165\143\232\227\&6\244e\222\211\187\167\197\167\175\229\181\162o/\182[|Nnt.h\ACKE\241=\242\139\242\182:a\204r\217\200&\190I\SO,\US\DLE\152\217U\223P5\128\164\232\153\181\ETB8\132\227\SO"])
Expand Down Expand Up @@ -284,14 +327,20 @@ Transaction successfully submitted.
Also get the transaction id:

```bash
$CARDANO_CLI transaction txid --tx-file $ASSETS_PATH/tx.signed
$CARDANO_CLI $CARDANO_ERA transaction txid --tx-file $ASSETS_PATH/tx.signed
```

```bash
1fd4d3e131afe3c8b212772a3f3083d2fbc6b2a7b20e54e4ff08e001598818d8
```

We need to wait a few seconds before the transaction is available and we can see the updated datum for the script address:

```bash
$CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH
```

```bash
TxHash TxIx Amount
--------------------------------------------------------------------------------------
1f139b47017c9c90d4622ac768e249d25d37ad4461db44a20486b7da72a78915 0 2000000 lovelace + TxOutDatumInline ReferenceTxInsScriptsInlineDatumsInBabbageEra (ScriptDataConstructor 0 [ScriptDataBytes "[{\"n\":\"thales\",\"e\":1},{\"n\":\"pythagoras\",\"e\":null}]",ScriptDataBytes "^P\EOT\248k3\196/\139\tU\173H\138\FS\194MD\240\153\227\142z\181\134\213\168\&2\222\219i1\246\NAK\\]\247\154U\143-^vmtq\204\207#\236\213\f\201\&1\152\145(\161\ETX;\183\128\195\r"])
Expand All @@ -303,7 +352,10 @@ We can retrieve the updated value stored in the datum with the cardano cli:
The full utxo json representation:

```bash
$CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH --out-file temp.json && cat temp.json | jq '. [] | select(.inlineDatum | . != null and . != "")'
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH --out-file temp.json && cat temp.json | jq '.[] | select(.inlineDatum | . != null and . != "")'
```

```bash
{
"address": "addr_test1qzzngukkj9ydjemqjlgfn42sevy2xnvauay46weushlpuq9thd4ray00csjssf4sxftv04xeequ3xfx72nujg9y4d5ysgkxxlh",
"datum": null,
Expand All @@ -325,3 +377,25 @@ $CARDANO_CLI query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARD
}
}
```

The parsed era markers json representation:

```bash
$CARDANO_CLI $CARDANO_ERA query utxo --address $(cat $CARDANO_WALLET_PATH/payment.addr) $CARDANO_NETWORK_MAGIC --socket-path $CARDANO_NODE_SOCKET_PATH --out-file temp.json && cat temp.json | jq -r '.[] | select(.inlineDatum | . != null and . != "")| .inlineDatum.fields[].bytes' | tr '\n' ' ' | xxd -r -p | jq
```

```json
{
"markers": [
{
"name": "thales",
"epoch": 1
},
{
"name": "pythagoras",
"epoch": 123
}
],
"signature": "a83a8dee3b875a7e8d259500a8ce14cc73587ef838899d269ad58aadd16086cfe0486528e54b841b3a1d5aa8b7176d55c0803337ca59fbd3654b2bdd5a480d05"
}
```
16 changes: 8 additions & 8 deletions mithril-infra/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,14 +154,14 @@ In order to retire a stake pool:

- Retire a stake poool with `retire-stake-pool.sh`

| Script | Description | Usage |
| --------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create-keys.sh` | Script for creating keys for a Cardano pool (SPO) | `GENESIS_FILE=**YOUR_GENESIS_FILE** ./tools/pool/create-keys.sh` |
| `query-stake-pool.sh` | Script for querying info about a Cardano pool (SPO) | `./tools/pool/query-stake-pool.sh` |
| `register-stake-address.sh` | Script for registering stake address of a Cardano pool (SPO) | `TX_IN=**YOUR_TX_IN** ./tools/pool/register-stake-address.sh` |
| `register-stake-pool.sh` | Script for registering a Cardano stake pool (SPO) | `GENESIS_FILE=**YOUR_GENESIS_FILE** TX_IN=**YOUR_TX_IN** SIGNER_DOMAIN=**YOUR_SIGNER_DOMAIN_NAME** POOL_TICKER=**YOUR_TICKER** ./tools/pool/register-stake-pool.sh` |
| `renew-opcert.sh` | Script for renewing Operational Certificate for a Cardano pool (SPO) | `./tools/pool/renew-opcert.sh` |
| `retire-stake-pool.sh` | Script for retiring a Cardano pool (SPO) | `TX_IN=**YOUR_TX_IN** VALUE_OUT=**YOUR_VALUE_OUT** ./tools/pool/retire-stake-pool.sh` |
| Script | Description | Usage |
| --------------------------- | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create-keys.sh` | Script for creating keys for a Cardano pool (SPO) | `GENESIS_FILE=**YOUR_SHELLEY_GENESIS_FILE** ./tools/pool/create-keys.sh` |
| `query-stake-pool.sh` | Script for querying info about a Cardano pool (SPO) | `./tools/pool/query-stake-pool.sh` |
| `register-stake-address.sh` | Script for registering stake address of a Cardano pool (SPO) | `TX_IN=**YOUR_TX_IN** ./tools/pool/register-stake-address.sh` |
| `register-stake-pool.sh` | Script for registering a Cardano stake pool (SPO) | `GENESIS_FILE=**YOUR_SHELLEY_GENESIS_FILE** TX_IN=**YOUR_TX_IN** SIGNER_DOMAIN=**YOUR_SIGNER_DOMAIN_NAME** POOL_TICKER=**YOUR_TICKER** ./tools/pool/register-stake-pool.sh` |
| `renew-opcert.sh` | Script for renewing Operational Certificate for a Cardano pool (SPO) | `./tools/pool/renew-opcert.sh` |
| `retire-stake-pool.sh` | Script for retiring a Cardano pool (SPO) | `TX_IN=**YOUR_TX_IN** VALUE_OUT=**YOUR_VALUE_OUT** ./tools/pool/retire-stake-pool.sh` |

### Genesis

Expand Down
2 changes: 1 addition & 1 deletion mithril-infra/assets/infra.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.5
0.3.6
2 changes: 1 addition & 1 deletion mithril-infra/assets/tools/pool/_prelude.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ CARDANO_CLI_CMD() {

# Compute current Cardano era if needed
if [ -z "${CARDANO_ERA}" ]; then
CARDANO_ERA=$(CARDANO_CLI_CMD query tip --testnet-magic $NETWORK_MAGIC | jq -r '.era |= ascii_downcase | .era')
CARDANO_ERA=$(CARDANO_CLI_CMD latest query tip --testnet-magic $NETWORK_MAGIC | jq -r '.era |= ascii_downcase | .era')
fi

# Compute auxiliary env vars
Expand Down
42 changes: 17 additions & 25 deletions mithril-infra/assets/tools/pool/create-keys.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,85 +13,77 @@ fi

# Create keys and addresses
## Create payment keypair
CARDANO_CLI_CMD address key-gen \
CARDANO_CLI_CMD ${CARDANO_ERA} address key-gen \
--verification-key-file ${POOL_ARTIFACTS_DIR}/payment.vkey \
--signing-key-file ${POOL_ARTIFACTS_DIR}/payment.skey

## Create stake keypair
CARDANO_CLI_CMD stake-address key-gen \
CARDANO_CLI_CMD ${CARDANO_ERA} stake-address key-gen \
--verification-key-file ${POOL_ARTIFACTS_DIR}/stake.vkey \
--signing-key-file ${POOL_ARTIFACTS_DIR}/stake.skey

## Create payment address
CARDANO_CLI_CMD address build \
CARDANO_CLI_CMD ${CARDANO_ERA} address build \
--payment-verification-key-file ${POOL_ARTIFACTS_DIR}/payment.vkey \
--stake-verification-key-file ${POOL_ARTIFACTS_DIR}/stake.vkey \
--out-file ${POOL_ARTIFACTS_DIR}/payment.addr \
--testnet-magic $NETWORK_MAGIC

## Create stake address
CARDANO_CLI_CMD stake-address build \
CARDANO_CLI_CMD ${CARDANO_ERA} stake-address build \
--stake-verification-key-file ${POOL_ARTIFACTS_DIR}/stake.vkey \
--out-file ${POOL_ARTIFACTS_DIR}/stake.addr \
--testnet-magic $NETWORK_MAGIC

# Generate your stake pool keys
## Generate Cold Keys and a Cold_counter
CARDANO_CLI_CMD node key-gen \
CARDANO_CLI_CMD ${CARDANO_ERA} node key-gen \
--cold-verification-key-file ${POOL_ARTIFACTS_DIR}/cold.vkey \
--cold-signing-key-file ${POOL_ARTIFACTS_DIR}/cold.skey \
--operational-certificate-issue-counter-file ${POOL_ARTIFACTS_DIR}/opcert.counter

## Generate VRF Key pair
CARDANO_CLI_CMD node key-gen-VRF \
CARDANO_CLI_CMD ${CARDANO_ERA} node key-gen-VRF \
--verification-key-file ${POOL_ARTIFACTS_DIR}/vrf.vkey \
--signing-key-file ${POOL_ARTIFACTS_DIR}/vrf.skey

## Generate the KES Key pair
CARDANO_CLI_CMD node key-gen-KES \
CARDANO_CLI_CMD ${CARDANO_ERA} node key-gen-KES \
--verification-key-file ${POOL_ARTIFACTS_DIR}/kes.vkey \
--signing-key-file ${POOL_ARTIFACTS_DIR}/kes.skey

## Generate the Operational Certificate
### Compute KES period
SLOT=$(CARDANO_CLI_CMD query tip --testnet-magic $NETWORK_MAGIC | jq .slot)
SLOT=$(CARDANO_CLI_CMD ${CARDANO_ERA} query tip --testnet-magic $NETWORK_MAGIC | jq .slot)
SLOTS_KES_PERIOD=$(cat $GENESIS_FILE | jq .slotsPerKESPeriod)
KES_PERIOD=`expr $SLOT / $SLOTS_KES_PERIOD`
KES_PERIOD=$(( $SLOT / $SLOTS_KES_PERIOD ))

### Generate Operational Certificate
CARDANO_CLI_CMD node issue-op-cert \
CARDANO_CLI_CMD ${CARDANO_ERA} node issue-op-cert \
--kes-verification-key-file ${POOL_ARTIFACTS_DIR}/kes.vkey \
--cold-signing-key-file ${POOL_ARTIFACTS_DIR}/cold.skey \
--operational-certificate-issue-counter ${POOL_ARTIFACTS_DIR}/opcert.counter \
--kes-period $KES_PERIOD \
--out-file ${POOL_ARTIFACTS_DIR}/opcert.cert

### Create a registration certificate
if [ "${CARDANO_ERA}" == "conway"]; then
KEY_REGISTRATION_DEPOSIT_ANOUNT=$(CARDANO_CLI_CMD ${CARDANO_ERA} query gov-state --testnet-magic ${NETWORK_MAGIC} | jq -r .enactState.curPParams.keyDeposit)
# Conway specific creation of registration certificate
CARDANO_CLI_CMD stake-address registration-certificate \
--stake-verification-key-file ${POOL_ARTIFACTS_DIR}/stake.vkey \
--out-file ${POOL_ARTIFACTS_DIR}/stake.cert \
--key-reg-deposit-amt $KEY_REGISTRATION_DEPOSIT_ANOUNT
else
# Legacy creation of registration certificate
CARDANO_CLI_CMD stake-address registration-certificate \
--stake-verification-key-file ${POOL_ARTIFACTS_DIR}/stake.vkey \
--out-file ${POOL_ARTIFACTS_DIR}/stake.cert
fi
KEY_REGISTRATION_DEPOSIT_AMOUNT=$(CARDANO_CLI_CMD ${CARDANO_ERA} query gov-state --testnet-magic ${NETWORK_MAGIC} | jq -r .currentPParams.stakeAddressDeposit)
CARDANO_CLI_CMD ${CARDANO_ERA} stake-address registration-certificate \
--stake-verification-key-file ${POOL_ARTIFACTS_DIR}/stake.vkey \
--out-file ${POOL_ARTIFACTS_DIR}/stake.cert \
--key-reg-deposit-amt $KEY_REGISTRATION_DEPOSIT_AMOUNT


### Compute Pool Id
POOL_ID=$(CARDANO_CLI_CMD stake-pool id --cold-verification-key-file ${POOL_ARTIFACTS_DIR}/cold.vkey)
POOL_ID=$(CARDANO_CLI_CMD ${CARDANO_ERA} stake-pool id --cold-verification-key-file ${POOL_ARTIFACTS_DIR}/cold.vkey)
echo $POOL_ID > ${POOL_ARTIFACTS_DIR_PREFIX}${POOL_ARTIFACTS_DIR}/pool-id.txt
echo POOL_ID=$POOL_ID

### Send funds to / Check utxo payment address
echo Send funds to "$(cat ${POOL_ARTIFACTS_DIR_PREFIX}${POOL_ARTIFACTS_DIR}/payment.addr)" at https://docs.cardano.org/cardano-testnet/tools/faucet
while true
do
UTXO_ROWS_NUMBER=`expr $(CARDANO_CLI_CMD query utxo --address $(cat ${POOL_ARTIFACTS_DIR_PREFIX}${POOL_ARTIFACTS_DIR}/payment.addr) --testnet-magic $NETWORK_MAGIC 2> /dev/null | wc -l) - 2`
UTXO_ROWS_NUMBER=$(( $(CARDANO_CLI_CMD ${CARDANO_ERA} query utxo --address $(cat ${POOL_ARTIFACTS_DIR_PREFIX}${POOL_ARTIFACTS_DIR}/payment.addr) --testnet-magic $NETWORK_MAGIC 2> /dev/null | wc -l) - 2 ))
if [ $UTXO_ROWS_NUMBER -gt 0 ] ; then
echo ">>>> Funds Received!"
break
Expand Down
Loading