web3 0.3.2.1 → 0.3.3.0
raw patch · 3 files changed
+26/−14 lines, 3 filesdep −binarydep −http-client-tlsdep ~base
Dependencies removed: binary, http-client-tls
Dependency ranges changed: base
Files
src/Network/Ethereum/Web3/JsonRpc.hs view
@@ -16,10 +16,10 @@ import Network.Ethereum.Web3.Types -import Network.HTTP.Client (httpLbs, newManager, requestBody, responseBody,- method, requestHeaders, parseRequest,+import Network.HTTP.Client (httpLbs, newManager, defaultManagerSettings,+ requestBody, responseBody, method,+ requestHeaders, parseRequest, RequestBody(RequestBodyLBS))-import Network.HTTP.Client.TLS (tlsManagerSettings) import Control.Monad.Error.Class (throwError) import Data.ByteString.Lazy (ByteString) import Control.Monad.Trans.Reader (ask)@@ -41,7 +41,7 @@ where connection body = do conf <- ask liftIO $ do- manager <- newManager tlsManagerSettings+ manager <- newManager defaultManagerSettings request <- parseRequest (rpcUri conf) let request' = request { requestBody = RequestBodyLBS body
src/Network/Ethereum/Web3/TH.hs view
@@ -37,7 +37,8 @@ import Network.Ethereum.Web3.JsonAbi import Network.Ethereum.Web3.Types import Data.Text (Text, isPrefixOf)-import Data.Monoid (mconcat)+import Data.List (groupBy, sortBy)+import Data.Monoid (mconcat, (<>)) import Language.Haskell.TH.Quote import Language.Haskell.TH.Lib import Language.Haskell.TH@@ -136,7 +137,7 @@ genABIHeader :: [(Text, Name)] -> [ExpQ] genABIHeader vars = fmap go offsetVars where offsetVars :: [((Text, Name), Int)]- offsetVars = zip vars (fmap ((64 *) . (length vars +)) [0..])+ offsetVars = zip vars (fmap ((32 *) . (length vars +)) [0..]) go ((typ, v), o) | isDynType typ = [|toDataBuilder (o :: Int)|] | otherwise = [|toDataBuilder $(varE v)|] @@ -211,7 +212,7 @@ -- | Method delcarations maker mkFun :: Declaration -> Q [Dec]-mkFun fun@(DFunction name constant inputs outputs) =+mkFun fun@(DFunction name constant inputs outputs) = do sequence $ [ dataD' dataName (normalC dataName bangInput) derivingD , instanceD' dataName encodingT (funEncodigD dataName inputs mIdent)@@ -220,13 +221,26 @@ , funWrapper constant funName dataName inputs ] where mIdent = T.unpack (methodId fun)- funName = mkName (toLowerFirst (T.unpack name))- dataName = mkName (toUpperFirst (T.unpack name) ++ "Function")+ dataName = mkName (toUpperFirst (T.unpack $ name <> "Data"))+ funName = mkName (toLowerFirst (T.unpack name)) bangInput = fmap funBangType inputs derivingD = [mkName "Show", mkName "Eq", mkName "Ord"] encodingT = conT (mkName "ABIEncoding") methodT = conT (mkName "Method") +escape :: [Declaration] -> [Declaration]+escape = concat . escapeNames . groupBy fnEq . sortBy fnCompare+ where fnEq (DFunction n1 _ _ _) (DFunction n2 _ _ _) = n1 == n2+ fnEq _ _ = False+ fnCompare (DFunction n1 _ _ _) (DFunction n2 _ _ _) = compare n1 n2+ fnCompare _ _ = GT++escapeNames :: [[Declaration]] -> [[Declaration]]+escapeNames = fmap go+ where go (x : xs) = x : zipWith appendToName xs hats+ hats = [T.replicate n "'" | n <- [1..]]+ appendToName dfn addition = dfn { funName = funName dfn <> addition }+ -- | Declaration parser mkDecl :: Declaration -> Q [Dec] mkDecl x@(DFunction{}) = mkFun x@@ -237,7 +251,7 @@ quoteAbiDec :: String -> Q [Dec] quoteAbiDec abi_string = case decode abi_lbs of- Just (ContractABI abi) -> concat <$> mapM mkDecl abi+ Just (ContractABI abi) -> concat <$> mapM mkDecl (escape abi) _ -> fail "Unable to parse ABI!" where abi_lbs = LT.encodeUtf8 (LT.pack abi_string)
web3.cabal view
@@ -1,5 +1,5 @@ name: web3-version: 0.3.2.1+version: 0.3.3.0 synopsis: Ethereum API for Haskell description: Web3 is a Haskell client library for Ethereum homepage: https://github.com/airalab/hs-web3#readme@@ -36,17 +36,15 @@ other-modules: Network.Ethereum.Web3.JsonRpc , Network.Ethereum.Web3.Internal , Network.Ethereum.Web3.EncodingUtils- build-depends: base >= 4.5 && <4.10+ build-depends: base >4.8 && <4.10 , data-default-class , base16-bytestring , template-haskell- , http-client-tls , transformers , http-client , attoparsec , bytestring , cryptonite- , binary , vector , memory , aeson