-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Ethereum API for Haskell -- -- Web3 is a Haskell client library for Ethereum @package web3 @version 0.7.2.0 -- | Extra string manipulation functions. module Data.String.Extra -- | Lower first char of string toLowerFirst :: String -> String -- | Upper first char of string toUpperFirst :: String -> String -- | Ethereum ABI encoding base type classes. module Network.Ethereum.ABI.Class -- | A class for abi encoding datatype descriptions class ABIType a isDynamic :: ABIType a => Proxy a -> Bool -- | A class for encoding datatypes to their abi encoding -- -- If your compiler has support for the DeriveGeneric and -- DefaultSignatures language extensions (ghc >= -- 7.2.1), the abiPut method will have default generic -- implementations. -- -- To use this option, simply add a deriving Generic -- clause to your datatype and declare a ABIPut instance for it -- without giving a definition for abiPut. class ABIType a => ABIPut a abiPut :: ABIPut a => Putter a abiPut :: (ABIPut a, Generic a, Rep a ~ rep, GenericABIPut rep) => Putter a -- | A class for decoding datatypes from their abi encoding -- -- If your compiler has support for the DeriveGeneric and -- DefaultSignatures language extensions (ghc >= -- 7.2.1), the abiGet method will have default generic -- implementations. -- -- To use this option, simply add a deriving Generic -- clause to your datatype and declare a ABIGet instance for it -- without giving a definition for abiGet. class ABIType a => ABIGet a abiGet :: ABIGet a => Get a abiGet :: (ABIGet a, Generic a, Rep a ~ rep, GenericABIGet rep) => Get a -- | A class for encoding generically composed datatypes to their abi -- encoding class GenericABIPut a gAbiPut :: GenericABIPut a => Putter a -- | A class for decoding generically composed datatypes from their abi -- encoding class GenericABIGet a gAbiGet :: GenericABIGet a => Get a -- | This module is internal, the purpose is to define helper classes and -- types to assist in event decoding. The user of this library should -- have no need to use this directly in application code. module Network.Ethereum.ABI.Event.Internal data HList :: [Type] -> Type [HNil] :: HList '[] [:<] :: a -> HList as -> HList (a : as) -- | Generic representation to HList representation class HListRep a xs | a -> xs, a -> xs toHList :: HListRep a xs => a -> HList xs fromHList :: HListRep a xs => HList xs -> a -- | Sort a Tagged HList class Sort (xs :: [Type]) where { type family Sort' xs :: [Type]; } sort :: Sort xs => HList xs -> HList (Sort' xs) class Insert (x :: Type) (xs :: [Type]) where { type family Insert' x xs :: [Type]; } insert :: Insert x xs => x -> HList xs -> HList (Insert' x xs) class InsertCmp (b :: Ordering) (x :: Type) (y :: Type) (ys :: [Type]) where { type family InsertCmp' b x y ys :: [Type]; } insertCmp :: InsertCmp b x y ys => Proxy (b :: Ordering) -> x -> y -> HList ys -> HList (InsertCmp' b x y ys) -- | Unwrap all the Tagged items in an HList class UnTag t where { type family UnTag' t :: [Type]; } unTag :: UnTag t => HList t -> HList (UnTag' t) class HListMerge (as :: [Type]) (bs :: [Type]) where { type family Concat as bs :: [Type]; } mergeHList :: HListMerge as bs => HList as -> HList bs -> HList (Concat as bs) class HListMergeSort as bs where { type family MergeSort' as bs :: [Type]; } mergeSortHList :: HListMergeSort as bs => HList as -> HList bs -> HList (MergeSort' as bs) class MergeIndexedArguments as bs where { type family MergeIndexedArguments' as bs :: [Type]; } mergeIndexedArguments :: MergeIndexedArguments as bs => HList as -> HList bs -> HList (MergeIndexedArguments' as bs) instance (Network.Ethereum.ABI.Event.Internal.HListMergeSort as bs, Network.Ethereum.ABI.Event.Internal.MergeSort' as bs ~ cs, Network.Ethereum.ABI.Event.Internal.UnTag cs, Network.Ethereum.ABI.Event.Internal.UnTag cs' ~ ds) => Network.Ethereum.ABI.Event.Internal.MergeIndexedArguments as bs instance (Network.Ethereum.ABI.Event.Internal.HListMerge as bs, Network.Ethereum.ABI.Event.Internal.Concat as bs ~ cs, Network.Ethereum.ABI.Event.Internal.Sort cs, Network.Ethereum.ABI.Event.Internal.Sort' cs ~ cs') => Network.Ethereum.ABI.Event.Internal.HListMergeSort as bs instance Network.Ethereum.ABI.Event.Internal.HListMerge '[] bs instance Network.Ethereum.ABI.Event.Internal.HListMerge as bs => Network.Ethereum.ABI.Event.Internal.HListMerge (a : as) bs instance Network.Ethereum.ABI.Event.Internal.UnTag '[] instance forall k (ts :: [*]) (n :: k) a. Network.Ethereum.ABI.Event.Internal.UnTag ts => Network.Ethereum.ABI.Event.Internal.UnTag (Data.Tagged.Tagged n a : ts) instance Network.Ethereum.ABI.Event.Internal.InsertCmp (GHC.TypeNats.CmpNat n m) (Data.Tagged.Tagged n x) (Data.Tagged.Tagged m y) ys => Network.Ethereum.ABI.Event.Internal.Insert (Data.Tagged.Tagged n x) (Data.Tagged.Tagged m y : ys) instance Network.Ethereum.ABI.Event.Internal.InsertCmp 'GHC.Types.LT x y ys instance Network.Ethereum.ABI.Event.Internal.Insert x ys => Network.Ethereum.ABI.Event.Internal.InsertCmp 'GHC.Types.GT x y ys instance (Network.Ethereum.ABI.Event.Internal.Sort xs, Network.Ethereum.ABI.Event.Internal.Insert x (Network.Ethereum.ABI.Event.Internal.Sort' xs)) => Network.Ethereum.ABI.Event.Internal.Sort (x : xs) instance Network.Ethereum.ABI.Event.Internal.Insert x '[] instance Network.Ethereum.ABI.Event.Internal.Sort '[] instance Network.Ethereum.ABI.Event.Internal.HListRep (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) '[] instance Network.Ethereum.ABI.Event.Internal.HListRep (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I as) as => Network.Ethereum.ABI.Event.Internal.HListRep (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : as)) (a : as) instance forall k (f :: k -> *) (as' :: [k]) (as :: [*]). Network.Ethereum.ABI.Event.Internal.HListRep (Generics.SOP.NP.NP f as') as => Network.Ethereum.ABI.Event.Internal.HListRep (Generics.SOP.NS.SOP f '[as']) as -- | JSON encoded contract ABI parsers. module Network.Ethereum.ABI.Json -- | Contract ABI is a list of method / event declarations newtype ContractABI ContractABI :: [Declaration] -> ContractABI [unABI] :: ContractABI -> [Declaration] -- | Elementrary contract interface item data Declaration -- | Contract constructor DConstructor :: [FunctionArg] -> Declaration [conInputs] :: Declaration -> [FunctionArg] -- | Method DFunction :: Text -> Bool -> [FunctionArg] -> Maybe [FunctionArg] -> Declaration [funName] :: Declaration -> Text [funConstant] :: Declaration -> Bool [funInputs] :: Declaration -> [FunctionArg] [funOutputs] :: Declaration -> Maybe [FunctionArg] -- | Event DEvent :: Text -> [EventArg] -> Bool -> Declaration [eveName] :: Declaration -> Text [eveInputs] :: Declaration -> [EventArg] [eveAnonymous] :: Declaration -> Bool -- | Fallback function DFallback :: Bool -> Declaration [falPayable] :: Declaration -> Bool -- | Method argument data FunctionArg FunctionArg :: Text -> Text -> FunctionArg -- | Argument name [funArgName] :: FunctionArg -> Text -- | Argument type [funArgType] :: FunctionArg -> Text -- | Event argument data EventArg EventArg :: Text -> Text -> Bool -> EventArg -- | Argument name [eveArgName] :: EventArg -> Text -- | Argument type [eveArgType] :: EventArg -> Text -- | Argument is indexed (e.g. placed on topics of event) [eveArgIndexed] :: EventArg -> Bool -- | Take a signature by given decl, e.g. foo(uint,string) signature :: Declaration -> Text -- | Generate method selector by given method Delcaration methodId :: Declaration -> Text -- | Generate event topic0 hash by givent event -- Delcaration eventId :: Declaration -> Text -- | Solidity types and parsers data SolidityType SolidityBool :: SolidityType SolidityAddress :: SolidityType SolidityUint :: Int -> SolidityType SolidityInt :: Int -> SolidityType SolidityString :: SolidityType SolidityBytesN :: Int -> SolidityType SolidityBytes :: SolidityType SolidityVector :: [Int] -> SolidityType -> SolidityType SolidityArray :: SolidityType -> SolidityType parseSolidityType :: Text -> Either ParseError SolidityType instance GHC.Show.Show Network.Ethereum.ABI.Json.SolidityType instance GHC.Classes.Eq Network.Ethereum.ABI.Json.SolidityType instance GHC.Classes.Ord Network.Ethereum.ABI.Json.ContractABI instance GHC.Classes.Eq Network.Ethereum.ABI.Json.ContractABI instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.ABI.Json.ContractABI instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.ABI.Json.ContractABI instance GHC.Show.Show Network.Ethereum.ABI.Json.ContractABI instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.ABI.Json.Declaration instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.ABI.Json.Declaration instance GHC.Show.Show Network.Ethereum.ABI.Json.Declaration instance GHC.Classes.Eq Network.Ethereum.ABI.Json.Declaration instance GHC.Classes.Ord Network.Ethereum.ABI.Json.Declaration instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.ABI.Json.EventArg instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.ABI.Json.EventArg instance GHC.Classes.Ord Network.Ethereum.ABI.Json.EventArg instance GHC.Classes.Eq Network.Ethereum.ABI.Json.EventArg instance GHC.Show.Show Network.Ethereum.ABI.Json.EventArg instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.ABI.Json.FunctionArg instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.ABI.Json.FunctionArg instance GHC.Classes.Ord Network.Ethereum.ABI.Json.FunctionArg instance GHC.Classes.Eq Network.Ethereum.ABI.Json.FunctionArg instance GHC.Show.Show Network.Ethereum.ABI.Json.FunctionArg -- | Ethereum ABI intN and uintN types. module Network.Ethereum.ABI.Prim.Int data IntN (n :: Nat) data UIntN (n :: Nat) getWord256 :: Get Word256 putWord256 :: Putter Word256 instance GHC.Generics.Generic (Network.Ethereum.ABI.Prim.Int.IntN n) instance Data.Bits.Bits (Network.Ethereum.ABI.Prim.Int.IntN n) instance GHC.Enum.Enum (Network.Ethereum.ABI.Prim.Int.IntN n) instance GHC.Classes.Ord (Network.Ethereum.ABI.Prim.Int.IntN n) instance GHC.Classes.Eq (Network.Ethereum.ABI.Prim.Int.IntN n) instance GHC.Generics.Generic (Network.Ethereum.ABI.Prim.Int.UIntN n) instance Data.Bits.Bits (Network.Ethereum.ABI.Prim.Int.UIntN n) instance GHC.Num.Num (Network.Ethereum.ABI.Prim.Int.UIntN n) instance GHC.Enum.Enum (Network.Ethereum.ABI.Prim.Int.UIntN n) instance GHC.Classes.Ord (Network.Ethereum.ABI.Prim.Int.UIntN n) instance GHC.Classes.Eq (Network.Ethereum.ABI.Prim.Int.UIntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Show.Show (Network.Ethereum.ABI.Prim.Int.IntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Enum.Bounded (Network.Ethereum.ABI.Prim.Int.IntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Num.Num (Network.Ethereum.ABI.Prim.Int.IntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Real (Network.Ethereum.ABI.Prim.Int.IntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Integral (Network.Ethereum.ABI.Prim.Int.IntN n) instance (n GHC.TypeNats.<= 256) => Network.Ethereum.ABI.Class.ABIType (Network.Ethereum.ABI.Prim.Int.IntN n) instance (n GHC.TypeNats.<= 256) => Network.Ethereum.ABI.Class.ABIGet (Network.Ethereum.ABI.Prim.Int.IntN n) instance (n GHC.TypeNats.<= 256) => Network.Ethereum.ABI.Class.ABIPut (Network.Ethereum.ABI.Prim.Int.IntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Show.Show (Network.Ethereum.ABI.Prim.Int.UIntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Enum.Bounded (Network.Ethereum.ABI.Prim.Int.UIntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Real (Network.Ethereum.ABI.Prim.Int.UIntN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Integral (Network.Ethereum.ABI.Prim.Int.UIntN n) instance (n GHC.TypeNats.<= 256) => Network.Ethereum.ABI.Class.ABIType (Network.Ethereum.ABI.Prim.Int.UIntN n) instance (n GHC.TypeNats.<= 256) => Network.Ethereum.ABI.Class.ABIGet (Network.Ethereum.ABI.Prim.Int.UIntN n) instance (n GHC.TypeNats.<= 256) => Network.Ethereum.ABI.Class.ABIPut (Network.Ethereum.ABI.Prim.Int.UIntN n) instance GHC.Real.Real Basement.Types.Word256.Word256 instance GHC.Real.Integral Basement.Types.Word256.Word256 -- | Ethereum ABI bytes and bytesN types. module Network.Ethereum.ABI.Prim.Bytes -- | Simplest Byte Array data Bytes :: * type BytesN n = SizedByteArray n Bytes instance (n GHC.TypeNats.<= 32) => Network.Ethereum.ABI.Class.ABIType (Network.Ethereum.ABI.Prim.Bytes.BytesN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Network.Ethereum.ABI.Class.ABIGet (Network.Ethereum.ABI.Prim.Bytes.BytesN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Network.Ethereum.ABI.Class.ABIPut (Network.Ethereum.ABI.Prim.Bytes.BytesN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.String.IsString (Network.Ethereum.ABI.Prim.Bytes.BytesN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.Aeson.Types.FromJSON.FromJSON (Network.Ethereum.ABI.Prim.Bytes.BytesN n) instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.Aeson.Types.ToJSON.ToJSON (Network.Ethereum.ABI.Prim.Bytes.BytesN n) instance Network.Ethereum.ABI.Class.ABIType Data.ByteString.Internal.ByteString instance Network.Ethereum.ABI.Class.ABIGet Data.ByteString.Internal.ByteString instance Network.Ethereum.ABI.Class.ABIPut Data.ByteString.Internal.ByteString instance Network.Ethereum.ABI.Class.ABIType Data.ByteArray.Bytes.Bytes instance Network.Ethereum.ABI.Class.ABIGet Data.ByteArray.Bytes.Bytes instance Network.Ethereum.ABI.Class.ABIPut Data.ByteArray.Bytes.Bytes instance Data.String.IsString Data.ByteArray.Bytes.Bytes instance Data.Aeson.Types.FromJSON.FromJSON Data.ByteArray.Bytes.Bytes instance Data.Aeson.Types.ToJSON.ToJSON Data.ByteArray.Bytes.Bytes -- | Ethereum ABI boolean type. module Network.Ethereum.ABI.Prim.Bool instance Network.Ethereum.ABI.Class.ABIType GHC.Types.Bool instance Network.Ethereum.ABI.Class.ABIGet GHC.Types.Bool instance Network.Ethereum.ABI.Class.ABIPut GHC.Types.Bool -- | This module is internal, the purpose is to define helper classes and -- functions to assist in encoding and decoding Solidity types for -- function calls and events. The user of this library should have no -- need to use this directly in application code. module Network.Ethereum.ABI.Generic instance forall k (f :: k -> *). Network.Ethereum.ABI.Generic.ABIData (Generics.SOP.NP.NP f '[]) instance (Network.Ethereum.ABI.Class.ABIType b, Network.Ethereum.ABI.Class.ABIPut b, Network.Ethereum.ABI.Generic.ABIData (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I as)) => Network.Ethereum.ABI.Generic.ABIData (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : as)) instance forall k (f :: k -> *) (as :: [k]). Network.Ethereum.ABI.Generic.ABIData (Generics.SOP.NP.NP f as) => Network.Ethereum.ABI.Class.GenericABIPut (Generics.SOP.NS.SOP f '[as]) instance GHC.Classes.Eq Network.Ethereum.ABI.Generic.EncodedValue instance GHC.Classes.Ord Network.Ethereum.ABI.Generic.EncodedValue instance forall k (f :: k -> *). Network.Ethereum.ABI.Class.GenericABIGet (Generics.SOP.NP.NP f '[]) instance (Network.Ethereum.ABI.Class.ABIGet a, Network.Ethereum.ABI.Class.GenericABIGet (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I as)) => Network.Ethereum.ABI.Class.GenericABIGet (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : as)) instance forall k (f :: k -> *) (as :: [k]). Network.Ethereum.ABI.Class.GenericABIGet (Generics.SOP.NP.NP f as) => Network.Ethereum.ABI.Class.GenericABIGet (Generics.SOP.NS.SOP f '[as]) -- | Ethereum ABI encoding codec functions. module Network.Ethereum.ABI.Codec -- | Encode datatype to Ethereum ABI-encoding encode :: (ABIPut a, ByteArray ba) => a -> ba -- | Decode datatype from Ethereum ABI-encoding decode :: (ByteArrayAccess ba, ABIGet a) => ba -> Either String a -- | Generic driven version of encode encode' :: (Generic a, Rep a ~ rep, GenericABIPut rep, ByteArray ba) => a -> ba -- | Generic driven version of decode decode' :: (Generic a, Rep a ~ rep, GenericABIGet rep, ByteArrayAccess ba) => ba -> Either String a -- | Ethereum ABI address type. module Network.Ethereum.ABI.Prim.Address -- | Ethereum account address data Address instance GHC.Generics.Generic Network.Ethereum.ABI.Prim.Address.Address instance GHC.Classes.Ord Network.Ethereum.ABI.Prim.Address.Address instance GHC.Classes.Eq Network.Ethereum.ABI.Prim.Address.Address instance Generics.SOP.Universe.Generic Network.Ethereum.ABI.Prim.Address.Address instance GHC.Show.Show Network.Ethereum.ABI.Prim.Address.Address instance Data.String.IsString Network.Ethereum.ABI.Prim.Address.Address instance Network.Ethereum.ABI.Class.ABIType Network.Ethereum.ABI.Prim.Address.Address instance Network.Ethereum.ABI.Class.ABIGet Network.Ethereum.ABI.Prim.Address.Address instance Network.Ethereum.ABI.Class.ABIPut Network.Ethereum.ABI.Prim.Address.Address instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.ABI.Prim.Address.Address instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.ABI.Prim.Address.Address -- | Ethereum ABI dynamic and static size vectors based on linked lists. module Network.Ethereum.ABI.Prim.List -- | A Typed-level sized List equivalent to [a] data ListN (n :: Nat) a :: Nat -> * -> * instance Network.Ethereum.ABI.Class.ABIType [a] instance Network.Ethereum.ABI.Class.ABIPut a => Network.Ethereum.ABI.Class.ABIPut [a] instance Network.Ethereum.ABI.Class.ABIGet a => Network.Ethereum.ABI.Class.ABIGet [a] instance Network.Ethereum.ABI.Class.ABIType (Basement.Sized.List.ListN n a) instance Network.Ethereum.ABI.Class.ABIPut a => Network.Ethereum.ABI.Class.ABIPut (Basement.Sized.List.ListN n a) instance (Basement.Nat.NatWithinBound GHC.Types.Int n, GHC.TypeNats.KnownNat n, Network.Ethereum.ABI.Class.ABIGet a) => Network.Ethereum.ABI.Class.ABIGet (Basement.Sized.List.ListN n a) instance (Basement.Nat.NatWithinBound GHC.Types.Int n, GHC.TypeNats.KnownNat n) => GHC.Exts.IsList (Basement.Sized.List.ListN n a) -- | Ethereum ABI UTF8-encoded string type. module Network.Ethereum.ABI.Prim.String instance Network.Ethereum.ABI.Class.ABIType Data.Text.Internal.Text instance Network.Ethereum.ABI.Class.ABIPut Data.Text.Internal.Text instance Network.Ethereum.ABI.Class.ABIGet Data.Text.Internal.Text -- | Ethereum ABI UTF8-encoded tagged types. module Network.Ethereum.ABI.Prim.Tagged -- | A Tagged s b value is a value b with an -- attached phantom type s. This can be used in place of the -- more traditional but less safe idiom of passing in an undefined value -- with the type, because unlike an (s -> b), a -- Tagged s b can't try to use the argument s as -- a real value. -- -- Moreover, you don't have to rely on the compiler to inline away the -- extra argument, because the newtype is "free" -- -- Tagged has kind k -> * -> * if the compiler -- supports PolyKinds, therefore there is an extra k -- showing in the instance haddocks that may cause confusion. data Tagged k (s :: k) b :: forall k. () => k -> * -> * instance forall k a (t :: k). Network.Ethereum.ABI.Class.ABIType a => Network.Ethereum.ABI.Class.ABIType (Data.Tagged.Tagged t a) instance forall k a (t :: k). Network.Ethereum.ABI.Class.ABIPut a => Network.Ethereum.ABI.Class.ABIPut (Data.Tagged.Tagged t a) instance forall k a (t :: k). Network.Ethereum.ABI.Class.ABIGet a => Network.Ethereum.ABI.Class.ABIGet (Data.Tagged.Tagged t a) instance forall k a (t :: k). Generics.SOP.Universe.Generic a => Generics.SOP.Universe.Generic (Data.Tagged.Tagged t a) -- | This module is for internal usage only. It contains tuple abi encoding -- template haskell generator. module Network.Ethereum.ABI.Prim.Tuple.TH tupleDecs :: Int -> DecsQ -- | Tuple type abi encoding instances. module Network.Ethereum.ABI.Prim.Tuple -- | The type for one-tuples newtype Singleton a Singleton :: a -> Singleton a [unSingleton] :: Singleton a -> a instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2) => Network.Ethereum.ABI.Class.ABIType (a1, a2) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2) => Network.Ethereum.ABI.Class.ABIGet (a1, a2) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2) => Network.Ethereum.ABI.Class.ABIPut (a1, a2) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13, Network.Ethereum.ABI.Class.ABIType a14) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13, Network.Ethereum.ABI.Class.ABIGet a14) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13, Network.Ethereum.ABI.Class.ABIPut a14) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13, Network.Ethereum.ABI.Class.ABIType a14, Network.Ethereum.ABI.Class.ABIType a15) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13, Network.Ethereum.ABI.Class.ABIGet a14, Network.Ethereum.ABI.Class.ABIGet a15) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13, Network.Ethereum.ABI.Class.ABIPut a14, Network.Ethereum.ABI.Class.ABIPut a15) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13, Network.Ethereum.ABI.Class.ABIType a14, Network.Ethereum.ABI.Class.ABIType a15, Network.Ethereum.ABI.Class.ABIType a16) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13, Network.Ethereum.ABI.Class.ABIGet a14, Network.Ethereum.ABI.Class.ABIGet a15, Network.Ethereum.ABI.Class.ABIGet a16) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13, Network.Ethereum.ABI.Class.ABIPut a14, Network.Ethereum.ABI.Class.ABIPut a15, Network.Ethereum.ABI.Class.ABIPut a16) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13, Network.Ethereum.ABI.Class.ABIType a14, Network.Ethereum.ABI.Class.ABIType a15, Network.Ethereum.ABI.Class.ABIType a16, Network.Ethereum.ABI.Class.ABIType a17) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13, Network.Ethereum.ABI.Class.ABIGet a14, Network.Ethereum.ABI.Class.ABIGet a15, Network.Ethereum.ABI.Class.ABIGet a16, Network.Ethereum.ABI.Class.ABIGet a17) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13, Network.Ethereum.ABI.Class.ABIPut a14, Network.Ethereum.ABI.Class.ABIPut a15, Network.Ethereum.ABI.Class.ABIPut a16, Network.Ethereum.ABI.Class.ABIPut a17) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13, Network.Ethereum.ABI.Class.ABIType a14, Network.Ethereum.ABI.Class.ABIType a15, Network.Ethereum.ABI.Class.ABIType a16, Network.Ethereum.ABI.Class.ABIType a17, Network.Ethereum.ABI.Class.ABIType a18) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13, Network.Ethereum.ABI.Class.ABIGet a14, Network.Ethereum.ABI.Class.ABIGet a15, Network.Ethereum.ABI.Class.ABIGet a16, Network.Ethereum.ABI.Class.ABIGet a17, Network.Ethereum.ABI.Class.ABIGet a18) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13, Network.Ethereum.ABI.Class.ABIPut a14, Network.Ethereum.ABI.Class.ABIPut a15, Network.Ethereum.ABI.Class.ABIPut a16, Network.Ethereum.ABI.Class.ABIPut a17, Network.Ethereum.ABI.Class.ABIPut a18) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13, Network.Ethereum.ABI.Class.ABIType a14, Network.Ethereum.ABI.Class.ABIType a15, Network.Ethereum.ABI.Class.ABIType a16, Network.Ethereum.ABI.Class.ABIType a17, Network.Ethereum.ABI.Class.ABIType a18, Network.Ethereum.ABI.Class.ABIType a19) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13, Network.Ethereum.ABI.Class.ABIGet a14, Network.Ethereum.ABI.Class.ABIGet a15, Network.Ethereum.ABI.Class.ABIGet a16, Network.Ethereum.ABI.Class.ABIGet a17, Network.Ethereum.ABI.Class.ABIGet a18, Network.Ethereum.ABI.Class.ABIGet a19) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13, Network.Ethereum.ABI.Class.ABIPut a14, Network.Ethereum.ABI.Class.ABIPut a15, Network.Ethereum.ABI.Class.ABIPut a16, Network.Ethereum.ABI.Class.ABIPut a17, Network.Ethereum.ABI.Class.ABIPut a18, Network.Ethereum.ABI.Class.ABIPut a19) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) instance (Network.Ethereum.ABI.Class.ABIType a1, Network.Ethereum.ABI.Class.ABIType a2, Network.Ethereum.ABI.Class.ABIType a3, Network.Ethereum.ABI.Class.ABIType a4, Network.Ethereum.ABI.Class.ABIType a5, Network.Ethereum.ABI.Class.ABIType a6, Network.Ethereum.ABI.Class.ABIType a7, Network.Ethereum.ABI.Class.ABIType a8, Network.Ethereum.ABI.Class.ABIType a9, Network.Ethereum.ABI.Class.ABIType a10, Network.Ethereum.ABI.Class.ABIType a11, Network.Ethereum.ABI.Class.ABIType a12, Network.Ethereum.ABI.Class.ABIType a13, Network.Ethereum.ABI.Class.ABIType a14, Network.Ethereum.ABI.Class.ABIType a15, Network.Ethereum.ABI.Class.ABIType a16, Network.Ethereum.ABI.Class.ABIType a17, Network.Ethereum.ABI.Class.ABIType a18, Network.Ethereum.ABI.Class.ABIType a19, Network.Ethereum.ABI.Class.ABIType a20) => Network.Ethereum.ABI.Class.ABIType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) instance (Network.Ethereum.ABI.Class.ABIGet a1, Network.Ethereum.ABI.Class.ABIGet a2, Network.Ethereum.ABI.Class.ABIGet a3, Network.Ethereum.ABI.Class.ABIGet a4, Network.Ethereum.ABI.Class.ABIGet a5, Network.Ethereum.ABI.Class.ABIGet a6, Network.Ethereum.ABI.Class.ABIGet a7, Network.Ethereum.ABI.Class.ABIGet a8, Network.Ethereum.ABI.Class.ABIGet a9, Network.Ethereum.ABI.Class.ABIGet a10, Network.Ethereum.ABI.Class.ABIGet a11, Network.Ethereum.ABI.Class.ABIGet a12, Network.Ethereum.ABI.Class.ABIGet a13, Network.Ethereum.ABI.Class.ABIGet a14, Network.Ethereum.ABI.Class.ABIGet a15, Network.Ethereum.ABI.Class.ABIGet a16, Network.Ethereum.ABI.Class.ABIGet a17, Network.Ethereum.ABI.Class.ABIGet a18, Network.Ethereum.ABI.Class.ABIGet a19, Network.Ethereum.ABI.Class.ABIGet a20) => Network.Ethereum.ABI.Class.ABIGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) instance (Network.Ethereum.ABI.Class.ABIPut a1, Network.Ethereum.ABI.Class.ABIPut a2, Network.Ethereum.ABI.Class.ABIPut a3, Network.Ethereum.ABI.Class.ABIPut a4, Network.Ethereum.ABI.Class.ABIPut a5, Network.Ethereum.ABI.Class.ABIPut a6, Network.Ethereum.ABI.Class.ABIPut a7, Network.Ethereum.ABI.Class.ABIPut a8, Network.Ethereum.ABI.Class.ABIPut a9, Network.Ethereum.ABI.Class.ABIPut a10, Network.Ethereum.ABI.Class.ABIPut a11, Network.Ethereum.ABI.Class.ABIPut a12, Network.Ethereum.ABI.Class.ABIPut a13, Network.Ethereum.ABI.Class.ABIPut a14, Network.Ethereum.ABI.Class.ABIPut a15, Network.Ethereum.ABI.Class.ABIPut a16, Network.Ethereum.ABI.Class.ABIPut a17, Network.Ethereum.ABI.Class.ABIPut a18, Network.Ethereum.ABI.Class.ABIPut a19, Network.Ethereum.ABI.Class.ABIPut a20) => Network.Ethereum.ABI.Class.ABIPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) instance GHC.Generics.Generic (Network.Ethereum.ABI.Prim.Tuple.Singleton a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.Ethereum.ABI.Prim.Tuple.Singleton a) instance GHC.Show.Show a => GHC.Show.Show (Network.Ethereum.ABI.Prim.Tuple.Singleton a) instance Generics.SOP.Universe.Generic (Network.Ethereum.ABI.Prim.Tuple.Singleton a) instance Network.Ethereum.ABI.Class.ABIType a => Network.Ethereum.ABI.Class.ABIType (Network.Ethereum.ABI.Prim.Tuple.Singleton a) instance Network.Ethereum.ABI.Class.ABIGet a => Network.Ethereum.ABI.Class.ABIGet (Network.Ethereum.ABI.Prim.Tuple.Singleton a) instance Network.Ethereum.ABI.Class.ABIPut a => Network.Ethereum.ABI.Class.ABIPut (Network.Ethereum.ABI.Prim.Tuple.Singleton a) -- | Ethereum has a metric system of denominations used as units of ether. -- Each denomination has its own unique name (some bear the family name -- of seminal figures playing a role in evolution of computer science and -- cryptoeconomics). The smallest denomination aka base unit of ether is -- called Wei. Below is a list of the named denominations and -- their value in Wei. Following a common (although somewhat -- ambiguous) pattern, ether also designates a unit (of 1e18 or one -- quintillion Wei) of the currency. Note that the currency is not -- called Ethereum as many mistakenly think, nor is Ethereum a unit. -- -- In Haskell the Ethereum unit system presented as set of types: -- Wei, Szabo, Finney, etc. They are members of -- Unit typeclass. Also available standart Show, -- Read, Num operations over Ethereum units. -- --
-- > let x = 1.2 :: Ether -- > toWei x -- 1200000000000000000 -- -- > let y = x + 2 -- > y -- 3.20 ether -- -- > let z = 15 :: Szabo -- > y + z -- -- interactive:6:5: error: -- • Couldn't match type ‘Network.Ethereum.Unit.U4’ -- with ‘Network.Ethereum.Unit.U6’ -- Expected type: Ether -- Actual type: Szabo --module Network.Ethereum.Unit -- | Ethereum value unit class (Read a, Show a, UnitSpec a, Fractional a) => Unit a -- | Make a value from integer wei fromWei :: Unit a => Integer -> a -- | Convert a value to integer wei toWei :: Unit a => a -> Integer -- | Conversion beween two values convert :: (Unit a, Unit b) => a -> b -- | Unit specification class UnitSpec a divider :: (UnitSpec a, RealFrac b) => proxy a -> b name :: UnitSpec a => proxy a -> Text -- | Wei unit type type Wei = Value U0 -- | Babbage unit type type Babbage = Value U1 -- | Lovelace unit type type Lovelace = Value U2 -- | Shannon unit type type Shannon = Value U3 -- | Szabo unit type type Szabo = Value U4 -- | Finney unit type type Finney = Value U5 -- | Ether unit type type Ether = Value U6 -- | KEther unit type type KEther = Value U7 instance GHC.Generics.Generic (Network.Ethereum.Unit.Value a) instance GHC.Classes.Ord (Network.Ethereum.Unit.Value a) instance GHC.Classes.Eq (Network.Ethereum.Unit.Value a) instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U7 instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U6 instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U5 instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U4 instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U3 instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U2 instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U1 instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Unit.U0 instance Network.Ethereum.Unit.UnitSpec a => Network.Ethereum.Unit.Unit (Network.Ethereum.Unit.Value a) instance Network.Ethereum.Unit.UnitSpec a => Network.Ethereum.Unit.UnitSpec (Network.Ethereum.Unit.Value a) instance Network.Ethereum.Unit.UnitSpec a => GHC.Num.Num (Network.Ethereum.Unit.Value a) instance Network.Ethereum.Unit.UnitSpec a => GHC.Real.Fractional (Network.Ethereum.Unit.Value a) instance Network.Ethereum.Unit.UnitSpec a => GHC.Show.Show (Network.Ethereum.Unit.Value a) instance Network.Ethereum.Unit.UnitSpec a => GHC.Read.Read (Network.Ethereum.Unit.Value a) -- | Ethereum generic JSON-RPC types. module Network.Ethereum.Web3.Types -- | 32 byte type synonym for transaction and block hashes. type Hash = BytesN 32 -- | Should be viewed as type to representing QUANTITY in Web3 JSON RPC -- docs -- -- When encoding QUANTITIES (integers, numbers): encode as hex, prefix -- with "0x", the most compact representation (slight exception: zero -- should be represented as "0x0"). Examples: -- -- 0x41 (65 in decimal) 0x400 (1024 in decimal) WRONG: 0x (should always -- have at least one digit - zero is "0x0") WRONG: 0x0400 (no leading -- zeroes allowed) WRONG: ff (must be prefixed 0x) newtype Quantity Quantity :: Integer -> Quantity [unQuantity] :: Quantity -> Integer -- | An object with sync status data. data SyncActive SyncActive :: !Quantity -> !Quantity -> !Quantity -> SyncActive -- | QUANTITY - The block at which the import started (will only be reset, -- after the sync reached his head). [syncStartingBlock] :: SyncActive -> !Quantity -- | QUANTITY - The current block, same as eth_blockNumber. [syncCurrentBlock] :: SyncActive -> !Quantity -- | QUANTITY - The estimated highest block. [syncHighestBlock] :: SyncActive -> !Quantity -- | Sync state pulled by low-level call eth_syncing. data SyncingState Syncing :: SyncActive -> SyncingState NotSyncing :: SyncingState -- | Changes pulled by low-level call eth_getFilterChanges, -- eth_getLogs, and eth_getFilterLogs data Change Change :: !Quantity -> !Quantity -> !Hash -> !Hash -> !Quantity -> !Address -> !Bytes -> ![BytesN 32] -> Change -- | QUANTITY - integer of the log index position in the block. null when -- its pending log. [changeLogIndex] :: Change -> !Quantity -- | QUANTITY - integer of the transactions index position log was created -- from. null when its pending log. [changeTransactionIndex] :: Change -> !Quantity -- | DATA, 32 Bytes - hash of the transactions this log was created from. -- null when its pending log. [changeTransactionHash] :: Change -> !Hash -- | DATA, 32 Bytes - hash of the block where this log was in. null when -- its pending. null when its pending log. [changeBlockHash] :: Change -> !Hash -- | QUANTITY - the block number where this log was in. null when its -- pending. null when its pending log. [changeBlockNumber] :: Change -> !Quantity -- | DATA, 20 Bytes - address from which this log originated. [changeAddress] :: Change -> !Address -- | DATA - contains one or more 32 Bytes non-indexed arguments of the log. [changeData] :: Change -> !Bytes -- | Array of DATA - Array of 0 to 4 32 Bytes DATA of indexed log -- arguments. (In solidity: The first topic is the hash of the signature -- of the event (e.g. Deposit(address, bytes32, uint256)), except you -- declared the event with the anonymous specifier.) [changeTopics] :: Change -> ![BytesN 32] -- | The contract call params. data Call Call :: !(Maybe Address) -> !(Maybe Address) -> !(Maybe Quantity) -> !(Maybe Quantity) -> !(Maybe Quantity) -> !(Maybe Bytes) -> !(Maybe Quantity) -> Call -- | DATA, 20 Bytes - The address the transaction is send from. [callFrom] :: Call -> !(Maybe Address) -- | DATA, 20 Bytes - (optional when creating new contract) The address the -- transaction is directed to. [callTo] :: Call -> !(Maybe Address) -- | QUANTITY - (optional, default: 3000000) Integer of the gas provided -- for the transaction execution. It will return unused gas. [callGas] :: Call -> !(Maybe Quantity) -- | QUANTITY - (optional, default: To-Be-Determined) Integer of the -- gasPrice used for each paid gas. [callGasPrice] :: Call -> !(Maybe Quantity) -- | QUANTITY - (optional) Integer of the value sent with this transaction. [callValue] :: Call -> !(Maybe Quantity) -- | DATA - The compiled code of a contract OR the hash of the invoked -- method signature and encoded parameters. [callData] :: Call -> !(Maybe Bytes) -- | QUANTITY - (optional) Integer of a nonce. This allows to overwrite -- your own pending transactions that use the same nonce. [callNonce] :: Call -> !(Maybe Quantity) -- | The state of blockchain for contract call. data DefaultBlock BlockWithNumber :: Quantity -> DefaultBlock Earliest :: DefaultBlock Latest :: DefaultBlock Pending :: DefaultBlock -- | Low-level event filter data structure. data Filter e Filter :: !(Maybe [Address]) -> !DefaultBlock -> !DefaultBlock -> !(Maybe [Maybe (BytesN 32)]) -> Filter e -- | DATA|Array, 20 Bytes - (optional) Contract address or a list of -- addresses from which logs should originate. [filterAddress] :: Filter e -> !(Maybe [Address]) -- | QUANTITY|TAG - (optional, default: "latest") Integer block number, or -- "latest" for the last mined block or "pending", "earliest" for not yet -- mined transactions. [filterFromBlock] :: Filter e -> !DefaultBlock -- | QUANTITY|TAG - (optional, default: "latest") Integer block number, or -- "latest" for the last mined block or "pending", "earliest" for not yet -- mined transactions. [filterToBlock] :: Filter e -> !DefaultBlock -- | Array of DATA, - (optional) Array of 32 Bytes DATA topics. Topics are -- order-dependent. Each topic can also be an array of DATA with "or" -- options. Topics are order-dependent. A transaction with a log with -- topics [A, B] will be matched by the following topic filters: * [] -- "anything" * [A] "A in first position (and anything after)" * [null, -- B] "anything in first position AND B in second position (and anything -- after)" * [A, B] "A in first position AND B in second position (and -- anything after)" * [[A, B], [A, B]] "(A OR B) in first position AND (A -- OR B) in second position (and anything after)" [filterTopics] :: Filter e -> !(Maybe [Maybe (BytesN 32)]) -- | The Receipt of a Transaction data TxReceipt TxReceipt :: !Hash -> !Quantity -> !Hash -> !Quantity -> !Quantity -> !Quantity -> !(Maybe Address) -> ![Change] -> !Bytes -> !(Maybe Quantity) -> TxReceipt -- | DATA, 32 Bytes - hash of the transaction. [receiptTransactionHash] :: TxReceipt -> !Hash -- | QUANTITY - index of the transaction. [receiptTransactionIndex] :: TxReceipt -> !Quantity -- | DATA, 32 Bytes - hash of the block where this transaction was in. null -- when its pending. [receiptBlockHash] :: TxReceipt -> !Hash -- | QUANTITY - block number where this transaction was in. [receiptBlockNumber] :: TxReceipt -> !Quantity -- | QUANTITY - The total amount of gas used when this transaction was -- executed in the block. [receiptCumulativeGasUsed] :: TxReceipt -> !Quantity -- | QUANTITY - The amount of gas used by this specific transaction alone. [receiptGasUsed] :: TxReceipt -> !Quantity -- | DATA, 20 Bytes - The contract address created, if the transaction was -- a contract creation, otherwise null. [receiptContractAddress] :: TxReceipt -> !(Maybe Address) -- | Array - Array of log objects, which this transaction generated. [receiptLogs] :: TxReceipt -> ![Change] -- | DATA, 256 Bytes - Bloom filter for light clients to quickly retrieve -- related logs. [receiptLogsBloom] :: TxReceipt -> !Bytes -- | QUANTITY either 1 (success) or 0 (failure) [receiptStatus] :: TxReceipt -> !(Maybe Quantity) -- | Transaction information. data Transaction Transaction :: !Hash -> !Quantity -> !Hash -> !Quantity -> !Quantity -> !Address -> !(Maybe Address) -> !Quantity -> !Quantity -> !Quantity -> !Bytes -> Transaction -- | DATA, 32 Bytes - hash of the transaction. [txHash] :: Transaction -> !Hash -- | QUANTITY - the number of transactions made by the sender prior to this -- one. [txNonce] :: Transaction -> !Quantity -- | DATA, 32 Bytes - hash of the block where this transaction was in. null -- when its pending. [txBlockHash] :: Transaction -> !Hash -- | QUANTITY - block number where this transaction was in. null when its -- pending. [txBlockNumber] :: Transaction -> !Quantity -- | QUANTITY - integer of the transactions index position in the block. -- null when its pending. [txTransactionIndex] :: Transaction -> !Quantity -- | DATA, 20 Bytes - address of the sender. [txFrom] :: Transaction -> !Address -- | DATA, 20 Bytes - address of the receiver. null when its a contract -- creation transaction. [txTo] :: Transaction -> !(Maybe Address) -- | QUANTITY - value transferred in Wei. [txValue] :: Transaction -> !Quantity -- | QUANTITY - gas price provided by the sender in Wei. [txGasPrice] :: Transaction -> !Quantity -- | QUANTITY - gas provided by the sender. [txGas] :: Transaction -> !Quantity -- | DATA - the data send along with the transaction. [txInput] :: Transaction -> !Bytes -- | Block information. data Block Block :: !Quantity -> !Hash -> !Hash -> !(Maybe Bytes) -> !(BytesN 32) -> !Bytes -> !(BytesN 32) -> !(BytesN 32) -> !(Maybe (BytesN 32)) -> !Address -> !Quantity -> !Quantity -> !Bytes -> !Quantity -> !Quantity -> !Quantity -> !Quantity -> ![Transaction] -> ![Hash] -> Block -- | QUANTITY - the block number. null when its pending block. [blockNumber] :: Block -> !Quantity -- | DATA, 32 Bytes - hash of the block. null when its pending block. [blockHash] :: Block -> !Hash -- | DATA, 32 Bytes - hash of the parent block. [blockParentHash] :: Block -> !Hash -- | DATA, 8 Bytes - hash of the generated proof-of-work. null when its -- pending block. [blockNonce] :: Block -> !(Maybe Bytes) -- | DATA, 32 Bytes - SHA3 of the uncles data in the block. [blockSha3Uncles] :: Block -> !(BytesN 32) -- | DATA, 256 Bytes - the bloom filter for the logs of the block. null -- when its pending block. [blockLogsBloom] :: Block -> !Bytes -- | DATA, 32 Bytes - the root of the transaction trie of the block. [blockTransactionsRoot] :: Block -> !(BytesN 32) -- | DATA, 32 Bytes - the root of the final state trie of the block. [blockStateRoot] :: Block -> !(BytesN 32) -- | DATA, 32 Bytes - the root of the receipts trie of the block. [blockReceiptRoot] :: Block -> !(Maybe (BytesN 32)) -- | DATA, 20 Bytes - the address of the beneficiary to whom the mining -- rewards were given. [blockMiner] :: Block -> !Address -- | QUANTITY - integer of the difficulty for this block. [blockDifficulty] :: Block -> !Quantity -- | QUANTITY - integer of the total difficulty of the chain until this -- block. [blockTotalDifficulty] :: Block -> !Quantity -- | DATA - the "extra data" field of this block. [blockExtraData] :: Block -> !Bytes -- | QUANTITY - integer the size of this block in bytes. [blockSize] :: Block -> !Quantity -- | QUANTITY - the maximum gas allowed in this block. [blockGasLimit] :: Block -> !Quantity -- | QUANTITY - the total used gas by all transactions in this block. [blockGasUsed] :: Block -> !Quantity -- | QUANTITY - the unix timestamp for when the block was collated. [blockTimestamp] :: Block -> !Quantity -- | Array of transaction objects. [blockTransactions] :: Block -> ![Transaction] -- | Array - Array of uncle hashes. [blockUncles] :: Block -> ![Hash] instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.Block instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.Block instance GHC.Generics.Generic Network.Ethereum.Web3.Types.Block instance GHC.Show.Show Network.Ethereum.Web3.Types.Block instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.Transaction instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.Transaction instance GHC.Generics.Generic Network.Ethereum.Web3.Types.Transaction instance GHC.Show.Show Network.Ethereum.Web3.Types.Transaction instance GHC.Classes.Eq Network.Ethereum.Web3.Types.Transaction instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.TxReceipt instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.TxReceipt instance GHC.Generics.Generic Network.Ethereum.Web3.Types.TxReceipt instance GHC.Show.Show Network.Ethereum.Web3.Types.TxReceipt instance GHC.Generics.Generic (Network.Ethereum.Web3.Types.Filter e) instance GHC.Show.Show (Network.Ethereum.Web3.Types.Filter e) instance GHC.Classes.Eq (Network.Ethereum.Web3.Types.Filter e) instance GHC.Generics.Generic Network.Ethereum.Web3.Types.DefaultBlock instance GHC.Show.Show Network.Ethereum.Web3.Types.DefaultBlock instance GHC.Classes.Eq Network.Ethereum.Web3.Types.DefaultBlock instance Data.Aeson.Types.ToJSON.ToJSON (Network.Ethereum.Web3.Types.Filter e) instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.DefaultBlock instance GHC.Classes.Ord Network.Ethereum.Web3.Types.DefaultBlock instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.Call instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.Call instance Data.Default.Class.Default Network.Ethereum.Web3.Types.Call instance GHC.Generics.Generic Network.Ethereum.Web3.Types.Call instance GHC.Show.Show Network.Ethereum.Web3.Types.Call instance GHC.Classes.Eq Network.Ethereum.Web3.Types.Call instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.Change instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.Change instance GHC.Generics.Generic Network.Ethereum.Web3.Types.Change instance GHC.Show.Show Network.Ethereum.Web3.Types.Change instance GHC.Classes.Eq Network.Ethereum.Web3.Types.Change instance GHC.Show.Show Network.Ethereum.Web3.Types.SyncingState instance GHC.Generics.Generic Network.Ethereum.Web3.Types.SyncingState instance GHC.Classes.Eq Network.Ethereum.Web3.Types.SyncingState instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.SyncingState instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.SyncActive instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.SyncActive instance GHC.Show.Show Network.Ethereum.Web3.Types.SyncActive instance GHC.Generics.Generic Network.Ethereum.Web3.Types.SyncActive instance GHC.Classes.Eq Network.Ethereum.Web3.Types.SyncActive instance GHC.Generics.Generic Network.Ethereum.Web3.Types.Quantity instance GHC.Classes.Ord Network.Ethereum.Web3.Types.Quantity instance GHC.Classes.Eq Network.Ethereum.Web3.Types.Quantity instance GHC.Enum.Enum Network.Ethereum.Web3.Types.Quantity instance GHC.Real.Real Network.Ethereum.Web3.Types.Quantity instance GHC.Num.Num Network.Ethereum.Web3.Types.Quantity instance GHC.Read.Read Network.Ethereum.Web3.Types.Quantity instance GHC.Show.Show Network.Ethereum.Web3.Types.Quantity instance Data.String.IsString Network.Ethereum.Web3.Types.Quantity instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Web3.Types.Quantity instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Web3.Types.Quantity instance GHC.Real.Fractional Network.Ethereum.Web3.Types.Quantity instance Network.Ethereum.Unit.Unit Network.Ethereum.Web3.Types.Quantity instance Network.Ethereum.Unit.UnitSpec Network.Ethereum.Web3.Types.Quantity -- | This module is internal, the purpose is to define helper classes and -- functions to assist in event decoding. The user of this library should -- have no need to use this directly in application code. module Network.Ethereum.ABI.Event class DecodeEvent i ni e | e -> i ni decodeEvent :: DecodeEvent i ni e => Change -> Either String e class IndexedEvent i ni e | e -> i ni isAnonymous :: IndexedEvent i ni e => Proxy e -> Bool instance (Network.Ethereum.ABI.Event.IndexedEvent i ni e, Generics.SOP.Universe.Generic i, Generics.SOP.Universe.Rep i ~ Generics.SOP.NS.SOP Generics.SOP.BasicFunctors.I '[hli], Generics.SOP.Universe.Generic ni, Generics.SOP.Universe.Rep ni ~ Generics.SOP.NS.SOP Generics.SOP.BasicFunctors.I '[hlni], Generics.SOP.Universe.Generic e, Generics.SOP.Universe.Rep e ~ Generics.SOP.NS.SOP Generics.SOP.BasicFunctors.I '[hle], Network.Ethereum.ABI.Event.CombineChange i ni e, Network.Ethereum.ABI.Class.GenericABIGet (Generics.SOP.NS.SOP Generics.SOP.BasicFunctors.I '[hlni]), Network.Ethereum.ABI.Event.ArrayParser (Generics.SOP.NS.SOP Generics.SOP.BasicFunctors.I '[hli])) => Network.Ethereum.ABI.Event.DecodeEvent i ni e instance (Generics.SOP.Universe.Generic i, Generics.SOP.Universe.Rep i ~ irep, Generics.SOP.Universe.Generic ni, Generics.SOP.Universe.Rep ni ~ nirep, Generics.SOP.Universe.Generic e, Generics.SOP.Universe.Rep e ~ erep, Network.Ethereum.ABI.Event.Internal.HListRep irep hli, Network.Ethereum.ABI.Event.Internal.HListRep nirep hlni, Network.Ethereum.ABI.Event.Internal.MergeIndexedArguments hli hlni, Network.Ethereum.ABI.Event.Internal.MergeIndexedArguments' hli hlni ~ hle, Network.Ethereum.ABI.Event.Internal.HListRep erep hle, Network.Ethereum.ABI.Event.IndexedEvent i ni e) => Network.Ethereum.ABI.Event.CombineChange i ni e instance forall k (f :: k -> *). Network.Ethereum.ABI.Event.ArrayParser (Generics.SOP.NP.NP f '[]) instance (Network.Ethereum.ABI.Event.ArrayParser (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I as), Generics.SOP.Universe.Generic a, Generics.SOP.Universe.Rep a ~ rep, Network.Ethereum.ABI.Class.GenericABIGet rep) => Network.Ethereum.ABI.Event.ArrayParser (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : as)) instance forall k (f :: k -> *) (as :: [k]). Network.Ethereum.ABI.Event.ArrayParser (Generics.SOP.NP.NP f as) => Network.Ethereum.ABI.Event.ArrayParser (Generics.SOP.NS.SOP f '[as]) -- | Tiny JSON-RPC 2.0 client. Functions for implementing the client side -- of JSON-RPC 2.0. See http://www.jsonrpc.org/specification. module Network.JsonRpc.TinyClient data JsonRpcException ParsingException :: String -> JsonRpcException CallException :: RpcError -> JsonRpcException -- | JSON-RPC error message data RpcError RpcError :: !Int -> !Text -> !(Maybe Value) -> RpcError [errCode] :: RpcError -> !Int [errMessage] :: RpcError -> !Text [errData] :: RpcError -> !(Maybe Value) -- | Name of called method. type MethodName = Text -- | JSON-RPC server URI type ServerUri = String -- | Typeclass for JSON-RPC monad base. -- -- If you have monad with MonadIO, MonadThrow and -- MonadReader instances, it can be used as base for JSON-RPC -- calls. -- -- Example: -- --
-- newtype MyMonad a = ... -- -- instance Remote MyMonad (Mymonad a) -- -- foo :: Int -> Bool -> Mymonad Text -- foo = remote "foo" --class (MonadIO m, MonadThrow m, MonadReader Config m) => Remote m a | a -> m -- | Remote call of JSON-RPC method. -- -- Arguments of function are stored into params request array. -- -- Example: -- --
-- myMethod :: Int -> Bool -> m String -- myMethod = remote "myMethod" --remote :: Remote m a => MethodName -> a instance GHC.Show.Show Network.JsonRpc.TinyClient.JsonRpcException instance GHC.Classes.Eq Network.JsonRpc.TinyClient.JsonRpcException instance GHC.Show.Show Network.JsonRpc.TinyClient.Response instance GHC.Classes.Eq Network.JsonRpc.TinyClient.Response instance GHC.Classes.Eq Network.JsonRpc.TinyClient.RpcError instance GHC.Exception.Exception Network.JsonRpc.TinyClient.JsonRpcException instance (Data.Aeson.Types.ToJSON.ToJSON a, Network.JsonRpc.TinyClient.Remote m b) => Network.JsonRpc.TinyClient.Remote m (a -> b) instance Data.Aeson.Types.FromJSON.FromJSON Network.JsonRpc.TinyClient.Response instance GHC.Show.Show Network.JsonRpc.TinyClient.RpcError instance Data.Aeson.Types.FromJSON.FromJSON Network.JsonRpc.TinyClient.RpcError instance Data.Aeson.Types.ToJSON.ToJSON Network.JsonRpc.TinyClient.Request -- | Web3 service provider. module Network.Ethereum.Web3.Provider -- | Any communication with Ethereum node wrapped with Web3 monad newtype Web3 a Web3 :: ReaderT (ServerUri, Manager) IO a -> Web3 a [unWeb3] :: Web3 a -> ReaderT (ServerUri, Manager) IO a -- | Some peace of error response data Web3Error -- | JSON-RPC communication error JsonRpcFail :: !String -> Web3Error -- | Error in parser state ParserFail :: !String -> Web3Error -- | Common head for user errors UserFail :: !String -> Web3Error -- | Web3 Provider data Provider HttpProvider :: ServerUri -> Provider -- | Web3 monad runner, using the supplied Manager runWeb3With :: MonadIO m => Manager -> Provider -> Web3 a -> m (Either Web3Error a) -- | Web3 monad runner runWeb3' :: MonadIO m => Provider -> Web3 a -> m (Either Web3Error a) -- | Web3 runner for default provider runWeb3 :: MonadIO m => Web3 a -> m (Either Web3Error a) -- | Fork Web3 with the same Provider forkWeb3 :: Web3 a -> Web3 (Async a) instance GHC.Generics.Generic Network.Ethereum.Web3.Provider.Provider instance GHC.Classes.Eq Network.Ethereum.Web3.Provider.Provider instance GHC.Show.Show Network.Ethereum.Web3.Provider.Provider instance GHC.Generics.Generic Network.Ethereum.Web3.Provider.Web3Error instance GHC.Classes.Eq Network.Ethereum.Web3.Provider.Web3Error instance GHC.Show.Show Network.Ethereum.Web3.Provider.Web3Error instance Control.Monad.Catch.MonadThrow Network.Ethereum.Web3.Provider.Web3 instance Control.Monad.IO.Class.MonadIO Network.Ethereum.Web3.Provider.Web3 instance GHC.Base.Monad Network.Ethereum.Web3.Provider.Web3 instance GHC.Base.Applicative Network.Ethereum.Web3.Provider.Web3 instance GHC.Base.Functor Network.Ethereum.Web3.Provider.Web3 instance Data.Default.Class.Default Network.Ethereum.Web3.Provider.Provider instance GHC.Exception.Exception Network.Ethereum.Web3.Provider.Web3Error instance Control.Monad.Reader.Class.MonadReader (Network.JsonRpc.TinyClient.ServerUri, Network.HTTP.Client.Types.Manager) Network.Ethereum.Web3.Provider.Web3 instance Data.Aeson.Types.FromJSON.FromJSON a => Network.JsonRpc.TinyClient.Remote Network.Ethereum.Web3.Provider.Web3 (Network.Ethereum.Web3.Provider.Web3 a) -- | Ethereum node JSON-RPC API methods with web3_ prefix. module Network.Ethereum.Web3.Web3 -- | Returns current node version string. clientVersion :: Web3 Text -- | Returns Keccak-256 (not the standardized SHA3-256) of the given data. sha3 :: Bytes -> Web3 Hash -- | Ethereum node JSON-RPC API methods with net_ prefix. module Network.Ethereum.Web3.Net -- | Returns the current network id. version :: Web3 Text -- | Returns true if client is actively listening for network connections. listening :: Web3 Bool -- | Returns number of peers currently connected to the client. peerCount :: Web3 Quantity -- | Ethereum node JSON-RPC API methods with eth_ prefix. module Network.Ethereum.Web3.Eth -- | Returns the current ethereum protocol version. protocolVersion :: Web3 Int -- | Returns an object with data about the sync status or false. syncing :: Web3 SyncingState -- | Returns the client coinbase address. coinbase :: Web3 Address -- | Returns true if client is actively mining new blocks. mining :: Web3 Bool -- | Returns the number of hashes per second that the node is mining with. hashrate :: Web3 Quantity -- | Returns the value from a storage position at a given address. getStorageAt :: Address -> Quantity -> DefaultBlock -> Web3 (BytesN 32) -- | Returns the number of transactions sent from an address. getTransactionCount :: Address -> DefaultBlock -> Web3 Quantity -- | Returns the number of transactions in a block from a block matching -- the given block hash. getBlockTransactionCountByHash :: Hash -> Web3 Quantity -- | Returns the number of transactions in a block matching the given block -- number. getBlockTransactionCountByNumber :: Quantity -> Web3 Quantity -- | Returns the number of uncles in a block from a block matching the -- given block hash. getUncleCountByBlockHash :: Hash -> Web3 Quantity -- | Returns the number of uncles in a block from a block matching the -- given block number. getUncleCountByBlockNumber :: Quantity -> Web3 Quantity -- | Returns code at a given address. getCode :: Address -> DefaultBlock -> Web3 Bytes -- | Returns an Ethereum specific signature with: -- sign(keccak256("x19Ethereum Signed Message:n" + len(message) + -- message))). sign :: Address -> Bytes -> Web3 Bytes -- | Creates new message call transaction or a contract creation, if the -- data field contains code. sendTransaction :: Call -> Web3 Hash -- | Creates new message call transaction or a contract creation for signed -- transactions. sendRawTransaction :: Bytes -> Web3 Hash -- | Returns the balance of the account of given address. getBalance :: Address -> DefaultBlock -> Web3 Quantity -- | Creates a filter object, based on filter options, to notify when the -- state changes (logs). To check if the state has changed, call -- getFilterChanges. newFilter :: Filter e -> Web3 Quantity -- | Polling method for a filter, which returns an array of logs which -- occurred since last poll. getFilterChanges :: Quantity -> Web3 [Change] -- | Uninstalls a filter with given id. Should always be called when watch -- is no longer needed. uninstallFilter :: Quantity -> Web3 Bool -- | Returns an array of all logs matching a given filter object. getLogs :: Filter e -> Web3 [Change] -- | Executes a new message call immediately without creating a transaction -- on the block chain. call :: Call -> DefaultBlock -> Web3 Bytes -- | Makes a call or transaction, which won't be added to the blockchain -- and returns the used gas, which can be used for estimating the used -- gas. estimateGas :: Call -> Web3 Quantity -- | Returns information about a block by hash. getBlockByHash :: Hash -> Web3 Block -- | Returns information about a block by block number. getBlockByNumber :: Quantity -> Web3 Block -- | Returns the information about a transaction requested by transaction -- hash. getTransactionByHash :: Hash -> Web3 (Maybe Transaction) -- | Returns information about a transaction by block hash and transaction -- index position. getTransactionByBlockHashAndIndex :: Hash -> Quantity -> Web3 (Maybe Transaction) -- | Returns information about a transaction by block number and -- transaction index position. getTransactionByBlockNumberAndIndex :: DefaultBlock -> Quantity -> Web3 (Maybe Transaction) -- | Returns the receipt of a transaction by transaction hash. getTransactionReceipt :: Hash -> Web3 (Maybe TxReceipt) -- | Returns a list of addresses owned by client. accounts :: Web3 [Address] -- | Creates a filter in the node, to notify when a new block arrives. newBlockFilter :: Web3 Quantity -- | Polling method for a block filter, which returns an array of block -- hashes occurred since last poll. getBlockFilterChanges :: Quantity -> Web3 [Hash] -- | Returns the number of most recent block. blockNumber :: Web3 Quantity -- | Returns the current price per gas in wei. gasPrice :: Web3 Quantity -- | Returns information about a uncle of a block by hash and uncle index -- position. getUncleByBlockHashAndIndex :: Hash -> Quantity -> Web3 Block -- | Returns information about a uncle of a block by number and uncle index -- position. getUncleByBlockNumberAndIndex :: DefaultBlock -> Quantity -> Web3 Block -- | Creates a filter in the node, to notify when new pending transactions -- arrive. To check if the state has changed, call getFilterChanges. -- Returns a FilterId. newPendingTransactionFilter :: Web3 Quantity -- | Returns an array of all logs matching filter with given id. getFilterLogs :: Quantity -> Web3 [Change] -- | Returns the hash of the current block, the seedHash, and the boundary -- condition to be met ("target"). getWork :: Web3 [Bytes] -- | Used for submitting a proof-of-work solution. Parameters: 1. DATA, 8 -- Bytes - The nonce found (64 bits) 2. DATA, 32 Bytes - The header's -- pow-hash (256 bits) 3. DATA, 32 Bytes - The mix digest (256 bits) submitWork :: BytesN 8 -> BytesN 32 -> BytesN 32 -> Web3 Bool -- | Used for submitting mining hashrate. Parameters: 1. Hashrate, a -- hexadecimal string representation (32 bytes) of the hash rate 2. ID, -- String - A random hexadecimal(32 bytes) ID identifying the client submitHashrate :: BytesN 32 -> BytesN 32 -> Web3 Bool -- | Ethereum contract method support. module Network.Ethereum.Contract.Method class ABIPut a => Method a selector :: Method a => Proxy a -> Bytes -- | call is used to call contract methods that have no state -- changing effects. call :: (Method a, ABIGet b) => Call -> DefaultBlock -> a -> Web3 b -- | sendTx is used to submit a state changing transaction. sendTx :: Method a => Call -> a -> Web3 Hash instance Network.Ethereum.Contract.Method.Method () instance Network.Ethereum.ABI.Class.ABIType () instance Network.Ethereum.ABI.Class.ABIPut () -- | Contract abstraction is a high level interface of web3 library. -- -- The Application Binary Interface is the standard way to interact with -- contracts in the Ethereum ecosystem. It can be described by specially -- JSON file, like ERC20.json. This module use TemplateHaskell -- for generation described in ABI contract methods and events. Helper -- functions and instances inserted in haskell module and can be used in -- another modules or in place. -- --
-- import Network.Ethereum.Contract.TH -- -- [abiFrom|examples/ERC20.json|] -- -- main = do -- runWeb3 $ event' def $ -- (Transfer _ to val) -> liftIO $ do print to -- print val ---- -- Full code example available in examples folder. module Network.Ethereum.Contract.TH -- | QQ reader for contract ABI abi :: QuasiQuoter -- | Read contract ABI from file abiFrom :: QuasiQuoter -- | Ethereum contract event support. module Network.Ethereum.Contract.Event -- | Event callback control response data EventAction -- | Continue to listen events ContinueEvent :: EventAction -- | Terminate event listener TerminateEvent :: EventAction -- | Run 'event\'' one block at a time. event :: DecodeEvent i ni e => Filter e -> (e -> ReaderT Change Web3 EventAction) -> Web3 (Async ()) -- | Same as event, but does not immediately spawn a new thread. event' :: DecodeEvent i ni e => Filter e -> (e -> ReaderT Change Web3 EventAction) -> Web3 () -- | 'eventMany\'' take s a filter, a window size, and a handler. -- -- It runs the handler over the results of eventLogs results -- using reduceEventStream. If no TerminateEvent action is -- thrown and the toBlock is not yet reached, it then transitions to -- polling. eventMany' :: DecodeEvent i ni e => Filter e -> Integer -> (e -> ReaderT Change Web3 EventAction) -> Web3 () instance GHC.Classes.Eq Network.Ethereum.Contract.Event.EventAction instance GHC.Show.Show Network.Ethereum.Contract.Event.EventAction -- | An Ethereum node offers a RPC interface. This interface gives Ðapp’s -- access to the Ethereum blockchain and functionality that the node -- provides, such as compiling smart contract code. It uses a subset of -- the JSON-RPC 2.0 specification (no support for notifications or named -- parameters) as serialisation protocol and is available over HTTP and -- IPC (unix domain sockets on linux/OSX and named pipe’s on Windows). -- -- Web3 Haskell library currently use JSON-RPC over HTTP to access node -- functionality. module Network.Ethereum.Web3 -- | Any communication with Ethereum node wrapped with Web3 monad data Web3 a -- | Web3 runner for default provider runWeb3 :: MonadIO m => Web3 a -> m (Either Web3Error a) -- | sendTx is used to submit a state changing transaction. sendTx :: Method a => Call -> a -> Web3 Hash -- | The contract call params. data Call Call :: !(Maybe Address) -> !(Maybe Address) -> !(Maybe Quantity) -> !(Maybe Quantity) -> !(Maybe Quantity) -> !(Maybe Bytes) -> !(Maybe Quantity) -> Call -- | DATA, 20 Bytes - The address the transaction is send from. [callFrom] :: Call -> !(Maybe Address) -- | DATA, 20 Bytes - (optional when creating new contract) The address the -- transaction is directed to. [callTo] :: Call -> !(Maybe Address) -- | QUANTITY - (optional, default: 3000000) Integer of the gas provided -- for the transaction execution. It will return unused gas. [callGas] :: Call -> !(Maybe Quantity) -- | QUANTITY - (optional, default: To-Be-Determined) Integer of the -- gasPrice used for each paid gas. [callGasPrice] :: Call -> !(Maybe Quantity) -- | QUANTITY - (optional) Integer of the value sent with this transaction. [callValue] :: Call -> !(Maybe Quantity) -- | DATA - The compiled code of a contract OR the hash of the invoked -- method signature and encoded parameters. [callData] :: Call -> !(Maybe Bytes) -- | QUANTITY - (optional) Integer of a nonce. This allows to overwrite -- your own pending transactions that use the same nonce. [callNonce] :: Call -> !(Maybe Quantity) -- | Event callback control response data EventAction -- | Continue to listen events ContinueEvent :: EventAction -- | Terminate event listener TerminateEvent :: EventAction -- | Run 'event\'' one block at a time. event :: DecodeEvent i ni e => Filter e -> (e -> ReaderT Change Web3 EventAction) -> Web3 (Async ()) -- | Same as event, but does not immediately spawn a new thread. event' :: DecodeEvent i ni e => Filter e -> (e -> ReaderT Change Web3 EventAction) -> Web3 () -- | Ethereum account address data Address -- | Simplest Byte Array data Bytes :: * type BytesN n = SizedByteArray n Bytes data IntN (n :: Nat) data UIntN (n :: Nat) -- | A Typed-level sized List equivalent to [a] data ListN (n :: Nat) a :: Nat -> * -> *