Skip to content

Commit

Permalink
Merge #2831
Browse files Browse the repository at this point in the history
2831: CAD-2907 workbench: Alonzo support r=MarcFontaine a=deepfire

This makes the `scripts/plutus/example-txin-locking-plutus-script.sh` script work with the workbench:

1. Alonzo-specific updates in the workbench genesis generation
2. Adaptations in the script
3. Small quality-of-life improvement: set `CARDANO_NODE_SOCKET_PATH` automatically inside the shell

Test with:

1. `make cls cluster-shell-dev CLUSTER_ARGS_EXTRA='--arg withHoogle false'`, and once inside the shell:
2. `./scripts/plutus/example-txin-locking-plutus-script.sh`
3. `cardano-cli transaction submit --tx-file example/work/alonzo.tx --testnet-magic 42`

The last command should output: `Transaction successfully submitted.`

Co-authored-by: Kosyrev Serge <serge.kosyrev@iohk.io>
Co-authored-by: MarcFontaine <MarcFontaine@users.noreply.github.com>
  • Loading branch information
3 people committed Jun 16, 2021
2 parents 481ac3c + 33249c1 commit 91262b4
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ profiles:
profile-names:
@./nix/workbench/wb profile-names

CLUSTER_PROFILE = default-mary
CLUSTER_PROFILE = default-alzo
CLUSTER_ARGS_EXTRA ?=

cluster-shell:
Expand Down
2 changes: 1 addition & 1 deletion custom-config/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ self: {
localCluster = {
cacheDir = "${self.localCluster.stateDir}/.cache";
stateDir = "state-cluster";
profileName = "default-mary";
profileName = "default-alzo";
basePort = 30000;
autoStartCluster = false;
enableEKG = true;
Expand Down
3 changes: 2 additions & 1 deletion nix/supervisord-cluster/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ let
basePortDefault = 30000;
cacheDirDefault = "${__getEnv "HOME"}/.cache/cardano-workbench";
stateDirDefault = "state-cluster";
profileNameDefault = "default-mary";
profileNameDefault = "default-alzo";
in
{ pkgs
, workbench
Expand Down Expand Up @@ -52,6 +52,7 @@ let
finaliseNodeConfig =
{ port, ... }: cfg: recursiveUpdate cfg
({
AlonzoGenesisFile = "../genesis/alonzo-genesis.json";
ShelleyGenesisFile = "../genesis/genesis.json";
ByronGenesisFile = "../genesis/byron/genesis.json";
} // optionalAttrs enableEKG {
Expand Down
1 change: 1 addition & 0 deletions nix/workbench/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ let
}
export -f workbench-prebuild-executables
export CARDANO_NODE_SOCKET_PATH=run/current/node-0/node.socket
'';

generateProfiles =
Expand Down
14 changes: 7 additions & 7 deletions nix/workbench/genesis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -146,24 +146,24 @@ case "${op}" in
cardano-cli genesis create-staked "${params[@]}"

## TODO: temporary step for Alonzo
jq_fmutate ""$dir"/genesis.json" '. *
{ lovelacePerUTxOWord: 0
jq '
{ adaPerUTxOWord: 0
, executionPrices:
{ prMem: 1
, prSteps: 1
}
, maxTxExUnits:
{ exUnitsMem: 1
, exUnitsSteps: 1
{ exUnitsMem: 2000000000
, exUnitsSteps: 2000000000
}
, maxBlockExUnits:
{ exUnitsMem: 1
, exUnitsSteps: 1
{ exUnitsMem: 200000000000
, exUnitsSteps: 200000000000
}
, maxValueSize: 1000
, collateralPercentage: 100
, maxCollateralInputs: 1
}'
}' --null-input > "$dir"/alonzo-genesis.json

## TODO: try to get rid of this step:
Massage_the_key_file_layout_to_match_AWS "$profile_json" "$topo_dir" "$dir";;
Expand Down
3 changes: 2 additions & 1 deletion nix/workbench/profiles/node-services.nix
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ let
LastKnownBlockVersion-Minor = 0;
LastKnownBlockVersion-Alt = 0;
})
[ "ByronGenesisHash"
[ "AlonzoGenesisHash"
"ByronGenesisHash"
"ShelleyGenesisHash"
])
//
Expand Down
99 changes: 99 additions & 0 deletions scripts/plutus/example-txin-locking-plutus-script-workbench.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#!/usr/bin/env bash

set -e
# Unoffiical bash strict mode.
# See: http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -u
set -o pipefail

# This script demonstrates how to lock a tx output with a plutus script.
# NB: In this example the Datum must be 42!

# Step 1: Create a tx ouput with a datum hash at the script address. In order for a tx ouput to be locked
# by a plutus script, it must have a datahash. We also need collateral tx inputs so we split the utxo
# in order to accomodate this.

# This is the end to end always succeeds plutus script example
plutusscriptinuse=scripts/plutus/untyped-always-succeeds-txin.plutus

export CARDANO_NODE_SOCKET_PATH=run/current/node-1/node.socket

mkdir -p example/shelley/utxo-keys/
cp -f run/current/genesis/utxo-keys/utxo1.* example/shelley/utxo-keys/

plutusscriptaddr=$(cardano-cli address build --payment-script-file $plutusscriptinuse --testnet-magic 42 | grep -v Temporary)

mkdir -p example/work

utxovkey=example/shelley/utxo-keys/utxo1.vkey
utxoskey=example/shelley/utxo-keys/utxo1.skey

utxoaddr=$(cardano-cli address build --testnet-magic 42 --payment-verification-key-file $utxovkey | grep -v Temporary)

cardano-cli query utxo --address $utxoaddr --cardano-mode --testnet-magic 42 --out-file example/work/utxo.json

txin=$(jq -r 'keys[]' example/work/utxo.json)

cardano-cli transaction build-raw \
--alonzo-era \
--fee 200000 \
--tx-in $txin \
--tx-out $plutusscriptaddr+49999999900000 \
--tx-out-datum-hash 9e1199a988ba72ffd6e9c269cadb3b53b5f360ff99f112d9b2ee30c4d74ad88b \
--tx-out $utxoaddr+49999999900000 \
--out-file example/work/create-datum-output.body

cardano-cli transaction sign \
--tx-body-file example/work/create-datum-output.body \
--testnet-magic 42 \
--signing-key-file $utxoskey\
--out-file example/work/create-datum-output.tx

# SUBMIT
cardano-cli transaction submit --tx-file example/work/create-datum-output.tx --testnet-magic 42

echo "Pausing for 15 seconds..."
sleep 15

# Step 2
# After "locking" the tx output at the script address, we can now can attempt to spend
# the "locked" tx output below.

cardano-cli query utxo --address $plutusscriptaddr --testnet-magic 42 --out-file example/work/plutusutxo.json
plutusutxotxin=$(jq -r 'keys[]' example/work/plutusutxo.json)

cardano-cli query utxo --address $utxoaddr --cardano-mode --testnet-magic 42 --out-file example/work/utxo.json
txinCollateral=$(jq -r 'keys[]' example/work/utxo.json)

echo "Plutus TxIn"
echo $plutusutxotxin

echo "Collateral TxIn"
echo $txinCollateral

cardano-cli query protocol-parameters --testnet-magic 42 --out-file example/pparams.json

dummyaddress=addr_test1vpqgspvmh6m2m5pwangvdg499srfzre2dd96qq57nlnw6yctpasy4

cardano-cli transaction build-raw \
--alonzo-era \
--fee 500000000 \
--tx-in $plutusutxotxin \
--tx-in-collateral $txinCollateral \
--tx-out "$dummyaddress+49999499900000" \
--tx-in-script-file $plutusscriptinuse \
--tx-in-datum-value 42 \
--protocol-params-file example/pparams.json\
--tx-in-redeemer-value 42 \
--tx-in-execution-units "(200000000,200000000)" \
--out-file example/work/test-alonzo.body

cardano-cli transaction sign \
--tx-body-file example/work/test-alonzo.body \
--testnet-magic 42 \
--signing-key-file example/shelley/utxo-keys/utxo1.skey \
--out-file example/work/alonzo.tx

# SUBMIT example/work/alonzo.tx
echo "Manually submit the tx with plutus script via:"
echo "cardano-cli transaction submit --tx-file example/work/alonzo.tx --testnet-magic 42"

0 comments on commit 91262b4

Please sign in to comment.