web3-0.7.0.0: unit/Network/Ethereum/Web3/Test/EventSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Network.Ethereum.Web3.Test.EventSpec where
import Data.Tagged (Tagged)
import Generics.SOP (Generic)
import qualified GHC.Generics as GHC (Generic)
import Test.Hspec (Spec, describe, it,
shouldBe)
import Network.Ethereum.ABI.Class (ABIGet)
import Network.Ethereum.ABI.Event (IndexedEvent (..),
decodeEvent)
import Network.Ethereum.ABI.Prim.Address (Address)
import Network.Ethereum.ABI.Prim.Bytes ()
import Network.Ethereum.ABI.Prim.Int (UIntN)
import Network.Ethereum.ABI.Prim.Tagged ()
import Network.Ethereum.Web3.Types (Change (..))
spec :: Spec
spec = eventTest
eventTest :: Spec
eventTest =
describe "event tests" $ do
it "can decode simple storage" $
let change = Change { changeLogIndex = "0x2"
, changeTransactionIndex = "0x2"
, changeTransactionHash = "0xe8cac6af0ceb3cecbcb2a5639361fc9811b1aa753672cf7c7e8b528df53e0e94"
, changeBlockHash = "0x0c7e1701858232ac210e3bcc8ab3b33cc6b08025692b22abb39059dc41f6a76e"
, changeBlockNumber = 0
, changeAddress = "0x617e5941507aab5d2d8bcb56cb8c6ce2eeb16b21"
, changeData = "0x000000000000000000000000000000000000000000000000000000000000000a"
, changeTopics = ["0xa32bc18230dd172221ac5c4821a5f1f1a831f27b1396d244cdd891c58f132435"]
}
in decodeEvent change `shouldBe` Right (NewCount 10)
it "can decode erc20" $
let ercchange = Change { changeLogIndex = "0x2"
, changeTransactionIndex = "0x2"
, changeTransactionHash = "0xe8cac6af0ceb3cecbcb2a5639361fc9811b1aa753672cf7c7e8b528df53e0e94"
, changeBlockHash = "0x0c7e1701858232ac210e3bcc8ab3b33cc6b08025692b22abb39059dc41f6a76e"
, changeBlockNumber = 0
, changeAddress = "0x617e5941507aab5d2d8bcb56cb8c6ce2eeb16b21"
, changeData = "0x000000000000000000000000000000000000000000000000000000000000000a"
, changeTopics = [ "0xb32bc18230dd172221ac5c4821a5f1f1a831f27b1396d244cdd891c58f132435"
, "0x0000000000000000000000000000000000000000000000000000000000000001"
, "0x0000000000000000000000000000000000000000000000000000000000000002"
]
}
in decodeEvent ercchange `shouldBe` Right (Transfer "0x0000000000000000000000000000000000000001" 10 "0x0000000000000000000000000000000000000002")
-- SimpleStorage Event Types
data NewCount = NewCount (UIntN 256) deriving (Eq, Show, GHC.Generic)
instance Generic NewCount
data NewCountIndexed = NewCountIndexed deriving (Eq, Show, GHC.Generic)
instance Generic NewCountIndexed
data NewCountNonIndexed = NewCountNonIndexed (Tagged 1 (UIntN 256)) deriving (Eq, Show, GHC.Generic)
instance Generic NewCountNonIndexed
instance IndexedEvent NewCountIndexed NewCountNonIndexed NewCount where
isAnonymous = const False
-- WeirdERC20 Event Types (Transfer type wrong order for testing purposes)
data Transfer = Transfer Address (UIntN 256) Address deriving (Eq, Show, GHC.Generic)
instance Generic Transfer
data TransferIndexed = TransferIndexed (Tagged 1 Address) (Tagged 3 Address) deriving (Eq, Show, GHC.Generic)
instance Generic TransferIndexed
data TransferNonIndexed = TransferNonIndexed (Tagged 2 (UIntN 256)) deriving (Eq, Show, GHC.Generic)
instance Generic TransferNonIndexed
instance IndexedEvent TransferIndexed TransferNonIndexed Transfer where
isAnonymous = const False