I'm trying to use Plutus function txSignedBy
with a transaction involving the usage of cardano-cli
I first sent some UtxO to my script address, with a datum whose structure is like this:
data TradeDetail = TradeDetail
{ tradeOwner :: !PubKeyHash
} deriving (Generic, ToJSON, FromJSON)
data TradeDatum = TradeDatum TradeDetail
deriving (Generic, ToJSON, FromJSON)
To build the datum,
I first generated the public key hash from my verificaiton key like this:
cardano-cli address key-hash --payment-verification-key-file mykey.vkey
and got59b07e6d2500c82f6325ac18d7624cfbdb83a92e061c31068e6b03f9
Then I created the Datum JSON file encapsulating the public key hash
{
"fields":[
{
"fields":[
{
"bytes":"59b07e6d2500c82f6325ac18d7624cfbdb83a92e061c31068e6b03f9"
}
],
"constructor":0
}
],
"constructor":0
}
My problem happens when I try to retrieve the UtxO from the script, providing the datum. The validator sub-function where the error happens, in the ON-chain code, is like this:
{-# INLINABLE getback #-}
getback :: ContractInfo -> TradeDetail -> ScriptContext -> Bool
getback ci details context =
traceIfFalse message $
(scriptContextTxInfo context) `txSignedBy` (tradeOwner details)
where
message :: BuiltinString
message = "Tx has to be signed by the item owner " `appendString` decodeUtf8 (getPubKeyHash (tradeOwner details))
When using cardano-cli
to get back the UtxO, signing with mykey.skey
, I get the error:
Command failed: transaction build Error: The following scripts have execution failures:
the script for transaction input 0 (in the order of the TxIds) failed with:
The Plutus script evaluation failed: An error has occurred: User error:
The provided Plutus code called 'error'.
Caused by: [
(builtin decodeUtf8)
(con bytestring #59b07e6d2500c82f6325ac18d7624cfbdb83a92e061c31068e6b03f9)
]
I don't know why my error message is not well formatted, but at least the public key hash is correctly displayed. This shows that, at the minimum, the datum is unpacked correctly and the public key hash is extracted.
But the question is, why function txSignedBy
returns false ?