Skip to content

Commit 0dacb23

Browse files
committed
[#360] [stbx-core] patch root tx decoder for missing 'previous' field
1 parent 807f74f commit 0dacb23

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

Diff for: stbx-core/src/Statebox/Core/Transaction/Codec.purs

+10-3
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ import Data.Argonaut.Encode.Class (encodeJson)
88
import Data.Argonaut.Decode (decodeJson, (.:), (.:?))
99
import Data.Argonaut.Decode.Class (decodeJArray)
1010
import Data.Lens (over)
11+
import Data.Maybe (fromMaybe, maybe)
1112
import Data.Profunctor.Choice (left)
1213
import Data.Either (Either(..))
1314
import Data.Either.Nested (type (\/))
14-
import Data.Maybe (maybe)
1515
import Data.NonEmpty (singleton)
1616
import Data.Traversable (traverse)
1717
import Foreign.Object (Object, lookup)
1818

1919
import Statebox.Core.Lenses (_wiring')
20-
import Statebox.Core.Transaction (Tx, InitialTx, WiringTx, FiringTx, TxSum(..), mapTx, evalTxSum)
20+
import Statebox.Core.Transaction (Tx, InitialTx, WiringTx, FiringTx, TxSum(..), mapTx, evalTxSum, uberRootHash)
2121
import Statebox.Core.Types (Net, Wiring, Firing)
2222
import Statebox.Core.Wiring as Wiring
2323
import Statebox.Core.Wiring (WiringRaw)
@@ -46,8 +46,15 @@ decodeTxFiringTx = decodeTxWith decodeFiringTx <=< decodeJson
4646

4747
--------------------------------------------------------------------------------
4848

49+
-- | A handcrafted decoder that ensures a field "previous": "z" is present in the result, even if "previous" is missing
50+
-- | from the JSON input. The "z" value is the `uberRootHash`.
4951
decodeInitialTx :: Json -> String \/ InitialTx
50-
decodeInitialTx = decodeJson
52+
decodeInitialTx = decodeJson >=> \x -> do
53+
root <- x .: "root"
54+
previousMaybe <- x .:? "previous"
55+
-- if we encounter JSON without a "previous" field in the root's "decoded" payload, insert it artificially
56+
let previous = fromMaybe uberRootHash previousMaybe
57+
pure { root, previous }
5158

5259
decodeWiringTx :: Json -> String \/ WiringTx
5360
decodeWiringTx = decodeJson >=> \x -> do

Diff for: stbx-core/test/Statebox/Core.purs

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ foreign import requireStbxJs_HACK :: String
1818
suite :: Spec Unit
1919
suite = do
2020
describe "Stbx" do
21+
it "should decode a root transaction from hex correctly" do
22+
let eitherDecodedString = Stbx.decodeToJsonString "0a0022200a1e47756172616e746565642d456e7472616e63652d546f6b656e2e74657374"
23+
eitherDecodedString `shouldEqual` Right "{\"root\":{\"message\":\"47756172616e746565642d456e7472616e63652d546f6b656e2e74657374\"}}"
24+
2125
it "should decode a wiring transaction from hex correctly" do
2226
let eitherDecodedString = Stbx.decodeToJsonString "0a04deadbeef1a2c0a150a01611000100110001001100010001a01781a0179120f0a017a10011801180222017322017418001800"
2327
eitherDecodedString `shouldEqual` Right """{"wiring":{"nets":[{"name":"a","partition":[0,1,0,1,0,0],"names":["x","y"]}],"diagrams":[{"name":"z","width":1,"pixels":[1,2],"names":["s","t"]}],"labels":[0,0]},"previous":"z6h8cQN"}"""

Diff for: stbx-rest-integration/test/Main.purs

+1-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ postExampleTransactionsSpec =
7070
getExampleTransactionsSpec :: Spec Unit
7171
getExampleTransactionsSpec =
7272
describe "Statebox transaction API HTTP service" do
73-
pending "TODO: GETting root transaction fails"
74-
-- requestTransactionSpec "root" "zFsGM27VMNWZne1SSkWnDQTzr6TdjmsKpbxGkJKKaEC8e"
73+
requestTransactionSpec "root" "zFsGM27VMNWZne1SSkWnDQTzr6TdjmsKpbxGkJKKaEC8e"
7574
requestTransactionSpec "wiring" "zFsGM27o59f9Lu8bWjNHBG7Wbq5iftQA6uDt14zRdjCrH"
7675
requestTransactionSpec "firing 0 (execution)" "zFsGM26E6xAuYMXox2zMGUChk3HmbEAMGXBiWG3UL7KF5"
7776
requestTransactionSpec "firing 1" "zFsGM28DqZKjjGbfCEsjsXTj8xJAqWaBXpDSc1CqR6ihi"

0 commit comments

Comments
 (0)