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..aaab2c0a 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 . 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..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.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..d24b9498 100644 --- a/test/Spec/MockContract.hs +++ b/test/Spec/MockContract.hs @@ -77,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,7 +343,8 @@ valueToUtxoOut = fromBuiltin $ Value.unCurrencySymbol curSymbol tokenName' = decodeUtf8 $ - fromBuiltin $ Value.unTokenName tokenName + hex $ + fromBuiltin $ Value.unTokenName tokenName in if Text.null tokenName' then curSymbol' else [text|${curSymbol'}.${tokenName'}|]