web3 0.5.4.0 → 0.5.5.0
raw patch · 4 files changed
+36/−29 lines, 4 filesdep ~aesondep ~cryptonitedep ~http-client
Dependency ranges changed: aeson, cryptonite, http-client, http-client-tls, memory, text, vector, web3
Files
- src/Network/Ethereum/Web3/Contract.hs +11/−7
- src/Network/Ethereum/Web3/TH.hs +13/−10
- src/Network/Ethereum/Web3/Types.hs +1/−1
- web3.cabal +11/−11
src/Network/Ethereum/Web3/Contract.hs view
@@ -43,7 +43,8 @@ import Control.Exception (throwIO) import Data.Text.Lazy (toStrict) import qualified Data.Text as T-import Control.Monad (when)+import Control.Monad (when, forM)+import Control.Monad.Trans.Reader (ReaderT(..)) import Data.Monoid ((<>)) import Network.Ethereum.Web3.Provider@@ -69,7 +70,7 @@ event :: Provider p => Address -- ^ Contract address- -> (a -> Web3 p EventAction)+ -> (a -> ReaderT Change (Web3 p) EventAction) -- ^ 'Event' handler -> Web3 p ThreadId -- ^ 'Web3' wrapped event handler spawn ident@@ -77,7 +78,7 @@ _event :: (Provider p, Event a) => Address- -> (a -> Web3 p EventAction)+ -> (a -> ReaderT Change (Web3 p) EventAction) -> Web3 p ThreadId _event a f = do fid <- let ftyp = snd $ let x = undefined :: Event a => a@@ -87,16 +88,19 @@ forkWeb3 $ let loop = do liftIO (threadDelay 1000000) changes <- eth_getFilterChanges fid- acts <- mapM f (mapMaybe parseChange changes)+ acts <- forM (mapMaybe pairChange changes) $ \(changeEvent, changeWithMeta) ->+ runReaderT (f changeEvent) changeWithMeta when (TerminateEvent `notElem` acts) loop in do loop eth_uninstallFilter fid return () where prepareTopics = fmap (T.drop 2) . drop 1- parseChange c = fromData $- T.append (T.concat (prepareTopics $ changeTopics c))- (T.drop 2 $ changeData c)+ pairChange changeWithMeta = do+ changeEvent <- fromData $+ T.append (T.concat (prepareTopics $ changeTopics changeWithMeta))+ (T.drop 2 $ changeData changeWithMeta)+ return (changeEvent, changeWithMeta) -- | Contract method caller class ABIEncoding a => Method a where
src/Network/Ethereum/Web3/TH.hs view
@@ -169,15 +169,17 @@ [conP funName $ fmap varP vars] [|ident <> toDataBuilder $(tupE $ fmap varE vars)|] -eventFilterD :: String -> [DecQ]-eventFilterD topic0 = let addr = mkName "a" in- [ funD' (mkName "eventFilter") [wildP, varP addr]- [|Filter (Just $(varE addr))- (Just [Just topic0, Nothing])- Nothing- Nothing- |]- ]+eventFilterD :: String -> Int -> [DecQ]+eventFilterD topic0 n =+ let addr = mkName "a"+ indexedArgs = replicate n Nothing :: [Maybe String]+ in [ funD' (mkName "eventFilter") [wildP, varP addr]+ [|Filter (Just $(varE addr))+ (Just $ [Just topic0] <> indexedArgs)+ Nothing+ Nothing+ |]+ ] funWrapper :: Bool -- ^ Is constant?@@ -227,13 +229,14 @@ mkEvent eve@(DEvent name inputs _) = sequence [ dataD' eventName eventFields derivingD , instanceD' eventName encodingT (eventEncodigD eventName inputs)- , instanceD' eventName eventT (eventFilterD (T.unpack $ eventId eve))+ , instanceD' eventName eventT (eventFilterD (T.unpack $ eventId eve) indexedFieldsCount) ] where eventName = mkName (toUpperFirst (T.unpack name)) derivingD = [mkName "Show", mkName "Eq", mkName "Ord"] eventFields = normalC eventName (eventBangType <$> inputs) encodingT = conT (mkName "ABIEncoding") eventT = conT (mkName "Event")+ indexedFieldsCount = length . filter eveArgIndexed $ inputs -- | Method delcarations maker mkFun :: Declaration -> Q [Dec]
src/Network/Ethereum/Web3/Types.hs view
@@ -65,7 +65,7 @@ { fieldLabelModifier = toLowerFirst . drop 6 }) ''Filter) -- | Event filder ident-newtype FilterId = FilterId Int+newtype FilterId = FilterId Integer deriving (Show, Eq, Ord) instance FromJSON FilterId where
web3.cabal view
@@ -1,5 +1,5 @@ name: web3-version: 0.5.4.0+version: 0.5.5.0 cabal-version: >=1.10 build-type: Simple license: BSD3@@ -38,16 +38,16 @@ base >4.8 && <4.11, base16-bytestring >=0.1.1.6 && <0.2, template-haskell >=2.11.1.0 && <2.12,- http-client-tls >=0.3.3.1 && <0.4,+ http-client-tls >=0.3.5.1 && <0.4, transformers >=0.5.2.0 && <0.6,- http-client >=0.5.5 && <0.6,+ http-client >=0.5.7.0 && <0.6, attoparsec >=0.13.1.0 && <0.14, bytestring >=0.10.8.1 && <0.11,- cryptonite ==0.21.*,- vector >=0.11.0.0 && <0.12,- memory >=0.14.1 && <0.15,- aeson >=1.0.2.1 && <1.1,- text >=1.2.2.1 && <1.3+ cryptonite ==0.23.*,+ vector >=0.12.0.1 && <0.13,+ memory >=0.14.6 && <0.15,+ aeson >=1.1.2.0 && <1.2,+ text >=1.2.2.2 && <1.3 default-language: Haskell2010 default-extensions: OverloadedStrings hs-source-dirs: src@@ -62,9 +62,9 @@ main-is: Spec.hs build-depends: base >=4.9.1.0 && <4.10,- memory >=0.14.1 && <0.15,- text >=1.2.2.1 && <1.3,- web3 >=0.5.4.0 && <0.6+ memory >=0.14.6 && <0.15,+ text >=1.2.2.2 && <1.3,+ web3 default-language: Haskell2010 default-extensions: OverloadedStrings hs-source-dirs: test