The Haskell Ethereum API which implements the Generic JSON RPC.
stack install web3
{-# LANGUAGE OverloadedStrings #-}
module Main where
-- Basic imports
import Network.Ethereum.Web3
-- Eth API support
import qualified Network.Ethereum.Api.Eth as Eth
import Network.Ethereum.Api.Types
-- ENS support
import qualified Network.Ethereum.Ens as Ens
-- Lens to simple param setting
import Lens.Micro ((.~))
main :: IO ()
main = do
-- Use default provider on http://localhost:8545
ret <- runWeb3 $ do
-- Get address of default account
me <- head <$> Eth.accounts
-- Get balance of default account on latest block
myBalance <- Eth.getBalance me Latest
-- Get half of balance
let halfBalance = fromWei (myBalance / 2)
-- Use default account
withAccount () $ do
-- Get Ethereum address via ENS
alice <- Ens.resolve "alice.address.on.eth"
bob <- Ens.resolve "bob.address.on.eth"
-- Send transaction with value
withParam (value .~ halfBalance) $ do
-- Send transaction to alice account
withParam (to .~ alice) $ send ()
-- Send transaction to bob account
withParam (to .~ bob) $ send ()
-- Return sended value
return halfBalance
-- Web3 error handling
case ret of
Left e -> error $ show e
Right v -> print (v :: Ether) -- Print returned value in ethers
Read more in the documentation on ReadTheDocs.