From aeb047cc21feb6a75cb8979cb6e672cb4f152e50 Mon Sep 17 00:00:00 2001 From: gege251 Date: Tue, 25 Jan 2022 22:17:07 +0100 Subject: [PATCH 1/4] Update asset name handling (for cardano-cli 1.32) --- bot-plutus-interface.cabal | 16 +++++++++------- src/BotPlutusInterface/CardanoCLI.hs | 3 ++- src/BotPlutusInterface/UtxoParser.hs | 9 +++++++-- test/Spec/BotPlutusInterface/Contract.hs | 12 ++++++------ test/Spec/BotPlutusInterface/UtxoParser.hs | 2 +- test/Spec/MockContract.hs | 3 ++- 6 files changed, 27 insertions(+), 18 deletions(-) diff --git a/bot-plutus-interface.cabal b/bot-plutus-interface.cabal index 58baa101..ee05dc6b 100644 --- a/bot-plutus-interface.cabal +++ b/bot-plutus-interface.cabal @@ -87,9 +87,9 @@ library other-modules: BotPlutusInterface.Server build-depends: - , aeson ^>=1.5.0.0 - , attoparsec >=0.13.2.2 - , bytestring ^>=0.10.12.0 + , aeson ^>=1.5.0.0 + , attoparsec >=0.13.2.2 + , bytestring ^>=0.10.12.0 , cardano-api , cardano-crypto , cardano-ledger-alonzo @@ -101,6 +101,7 @@ library , filepath , freer-extras , freer-simple + , hex , http-client , http-types , lens @@ -125,7 +126,7 @@ library , servant-websockets , split , stm - , text ^>=1.2.4.0 + , text ^>=1.2.4.0 , transformers , transformers-either , uuid @@ -147,12 +148,12 @@ test-suite bot-plutus-interface-test Spec.MockContract build-depends: - , aeson ^>=1.5.0.0 + , aeson ^>=1.5.0.0 , attoparsec , base , base-compat , bot-plutus-interface - , bytestring ^>=0.10.12.0 + , bytestring ^>=0.10.12.0 , cardano-api , cardano-crypto-class , containers @@ -163,6 +164,7 @@ test-suite bot-plutus-interface-test , freer-extras , freer-simple , generic-arbitrary + , hex , lens , neat-interpolation , plutus-chain-index @@ -183,7 +185,7 @@ test-suite bot-plutus-interface-test , tasty , tasty-hunit , tasty-quickcheck - , text ^>=1.2.4.0 + , text ^>=1.2.4.0 , uuid hs-source-dirs: test diff --git a/src/BotPlutusInterface/CardanoCLI.hs b/src/BotPlutusInterface/CardanoCLI.hs index 7bc879dd..0e8fa4f5 100644 --- a/src/BotPlutusInterface/CardanoCLI.hs +++ b/src/BotPlutusInterface/CardanoCLI.hs @@ -35,6 +35,7 @@ import Data.ByteString.Lazy qualified as LazyByteString import Data.ByteString.Short qualified as ShortByteString import Data.Either (fromRight) import Data.Either.Combinators (mapLeft, maybeToRight) +import Data.Hex (hex) import Data.Kind (Type) import Data.List (sort) import Data.Map (Map) @@ -371,7 +372,7 @@ flatValueToCliArg (curSymbol, name, amount) where amountStr = showText amount curSymbolStr = encodeByteString $ fromBuiltin $ unCurrencySymbol curSymbol - tokenNameStr = decodeUtf8 $ fromBuiltin $ unTokenName name + tokenNameStr = decodeUtf8 $ hex $ fromBuiltin $ unTokenName name valueToCliArg :: Value -> Text valueToCliArg val = diff --git a/src/BotPlutusInterface/UtxoParser.hs b/src/BotPlutusInterface/UtxoParser.hs index 7d4fdcb8..c0ec6870 100644 --- a/src/BotPlutusInterface/UtxoParser.hs +++ b/src/BotPlutusInterface/UtxoParser.hs @@ -24,8 +24,9 @@ import Data.Attoparsec.Text ( takeWhile, (), ) +import Data.Hex (unhex) import Data.Text (Text) -import Data.Text.Encoding (encodeUtf8) +import Data.Text.Encoding (decodeUtf8, encodeUtf8) import Ledger (Address (addressCredential)) import Ledger.Ada qualified as Ada import Ledger.Scripts (DatumHash (..)) @@ -105,7 +106,7 @@ tokenNameParser = do where tokenName = do void $ char '.' - Value.tokenName . encodeUtf8 <$> takeWhile (/= ' ') + Value.tokenName . encodeUtf8 <$> decodeHex (takeWhile (/= ' ')) datumHashNoneParser :: Parser () datumHashNoneParser = "TxOutDatumNone" >> pure () @@ -122,6 +123,10 @@ decodeHash :: Parser Text -> Parser BuiltinByteString decodeHash rawParser = rawParser >>= \parsed -> either (const mzero) (pure . toBuiltin) (tryDecode parsed) +decodeHex :: Parser Text -> Parser Text +decodeHex rawParser = + rawParser >>= \parsed -> either (const mzero) pure ((fmap decodeUtf8 . unhex . encodeUtf8) parsed) + feeParser :: Parser Integer feeParser = choice [prefixed, suffixed] diff --git a/test/Spec/BotPlutusInterface/Contract.hs b/test/Spec/BotPlutusInterface/Contract.hs index d91cce5e..b9009e0c 100644 --- a/test/Spec/BotPlutusInterface/Contract.hs +++ b/test/Spec/BotPlutusInterface/Contract.hs @@ -321,8 +321,8 @@ sendTokens = do cardano-cli transaction build --alonzo-era --tx-in ${inTxId1}#0 --tx-in-collateral ${inTxId2}#1 - --tx-out ${addr1}+50 + 95 abcd1234.testToken - --tx-out ${addr2}+1000 + 5 abcd1234.testToken + --tx-out ${addr1}+50 + 95 abcd1234.74657374546F6B656E + --tx-out ${addr2}+1000 + 5 abcd1234.74657374546F6B656E --required-signer ./signing-keys/signing-key-${pkh1'}.skey --change-address ${addr1} --mainnet --protocol-params-file ./protocol.json --out-file ./txs/tx-${outTxId}.raw @@ -416,11 +416,11 @@ mintTokens = do cardano-cli transaction build-raw --alonzo-era --tx-in ${inTxId}#0 --tx-in-collateral ${inTxId}#0 - --tx-out ${addr2}+1000 + 5 ${curSymbol'}.testToken + --tx-out ${addr2}+1000 + 5 ${curSymbol'}.74657374546F6B656E --mint-script-file ./result-scripts/policy-${curSymbol'}.plutus --mint-redeemer-file ./result-scripts/redeemer-${redeemerHash}.json --mint-execution-units (297830,1100) - --mint 5 ${curSymbol'}.testToken + --mint 5 ${curSymbol'}.74657374546F6B656E --required-signer ./signing-keys/signing-key-${pkh1'}.skey --fee 0 --protocol-params-file ./protocol.json --out-file ./txs/tx-${outTxId}.raw @@ -432,10 +432,10 @@ mintTokens = do cardano-cli transaction build --alonzo-era --tx-in ${inTxId}#0 --tx-in-collateral ${inTxId}#0 - --tx-out ${addr2}+1000 + 5 ${curSymbol'}.testToken + --tx-out ${addr2}+1000 + 5 ${curSymbol'}.74657374546F6B656E --mint-script-file ./result-scripts/policy-${curSymbol'}.plutus --mint-redeemer-file ./result-scripts/redeemer-${redeemerHash}.json - --mint 5 ${curSymbol'}.testToken + --mint 5 ${curSymbol'}.74657374546F6B656E --required-signer ./signing-keys/signing-key-${pkh1'}.skey --change-address ${addr1} --mainnet --protocol-params-file ./protocol.json --out-file ./txs/tx-${outTxId}.raw diff --git a/test/Spec/BotPlutusInterface/UtxoParser.hs b/test/Spec/BotPlutusInterface/UtxoParser.hs index 5fcbc27f..8cbbec34 100644 --- a/test/Spec/BotPlutusInterface/UtxoParser.hs +++ b/test/Spec/BotPlutusInterface/UtxoParser.hs @@ -95,7 +95,7 @@ singleWithNativeTokens = do addr [text| TxHash TxIx Amount -------------------------------------------------------------------------------------- - 384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51 0 1234 lovelace + 2345 057910a2c93551443cb2c0544d1d65da3fb033deaa79452bd431ee08.testToken + 3456 7c6de14062b27c3dc3ba9f232ade32efe22fb8e2ae76b24f33212fdb.testToken2 + 4567 98a759ed2e20f6d83aa4d37d028d4bbb547a696fc345d54126188614 + TxOutDatumNone + 384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51 0 1234 lovelace + 2345 057910a2c93551443cb2c0544d1d65da3fb033deaa79452bd431ee08.74657374546F6B656E + 3456 7c6de14062b27c3dc3ba9f232ade32efe22fb8e2ae76b24f33212fdb.74657374546F6B656E32 + 4567 98a759ed2e20f6d83aa4d37d028d4bbb547a696fc345d54126188614 + TxOutDatumNone |] [ ( TxOutRef "384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51" 0 diff --git a/test/Spec/MockContract.hs b/test/Spec/MockContract.hs index 2f6e22fa..dab9c70a 100644 --- a/test/Spec/MockContract.hs +++ b/test/Spec/MockContract.hs @@ -61,6 +61,7 @@ import Cardano.Api ( deserialiseFromTextEnvelope, serialiseToTextEnvelope, ) +import Data.Hex (hex) import Cardano.Crypto.DSIGN (genKeyDSIGN) import Cardano.Crypto.Seed (mkSeedFromBytes) import Control.Concurrent.STM (newTVarIO) @@ -341,7 +342,7 @@ valueToUtxoOut = encodeByteString $ fromBuiltin $ Value.unCurrencySymbol curSymbol tokenName' = - decodeUtf8 $ + decodeUtf8 $ hex $ fromBuiltin $ Value.unTokenName tokenName in if Text.null tokenName' then curSymbol' From 3062ae7cc31daee966e1ca34ee8d796f37b3ac3b Mon Sep 17 00:00:00 2001 From: gege251 Date: Tue, 25 Jan 2022 22:20:53 +0100 Subject: [PATCH 2/4] Fix format --- test/Spec/MockContract.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/Spec/MockContract.hs b/test/Spec/MockContract.hs index dab9c70a..d24b9498 100644 --- a/test/Spec/MockContract.hs +++ b/test/Spec/MockContract.hs @@ -61,7 +61,6 @@ import Cardano.Api ( deserialiseFromTextEnvelope, serialiseToTextEnvelope, ) -import Data.Hex (hex) import Cardano.Crypto.DSIGN (genKeyDSIGN) import Cardano.Crypto.Seed (mkSeedFromBytes) import Control.Concurrent.STM (newTVarIO) @@ -78,6 +77,7 @@ import Data.Aeson.Extras (encodeByteString) import Data.ByteString qualified as ByteString import Data.Default (Default (def)) import Data.Either.Combinators (fromRight, mapLeft) +import Data.Hex (hex) import Data.Kind (Type) import Data.List (isPrefixOf) import Data.Map (Map) @@ -342,8 +342,9 @@ valueToUtxoOut = encodeByteString $ fromBuiltin $ Value.unCurrencySymbol curSymbol tokenName' = - decodeUtf8 $ hex $ - fromBuiltin $ Value.unTokenName tokenName + decodeUtf8 $ + hex $ + fromBuiltin $ Value.unTokenName tokenName in if Text.null tokenName' then curSymbol' else [text|${curSymbol'}.${tokenName'}|] From 710a7d4d1575289ac76c0910aa59a4fd8e6ff776 Mon Sep 17 00:00:00 2001 From: gege251 Date: Tue, 25 Jan 2022 22:26:37 +0100 Subject: [PATCH 3/4] Lint fix --- src/BotPlutusInterface/UtxoParser.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BotPlutusInterface/UtxoParser.hs b/src/BotPlutusInterface/UtxoParser.hs index c0ec6870..aaab2c0a 100644 --- a/src/BotPlutusInterface/UtxoParser.hs +++ b/src/BotPlutusInterface/UtxoParser.hs @@ -125,7 +125,7 @@ decodeHash rawParser = decodeHex :: Parser Text -> Parser Text decodeHex rawParser = - rawParser >>= \parsed -> either (const mzero) pure ((fmap decodeUtf8 . unhex . encodeUtf8) parsed) + rawParser >>= \parsed -> either (const mzero) (pure . decodeUtf8) ((unhex . encodeUtf8) parsed) feeParser :: Parser Integer feeParser = From f0ff153de1b7c6d5256e212f1e9f649a486c9249 Mon Sep 17 00:00:00 2001 From: gege251 Date: Tue, 25 Jan 2022 22:26:54 +0100 Subject: [PATCH 4/4] Test with lower case tokenname hex --- test/Spec/BotPlutusInterface/UtxoParser.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Spec/BotPlutusInterface/UtxoParser.hs b/test/Spec/BotPlutusInterface/UtxoParser.hs index 8cbbec34..e23270d3 100644 --- a/test/Spec/BotPlutusInterface/UtxoParser.hs +++ b/test/Spec/BotPlutusInterface/UtxoParser.hs @@ -95,7 +95,7 @@ singleWithNativeTokens = do addr [text| TxHash TxIx Amount -------------------------------------------------------------------------------------- - 384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51 0 1234 lovelace + 2345 057910a2c93551443cb2c0544d1d65da3fb033deaa79452bd431ee08.74657374546F6B656E + 3456 7c6de14062b27c3dc3ba9f232ade32efe22fb8e2ae76b24f33212fdb.74657374546F6B656E32 + 4567 98a759ed2e20f6d83aa4d37d028d4bbb547a696fc345d54126188614 + TxOutDatumNone + 384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51 0 1234 lovelace + 2345 057910a2c93551443cb2c0544d1d65da3fb033deaa79452bd431ee08.74657374546f6b656e + 3456 7c6de14062b27c3dc3ba9f232ade32efe22fb8e2ae76b24f33212fdb.74657374546f6b656e32 + 4567 98a759ed2e20f6d83aa4d37d028d4bbb547a696fc345d54126188614 + TxOutDatumNone |] [ ( TxOutRef "384de3f29396fdf687551e3f9e05bd400adcd277720c71f1d2b61f17f5183e51" 0