Goal clerk dryrun returns Check: LogicSig not supported

When I run

$ ./goal clerk dryrun -d testnetdata/ -t ../algorand-escrow-smart-contract/playground.stxn 

I get back the error program failed Check: LogicSig not supported

Curious if anyone else has run into this and figured it out.

I tried updating and restarting the node but still get the same error.

$ ./update.sh -i -c stable -p ~/Projects/algorand-node -d ~/Projects/algorand-node/testnetdata -n
Current Version = 8589934593
Latest Version = 8589934593
No new version found - forcing install anyway
New version found
Checking for files matching: 'channel/stable/node_stable_darwin-amd64_' in bucket algorand-releases
Update Downloaded to /var/folders/66/tj36f9h922z3ys10vyr7kr7m0000gn/T/tmp.ORroi6TK/8589934593.tar.gz
Expanding update...
Validating update...
Starting the new update script to complete the installation...
... Resuming installation from the latest update script
Current Version = 8589934593
Stopping node...
Stopping node and waiting...
/var/folders/66/tj36f9h922z3ys10vyr7kr7m0000gn/T/tmp.ORroi6TK/a/bin/update.sh: line 223: systemd-escape: command not found
sudo: a password is required
The node was successfully stopped.
Backing up current binary files...
Backing up current data files from /Users/danigrant/Projects/algorand-node/testnetdata...
Installing new binary files...
Installing new data files into /Users/danigrant/Projects/algorand-node/testnetdata...
Copying genesis files locally
Checking for new ledger in /Users/danigrant/Projects/algorand-node/testnetdata
Updating genesis files for network testnet
Applying migration fixups...
Deleting existing log files in /Users/danigrant/Projects/algorand-node/testnetdata
Install complete - restart node manually
DanitheComputer:algorand-node danigrant$ ./goal node stop -d testnetdata
The node was successfully stopped.
DanitheComputer:algorand-node danigrant$ ./goal node start -d testnetdata
Algorand node successfully started!
DanitheComputer:algorand-node danigrant$ ./goal clerk dryrun -d testnetdata/ -t ../algorand-escrow-smart-contract/playground.stxn 
program failed Check: LogicSig not supported

Just making sure - did you attempted this before or after the network agreed on the protocol upgrade ?
LogicSig not supported
is the expected output prior to protocol upgrade.
Could you verify that your local node has caught up with the upgrade and try again ?

wow being able to dryrun is game changing.

I have three quick questions about dryrun:

1 - what is the value printed on the left column (in this one below, what is 1, 6, 7, 8, 9, etc) of the dryrun output?

tx[0] cost=26 trace:
  1 intcblock => <empty stack>
  6 intc_0 => 3 0x3
  7 intc_0 => 3 0x3
  8 * => 9 0x9
  9 intc_0 => 3 0x3
 10 * => 27 0x1b
  1. how do you pass in parameters into the dryrun call? The docs say you can use the --argb64 flag to pass in base64 encoded arguments, what should be the format of the arguments before you base64 encode them?

  2. can you pass in an opcode dynamically as a parameter? can i pass in dynamically whether the opcode should be + or - ? The reason i want to do that is there isn’t negative number support so I want to let the person who invokes the function declare whether the next number should be added or subtracted.

Let me ping the team and see if we can get these answered for you. I am not sure I will hear back before the holidays are over though.

Thank you so much! There is no rush at all of course. Really appreciate all your help.

Happy Thanksgiving.

I tried using --argb64 to pass in parameters to the contract in the dryrun but got unknown flag: --argb64

You need to pass that parameter when you create the transaction:

goal clerk send -a 1000 -c DFPKC2SJP3OTFVJFMCD356YB7BOT4SJZTGWLIPPFEWL3ZABUFLTOY6ILYE --to DFPKC2SJP3OTFVJFMCD356YB7BOT4SJZTGWLIPPFEWL3ZABUFLTOY6ILYE --from-program htlc.teal --argb64 "90GwXNJlVYGvgNwUl9eIUW21E/5vRu9/uqaCkw67sQk=" -o /tmp/a.stxn -d ~/node/betanetdata
goal clerk dryrun --round 31337 -d ~/node/betanetdata -t /tmp/a.stxn

See https://developer.algorand.org/docs/asc-tutorial
Also if you look at the way the htlc template can be created, you can also write the signed transaction out using the SDKs like what is shown here:

the leftmost column is the byte offset within the program of the opcode.
then the operation name.
then after the => on the right hand side is the value the operation pushes onto the stack; if an int then the same value in both decimal and hex; if a byte string then in hex bytes.

Thank you @bolson and @JasonW!