Skip to content

Commit

Permalink
Try #2142:
Browse files Browse the repository at this point in the history
  • Loading branch information
iohk-bors[bot] committed Sep 17, 2020
2 parents 29a67fe + 323fb02 commit ab8fcd3
Show file tree
Hide file tree
Showing 64 changed files with 1,461 additions and 2,674 deletions.
3 changes: 2 additions & 1 deletion README.md
Expand Up @@ -70,7 +70,8 @@ See **Installation Instructions** for each available [release](https://github.co
>
> | cardano-wallet | jörmungandr (compatible versions) | cardano-node (compatible versions)
> | --- | --- | ---
> | `master` branch | [v0.9.0](https://github.com/input-output-hk/jormungandr/releases/tag/v0.9.0) | [1.19.1](https://github.com/input-output-hk/cardano-node/releases/tag/1.19.1)
> | `master` branch | [v0.9.0](https://github.com/input-output-hk/jormungandr/releases/tag/v0.9.0) | [1.20.0](https://github.com/input-output-hk/cardano-node/releases/tag/1.20.0)
> | [v2020-09-11](https://github.com/input-output-hk/cardano-wallet/releases/tag/v2020-09-11)`master` branch | [v0.9.0](https://github.com/input-output-hk/jormungandr/releases/tag/v0.9.0) | [1.19.1](https://github.com/input-output-hk/cardano-node/releases/tag/1.19.1)
> | [v2020-08-03](https://github.com/input-output-hk/cardano-wallet/releases/tag/v2020-08-03) | [v0.9.0](https://github.com/input-output-hk/jormungandr/releases/tag/v0.9.0) | [1.18.0](https://github.com/input-output-hk/cardano-node/releases/tag/1.18.0)
> | [v2020-07-28](https://github.com/input-output-hk/cardano-wallet/releases/tag/v2020-07-28) | [v0.9.0](https://github.com/input-output-hk/jormungandr/releases/tag/v0.9.0) | [1.18.0](https://github.com/input-output-hk/cardano-node/releases/tag/1.18.0)
> | [v2020-07-06](https://github.com/input-output-hk/cardano-wallet/releases/tag/v2020-07-06) | [v0.9.0](https://github.com/input-output-hk/jormungandr/releases/tag/v0.9.0) | [1.14.2](https://github.com/input-output-hk/cardano-node/releases/tag/1.14.2)
Expand Down
Expand Up @@ -346,7 +346,7 @@ errMsg400WronglyEncodedTxPayload =

errMsg400TxMetadataStringTooLong :: String
errMsg400TxMetadataStringTooLong =
"Error in $.metadata: JSON string or bytestring is longer than 64 bytes"
"Text string metadata value must consist of at most 64 UTF8 bytes"

errMsg400TxTooLarge :: String
errMsg400TxTooLarge =
Expand Down
Expand Up @@ -43,6 +43,7 @@ import Cardano.Wallet.Primitive.Types
, Hash (..)
, SortOrder (..)
, TxMetadata (..)
, TxMetadataValue (..)
, TxStatus (..)
, WalletId
)
Expand Down Expand Up @@ -144,7 +145,6 @@ import qualified Data.ByteString as BS
import qualified Data.Map as Map
import qualified Data.Text as T
import qualified Network.HTTP.Types.Status as HTTP
import qualified Shelley.Spec.Ledger.MetaData as MD

data TestCase a = TestCase
{ query :: T.Text
Expand Down Expand Up @@ -580,10 +580,8 @@ spec = describe "SHELLEY_TRANSACTIONS" $ do

basePayload <- mkTxPayload ctx wb amt fixturePassphrase

let txMeta = [json|{
"1": "hello"
}|]
let expected = TxMetadata (MD.MetaData (Map.singleton 1 (MD.S "hello")))
let txMeta = [json|{ "1": { "string": "hello" } }|]
let expected = TxMetadata $ Map.singleton 1 $ TxMetaText "hello"
let payload = addTxMetadata txMeta basePayload

ra <- request @(ApiTransaction n) ctx
Expand Down Expand Up @@ -653,7 +651,7 @@ spec = describe "SHELLEY_TRANSACTIONS" $ do

basePayload <- mkTxPayload ctx wb amt fixturePassphrase

let txMeta = Aeson.object ["1" .= T.replicate 65 "a"]
let txMeta = [json|{ "1": { "string": #{T.replicate 65 "a"} } }|]
let payload = addTxMetadata txMeta basePayload

r <- request @(ApiTransaction n) ctx
Expand All @@ -671,8 +669,9 @@ spec = describe "SHELLEY_TRANSACTIONS" $ do
-- This will encode to at least 8k of CBOR. The max tx size for the
-- integration tests cluster is 4k.
let txMeta = Aeson.object
[ (toText @Int i, Aeson.String (T.replicate 64 "a"))
[ (toText @Int i, bytes)
| i <- [0..127] ]
bytes = [json|{ "bytes": #{T.replicate 64 "a"} }|]
let payload = addTxMetadata txMeta basePayload

r <- request @(ApiTransaction n) ctx
Expand All @@ -687,7 +686,7 @@ spec = describe "SHELLEY_TRANSACTIONS" $ do

payload <- mkTxPayload ctx wb amt fixturePassphrase

let txMeta = [json|{ "1": "hello" }|]
let txMeta = [json|{ "1": { "string": "hello" } }|]
let payloadWithMetadata = addTxMetadata txMeta payload

ra <- request @ApiFee ctx
Expand Down Expand Up @@ -715,7 +714,7 @@ spec = describe "SHELLEY_TRANSACTIONS" $ do

basePayload <- mkTxPayload ctx wb amt fixturePassphrase

let txMeta = Aeson.object ["1" .= T.replicate 65 "a"]
let txMeta = [json|{ "1": { "string": #{T.replicate 65 "a"} } }|]
let payload = addTxMetadata txMeta basePayload

r <- request @ApiFee ctx
Expand All @@ -733,8 +732,9 @@ spec = describe "SHELLEY_TRANSACTIONS" $ do
-- This will encode to at least 8k of CBOR. The max tx size for the
-- integration tests cluster is 4k.
let txMeta = Aeson.object
[ (toText @Int i, Aeson.String (T.replicate 64 "a"))
[ (toText @Int i, bytes)
| i <- [0..127] ]
bytes = [json|{ "bytes": #{T.replicate 64 "a"} }|]
let payload = addTxMetadata txMeta basePayload
print payload
r <- request @ApiFee ctx
Expand Down
12 changes: 7 additions & 5 deletions lib/core/src/Cardano/Wallet/Api/Types.hs
Expand Up @@ -130,7 +130,9 @@ import Prelude
import Cardano.Address.Derivation
( XPrv, XPub, xpubToBytes )
import Cardano.Api.MetaData
( jsonFromMetadata, jsonToMetadata, renderMetaDataJsonConversionError )
( TxMetadataJsonSchema (..), metadataFromJson, metadataToJson )
import Cardano.Api.Typed
( displayError )
import Cardano.Mnemonic
( MkSomeMnemonic (..)
, MkSomeMnemonicError (..)
Expand Down Expand Up @@ -1253,12 +1255,12 @@ instance
toJSON = genericToJSON defaultRecordTypeOptions

instance FromJSON (ApiT TxMetadata) where
parseJSON = fmap ApiT . either (fail . prettyError) pure . jsonToMetadata
where
prettyError = T.unpack . renderMetaDataJsonConversionError
parseJSON = fmap ApiT
. either (fail . displayError) pure
. metadataFromJson TxMetadataJsonDetailedSchema

instance ToJSON (ApiT TxMetadata) where
toJSON = jsonFromMetadata . getApiT
toJSON = metadataToJson TxMetadataJsonDetailedSchema . getApiT

instance FromJSON ApiTxMetadata where
parseJSON Aeson.Null = pure $ ApiTxMetadata Nothing
Expand Down
8 changes: 5 additions & 3 deletions lib/core/src/Cardano/Wallet/DB/Sqlite/Types.hs
Expand Up @@ -21,7 +21,9 @@ module Cardano.Wallet.DB.Sqlite.Types where
import Prelude

import Cardano.Api.MetaData
( jsonFromMetadata, jsonToMetadata )
( TxMetadataJsonSchema (..), metadataFromJson, metadataToJson )
import Cardano.Api.Typed
( displayError )
import Cardano.Slotting.Slot
( SlotNo (..) )
import Cardano.Wallet.Primitive.AddressDerivation
Expand Down Expand Up @@ -351,9 +353,9 @@ instance PersistField TxMetadata where
decodeUtf8 .
BL.toStrict .
Aeson.encode .
jsonFromMetadata
metadataToJson TxMetadataJsonDetailedSchema
fromPersistValue =
(left (T.pack . show) . jsonToMetadata) <=<
(left (T.pack . displayError) . metadataFromJson TxMetadataJsonDetailedSchema) <=<
(left T.pack . Aeson.eitherDecode . BL.fromStrict . encodeUtf8) <=<
fromPersistValue

Expand Down
27 changes: 14 additions & 13 deletions lib/core/src/Cardano/Wallet/Orphans.hs
Expand Up @@ -13,7 +13,7 @@ module Cardano.Wallet.Orphans where
import Prelude

import Cardano.Api.Typed
( TxMetadata (..) )
( TxMetadata (..), TxMetadataValue (..) )
import Cardano.Slotting.Slot
( SlotNo (..) )
import Control.DeepSeq
Expand All @@ -22,8 +22,6 @@ import Data.Ord
( comparing )
import Fmt
( Buildable (..), blockListF, hexF, nameF, unlinesF )
import Shelley.Spec.Ledger.MetaData
( MetaData (..), MetaDatum (..) )

import qualified Data.Map as Map

Expand All @@ -36,22 +34,25 @@ instance Ord TxMetadata where
compare = comparing show

instance Buildable TxMetadata where
build (TxMetadata (MetaData m)) =
build (TxMetadata m) =
unlinesF (map buildElem (Map.toList m))
where
buildElem (n, d) = nameF ("element " <> build n) $ buildDatum d
buildDatum = \case
Map as -> blockListF $ mconcat
TxMetaMap as -> blockListF $ mconcat
[ [ nameF "key" (buildDatum k), nameF "val" (buildDatum v) ]
| (k, v) <- as ]
List xs -> nameF "list" $ blockListF (map buildDatum xs)
I i -> build i
B bs -> hexF bs
S s -> build (show s)

instance NFData MetaDatum

instance NFData MetaData
TxMetaList xs -> nameF "list" $ blockListF (map buildDatum xs)
TxMetaNumber i -> build i
TxMetaBytes bs -> hexF bs
TxMetaText s -> build (show s)

instance NFData TxMetadata where
rnf (TxMetadata md) = rnf md

instance NFData TxMetadataValue where
rnf (TxMetaMap x) = rnf x
rnf (TxMetaList x) = rnf x
rnf (TxMetaNumber x) = rnf x
rnf (TxMetaBytes x) = rnf x
rnf (TxMetaText x) = rnf x
6 changes: 3 additions & 3 deletions lib/core/src/Cardano/Wallet/Primitive/Types.hs
Expand Up @@ -42,6 +42,7 @@ module Cardano.Wallet.Primitive.Types
, TxOut(..)
, TxMeta(..)
, TxMetadata(..)
, TxMetadataValue(..)
, Direction(..)
, TxStatus(..)
, SealedTx (..)
Expand Down Expand Up @@ -177,7 +178,7 @@ module Cardano.Wallet.Primitive.Types
import Prelude

import Cardano.Api.Typed
( TxMetadata (..) )
( TxMetadata (..), TxMetadataValue (..) )
import Cardano.Slotting.Slot
( SlotNo (..) )
import Cardano.Wallet.Orphans
Expand Down Expand Up @@ -279,7 +280,6 @@ import qualified Data.Set as Set
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy.Builder as Builder
import qualified Shelley.Spec.Ledger.MetaData as MD

{-------------------------------------------------------------------------------
Wallet Metadata
Expand Down Expand Up @@ -1020,7 +1020,7 @@ fromTransactionInfo info = Tx

-- | Test whether the given metadata map is empty.
txMetadataIsNull :: TxMetadata -> Bool
txMetadataIsNull (TxMetadata (MD.MetaData md)) = Map.null md
txMetadataIsNull (TxMetadata md) = Map.null md

-- | Drop time-specific information
toTxHistory :: TransactionInfo -> (Tx, TxMeta)
Expand Down

0 comments on commit ab8fcd3

Please sign in to comment.