packages feed

web3-ethereum-1.0.1.0: tests/Network/Ethereum/Test/TransactionSpec.hs

{-# LANGUAGE OverloadedStrings #-}

-- |
-- Module      :  Network.Ethereum.Test.TransactionSpec
-- Copyright   :  Aleksandr Krupenkin 2016-2024
-- License     :  Apache-2.0
--
-- Maintainer  :  mail@akru.me
-- Stability   :  experimental
-- Portability :  unportable
--

module Network.Ethereum.Test.TransactionSpec where

import           Crypto.Ecdsa.Utils           (importKey)
import           Crypto.Ethereum.Signature    (signTransaction)
import           Data.ByteArray.HexString     (HexString)
import           Network.Ethereum.Api.Types   (Call (..))
import           Network.Ethereum.Transaction (encodeTransaction)
import           Test.Hspec

spec :: Spec
spec = parallel $
    describe "Ethereum raw transactions" $
        it "can create and sign valid raw transaction" $ do
            -- using same example as in this blog post:
            -- https://medium.com/@codetractio/walkthrough-of-an-ethereum-improvement-proposal-eip-6fda3966d171
            let testCall = Call Nothing
                                (Just "0x3535353535353535353535353535353535353535")
                                (Just 21000)
                                (Just 20000000000)
                                (Just 1000000000000000000)
                                Nothing
                                (Just 9)
                key = "4646464646464646464646464646464646464646464646464646464646464646" :: HexString
                correctSignedTx = "f86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83"
            signTransaction (encodeTransaction testCall 1) (importKey key) `shouldBe` (correctSignedTx :: HexString)