-- 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.8.3.1


-- | EC cryptography on Secp256k1 curve.
module Crypto.Ethereum.Utils

-- | Import Ethereum private key from byte array.
--   
--   Input array should have 32 byte length.
importKey :: ByteArrayAccess privateKey => privateKey -> PrivateKey

-- | Export private key to byte array (32 byte length).
exportKey :: ByteArray privateKey => PrivateKey -> privateKey

-- | Get public key appropriate to private key.
--   
--   <i>WARNING:</i> Vulnerable to timing attacks.
derivePubKey :: PrivateKey -> PublicKey

-- | Export public key to byte array (64 byte length).
exportPubKey :: ByteArray publicKey => PublicKey -> publicKey

-- | Keccak 256 hash function.
sha3 :: (ByteArrayAccess bin, ByteArray bout) => bin -> bout


-- | NIST standardized number-theoretically secure random number generator.
--   <a>https://csrc.nist.gov/csrc/media/events/random-number-generation-workshop-2004/documents/hashblockcipherdrbg.pdf</a>
--   
--   XXX: This algorithm requires reseed after 2^48 iterations.
--   
--   <pre>
--   Inspired by https://github.com/TomMD/DRBG and https://github.com/indutny/hmac-drbg.
--   </pre>
module Crypto.Random.HmacDrbg

-- | HMAC Deterministic Random Bytes Generator.
data HmacDrbg a

-- | Initialize HMAC-DRBG by seed.
initialize :: (ByteArray seed, HashAlgorithm a) => seed -> HmacDrbg a
instance GHC.Classes.Eq (Crypto.Random.HmacDrbg.HmacDrbg a)
instance Crypto.Hash.Types.HashAlgorithm a => Crypto.Random.Types.DRG (Crypto.Random.HmacDrbg.HmacDrbg a)


-- | Hex string data type and useful functions.
module Data.ByteArray.HexString

-- | Represents a Hex string. Guarantees that all characters it contains
--   are valid hex characters.
newtype HexString
HexString :: ByteString -> HexString
[unHexString] :: HexString -> ByteString

-- | Smart constructor which trims '0x' and validates length is even.
hexString :: ByteArray ba => ba -> Either String HexString

-- | Reads a raw bytes and converts to hex representation.
fromBytes :: ByteArrayAccess ba => ba -> HexString

-- | Access to the raw bytes of <a>HexString</a>.
toBytes :: ByteArray ba => HexString -> ba

-- | Access to a <a>Text</a> representation of the <a>HexString</a>
toText :: HexString -> Text
instance Data.ByteArray.Types.ByteArray Data.ByteArray.HexString.HexString
instance Data.ByteArray.Types.ByteArrayAccess Data.ByteArray.HexString.HexString
instance GHC.Base.Monoid Data.ByteArray.HexString.HexString
instance GHC.Base.Semigroup Data.ByteArray.HexString.HexString
instance GHC.Classes.Ord Data.ByteArray.HexString.HexString
instance GHC.Classes.Eq Data.ByteArray.HexString.HexString
instance GHC.Show.Show Data.ByteArray.HexString.HexString
instance Data.String.IsString Data.ByteArray.HexString.HexString
instance Data.Aeson.Types.FromJSON.FromJSON Data.ByteArray.HexString.HexString
instance Data.Aeson.Types.ToJSON.ToJSON Data.ByteArray.HexString.HexString


-- | Web3 Secret Storage implementation. Spec
--   <a>https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition</a>.
module Crypto.Ethereum.Keyfile

-- | Secret Storage representation on memory.
data EncryptedKey
EncryptedKey :: !UUID -> !Int -> !Cipher -> !Kdf -> !HexString -> EncryptedKey

-- | Random key ID
[encryptedKeyId] :: EncryptedKey -> !UUID

-- | Version (suppoted version 3 only)
[encryptedKeyVersion] :: EncryptedKey -> !Int

-- | Cipher (supported AES-128-CTR only)
[encryptedKeyCipher] :: EncryptedKey -> !Cipher

-- | Key derivation function
[encryptedKeyKdf] :: EncryptedKey -> !Kdf

-- | MAC
[encryptedKeyMac] :: EncryptedKey -> !HexString

-- | Cipher parameters.
data Cipher
Aes128Ctr :: !IV AES128 -> !HexString -> Cipher
[cipherIv] :: Cipher -> !IV AES128
[cipherText] :: Cipher -> !HexString

-- | Key derivation function parameters and salt.
data Kdf
Pbkdf2 :: !Parameters -> !HexString -> Kdf
Scrypt :: !Parameters -> !HexString -> Kdf

-- | Decrypt Ethereum private key.
--   
--   Typically Web3 Secret Storage is JSON-encoded. <a>EncryptedKey</a>
--   data type has <a>FromJSON</a> instance to helps decode it from
--   JSON-encoded string or file.
--   
--   <pre>
--   let decryptJSON pass = flip decrypt pass &lt;=&lt; decode
--   </pre>
decrypt :: (ByteArrayAccess password, ByteArray privateKey) => EncryptedKey -> password -> Maybe privateKey

-- | Encrypt Ethereum private key.
--   
--   <pre>
--   let encryptJSON pass key = encode <a>$</a> encrypt key pass
--   </pre>
encrypt :: (ByteArray privateKey, ByteArrayAccess password, MonadRandom m) => privateKey -> password -> m EncryptedKey
instance GHC.Classes.Eq Crypto.Ethereum.Keyfile.EncryptedKey
instance GHC.Show.Show Crypto.Ethereum.Keyfile.EncryptedKey
instance Data.Aeson.Types.FromJSON.FromJSON Crypto.Ethereum.Keyfile.EncryptedKey
instance Data.Aeson.Types.ToJSON.ToJSON Crypto.Ethereum.Keyfile.EncryptedKey


-- | The Application Binary Interface is the standard way to interact with
--   contracts in the Ethereum ecosystem, both from outside the blockchain
--   and for contract-to-contract interaction. Data is encoded according to
--   its type, as described in this specification. The encoding is not self
--   describing and thus requires a schema in order to decode.
module Data.Solidity.Abi

-- | 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 <tt>DeriveGeneric</tt> and
--   <tt>DefaultSignatures</tt> language extensions (<tt>ghc &gt;=
--   7.2.1</tt>), the <a>abiPut</a> method will have default generic
--   implementations.
--   
--   To use this option, simply add a <tt>deriving <a>Generic</a></tt>
--   clause to your datatype and declare a <a>AbiPut</a> instance for it
--   without giving a definition for <a>abiPut</a>.
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 encoding generically composed datatypes to their abi
--   encoding
class GenericAbiPut a
gAbiPut :: GenericAbiPut a => Putter a

-- | A class for decoding datatypes from their abi encoding
--   
--   If your compiler has support for the <tt>DeriveGeneric</tt> and
--   <tt>DefaultSignatures</tt> language extensions (<tt>ghc &gt;=
--   7.2.1</tt>), the <a>abiGet</a> method will have default generic
--   implementations.
--   
--   To use this option, simply add a <tt>deriving <a>Generic</a></tt>
--   clause to your datatype and declare a <a>AbiGet</a> instance for it
--   without giving a definition for <a>abiGet</a>.
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 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 Data.Solidity.Event.Internal
data HList :: [Type] -> Type
[HNil] :: HList '[]
[:<] :: a -> HList as -> HList (a : as)
infixr 0 :<

-- | 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 (Data.Solidity.Event.Internal.HListMergeSort as bs, Data.Solidity.Event.Internal.MergeSort' as bs Data.Type.Equality.~ cs, Data.Solidity.Event.Internal.UnTag cs, Data.Solidity.Event.Internal.UnTag cs' Data.Type.Equality.~ ds) => Data.Solidity.Event.Internal.MergeIndexedArguments as bs
instance (Data.Solidity.Event.Internal.HListMerge as bs, Data.Solidity.Event.Internal.Concat as bs Data.Type.Equality.~ cs, Data.Solidity.Event.Internal.Sort cs, Data.Solidity.Event.Internal.Sort' cs Data.Type.Equality.~ cs') => Data.Solidity.Event.Internal.HListMergeSort as bs
instance Data.Solidity.Event.Internal.HListMerge '[] bs
instance Data.Solidity.Event.Internal.HListMerge as bs => Data.Solidity.Event.Internal.HListMerge (a : as) bs
instance Data.Solidity.Event.Internal.UnTag '[]
instance forall k (ts :: [*]) (n :: k) a. Data.Solidity.Event.Internal.UnTag ts => Data.Solidity.Event.Internal.UnTag (Data.Tagged.Tagged n a : ts)
instance Data.Solidity.Event.Internal.InsertCmp (GHC.TypeNats.CmpNat n m) (Data.Tagged.Tagged n x) (Data.Tagged.Tagged m y) ys => Data.Solidity.Event.Internal.Insert (Data.Tagged.Tagged n x) (Data.Tagged.Tagged m y : ys)
instance Data.Solidity.Event.Internal.InsertCmp 'GHC.Types.LT x y ys
instance Data.Solidity.Event.Internal.Insert x ys => Data.Solidity.Event.Internal.InsertCmp 'GHC.Types.GT x y ys
instance (Data.Solidity.Event.Internal.Sort xs, Data.Solidity.Event.Internal.Insert x (Data.Solidity.Event.Internal.Sort' xs)) => Data.Solidity.Event.Internal.Sort (x : xs)
instance Data.Solidity.Event.Internal.Insert x '[]
instance Data.Solidity.Event.Internal.Sort '[]
instance Data.Solidity.Event.Internal.HListRep (Data.SOP.NP.NP Data.SOP.BasicFunctors.I '[]) '[]
instance Data.Solidity.Event.Internal.HListRep (Data.SOP.NP.NP Data.SOP.BasicFunctors.I as) as => Data.Solidity.Event.Internal.HListRep (Data.SOP.NP.NP Data.SOP.BasicFunctors.I (a : as)) (a : as)
instance forall k (f :: k -> *) (as' :: [k]) (as :: [*]). Data.Solidity.Event.Internal.HListRep (Data.SOP.NP.NP f as') as => Data.Solidity.Event.Internal.HListRep (Data.SOP.NS.SOP f '[as']) as


-- | Ethereum Abi intN and uintN types.
module Data.Solidity.Prim.Int

-- | Signed integer with fixed length in bits.
data IntN (n :: Nat)

-- | Unsigned integer with fixed length in bits.
data UIntN (n :: Nat)

-- | Deserialize 256 bit unsigned integer.
getWord256 :: Get Word256

-- | Serialize 256 bit unsigned integer.
putWord256 :: Putter Word256
instance GHC.Generics.Generic (Data.Solidity.Prim.Int.IntN n)
instance Data.Bits.Bits (Data.Solidity.Prim.Int.IntN n)
instance GHC.Enum.Enum (Data.Solidity.Prim.Int.IntN n)
instance GHC.Classes.Ord (Data.Solidity.Prim.Int.IntN n)
instance GHC.Classes.Eq (Data.Solidity.Prim.Int.IntN n)
instance GHC.Generics.Generic (Data.Solidity.Prim.Int.UIntN n)
instance Data.Bits.Bits (Data.Solidity.Prim.Int.UIntN n)
instance GHC.Enum.Enum (Data.Solidity.Prim.Int.UIntN n)
instance GHC.Classes.Ord (Data.Solidity.Prim.Int.UIntN n)
instance GHC.Classes.Eq (Data.Solidity.Prim.Int.UIntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Show.Show (Data.Solidity.Prim.Int.IntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Enum.Bounded (Data.Solidity.Prim.Int.IntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Num.Num (Data.Solidity.Prim.Int.IntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Real (Data.Solidity.Prim.Int.IntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Integral (Data.Solidity.Prim.Int.IntN n)
instance (n GHC.TypeNats.<= 256) => Data.Solidity.Abi.AbiType (Data.Solidity.Prim.Int.IntN n)
instance (n GHC.TypeNats.<= 256) => Data.Solidity.Abi.AbiGet (Data.Solidity.Prim.Int.IntN n)
instance (n GHC.TypeNats.<= 256) => Data.Solidity.Abi.AbiPut (Data.Solidity.Prim.Int.IntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Num.Num (Data.Solidity.Prim.Int.UIntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Show.Show (Data.Solidity.Prim.Int.UIntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Enum.Bounded (Data.Solidity.Prim.Int.UIntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Real (Data.Solidity.Prim.Int.UIntN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 256) => GHC.Real.Integral (Data.Solidity.Prim.Int.UIntN n)
instance (n GHC.TypeNats.<= 256) => Data.Solidity.Abi.AbiType (Data.Solidity.Prim.Int.UIntN n)
instance (n GHC.TypeNats.<= 256) => Data.Solidity.Abi.AbiGet (Data.Solidity.Prim.Int.UIntN n)
instance (n GHC.TypeNats.<= 256) => Data.Solidity.Abi.AbiPut (Data.Solidity.Prim.Int.UIntN n)
instance GHC.Real.Real Basement.Types.Word256.Word256
instance GHC.Real.Integral Basement.Types.Word256.Word256


-- | Bytes and BytesN primitive types.
module Data.Solidity.Prim.Bytes

-- | Simplest Byte Array
data Bytes

-- | Sized byte array with fixed length in bytes
type BytesN n = SizedByteArray n Bytes
instance (n GHC.TypeNats.<= 32) => Data.Solidity.Abi.AbiType (Data.Solidity.Prim.Bytes.BytesN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.Solidity.Abi.AbiGet (Data.Solidity.Prim.Bytes.BytesN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.Solidity.Abi.AbiPut (Data.Solidity.Prim.Bytes.BytesN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.String.IsString (Data.Solidity.Prim.Bytes.BytesN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.Aeson.Types.FromJSON.FromJSON (Data.Solidity.Prim.Bytes.BytesN n)
instance (GHC.TypeNats.KnownNat n, n GHC.TypeNats.<= 32) => Data.Aeson.Types.ToJSON.ToJSON (Data.Solidity.Prim.Bytes.BytesN n)
instance Data.Solidity.Abi.AbiType Data.ByteString.Internal.ByteString
instance Data.Solidity.Abi.AbiGet Data.ByteString.Internal.ByteString
instance Data.Solidity.Abi.AbiPut Data.ByteString.Internal.ByteString
instance Data.Solidity.Abi.AbiType Data.ByteArray.Bytes.Bytes
instance Data.Solidity.Abi.AbiGet Data.ByteArray.Bytes.Bytes
instance Data.Solidity.Abi.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 Data.Solidity.Prim.Bool
instance Data.Solidity.Abi.AbiType GHC.Types.Bool
instance Data.Solidity.Abi.AbiGet GHC.Types.Bool
instance Data.Solidity.Abi.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 Data.Solidity.Abi.Generic
instance forall k (f :: k -> *). Data.Solidity.Abi.Generic.AbiData (Data.SOP.NP.NP f '[])
instance (Data.Solidity.Abi.AbiType b, Data.Solidity.Abi.AbiPut b, Data.Solidity.Abi.Generic.AbiData (Data.SOP.NP.NP Data.SOP.BasicFunctors.I as)) => Data.Solidity.Abi.Generic.AbiData (Data.SOP.NP.NP Data.SOP.BasicFunctors.I (b : as))
instance forall k (f :: k -> *) (as :: [k]). Data.Solidity.Abi.Generic.AbiData (Data.SOP.NP.NP f as) => Data.Solidity.Abi.GenericAbiPut (Data.SOP.NS.SOP f '[as])
instance GHC.Classes.Eq Data.Solidity.Abi.Generic.EncodedValue
instance GHC.Classes.Ord Data.Solidity.Abi.Generic.EncodedValue
instance forall k (f :: k -> *). Data.Solidity.Abi.GenericAbiGet (Data.SOP.NP.NP f '[])
instance (Data.Solidity.Abi.AbiGet a, Data.Solidity.Abi.GenericAbiGet (Data.SOP.NP.NP Data.SOP.BasicFunctors.I as)) => Data.Solidity.Abi.GenericAbiGet (Data.SOP.NP.NP Data.SOP.BasicFunctors.I (a : as))
instance forall k (f :: k -> *) (as :: [k]). Data.Solidity.Abi.GenericAbiGet (Data.SOP.NP.NP f as) => Data.Solidity.Abi.GenericAbiGet (Data.SOP.NS.SOP f '[as])


-- | Solidity contract ABI encoding functions.
module Data.Solidity.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 <a>encode</a>
encode' :: (Generic a, Rep a ~ rep, GenericAbiPut rep, ByteArray ba) => a -> ba

-- | Generic driven version of <a>decode</a>
decode' :: (Generic a, Rep a ~ rep, GenericAbiGet rep, ByteArrayAccess ba) => ba -> Either String a


-- | Ethreum account address.
module Data.Solidity.Prim.Address

-- | Ethereum account address
data Address

-- | Encode address to hex string
toHexString :: Address -> HexString

-- | Decode address from hex string
fromHexString :: HexString -> Either String Address

-- | Derive address from secp256k1 public key
fromPubKey :: PublicKey -> Address

-- | Encode address with mixed-case checksum
--   <a>https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md</a>
toChecksum :: ByteString -> ByteString

-- | Verify mixed-case address checksum
--   <a>https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md</a>
verifyChecksum :: ByteString -> Bool
instance GHC.Generics.Generic Data.Solidity.Prim.Address.Address
instance GHC.Classes.Ord Data.Solidity.Prim.Address.Address
instance GHC.Classes.Eq Data.Solidity.Prim.Address.Address
instance Generics.SOP.Universe.Generic Data.Solidity.Prim.Address.Address
instance Data.Default.Class.Default Data.Solidity.Prim.Address.Address
instance GHC.Show.Show Data.Solidity.Prim.Address.Address
instance Data.String.IsString Data.Solidity.Prim.Address.Address
instance Data.Solidity.Abi.AbiType Data.Solidity.Prim.Address.Address
instance Data.Solidity.Abi.AbiGet Data.Solidity.Prim.Address.Address
instance Data.Solidity.Abi.AbiPut Data.Solidity.Prim.Address.Address
instance Data.Aeson.Types.FromJSON.FromJSON Data.Solidity.Prim.Address.Address
instance Data.Aeson.Types.ToJSON.ToJSON Data.Solidity.Prim.Address.Address


-- | Recoverable ECC signature support.
module Crypto.Ethereum.Signature

-- | Ethereum standard hashed message.
--   
--   The data will be UTF-8 HEX decoded and enveloped as follows:
--   "x19Ethereum Signed Message:n" + message.length + message and hashed
--   using keccak256.
hashMessage :: ByteArrayAccess message => message -> Digest Keccak_256

-- | Make Ethereum standard signature.
--   
--   The message is before enveloped as follows: "x19Ethereum Signed
--   Message:n" + message.length + message
--   
--   <i>WARNING:</i> Vulnerable to timing attacks.
signMessage :: (ByteArrayAccess message, ByteArray rsv) => PrivateKey -> message -> rsv

-- | Sign Ethereum transaction.
--   
--   <i>WARNING:</i> Vulnerable to timing attacks.
signTransaction :: ByteArray ba => (Maybe (Integer, Integer, Word8) -> ba) -> PrivateKey -> ba

-- | Pack recoverable signature as byte array (65 byte length).
pack :: ByteArray rsv => (Integer, Integer, Word8) -> rsv

-- | Unpack recoverable signature from byte array.
--   
--   Input array should have 65 byte length.
unpack :: ByteArrayAccess rsv => rsv -> (Integer, Integer, Word8)


-- | Ethereum ECC support module.
module Crypto.Ethereum

-- | ECDSA Private Key.
data PrivateKey

-- | ECDSA Public Key.
data PublicKey

-- | Import Ethereum private key from byte array.
--   
--   Input array should have 32 byte length.
importKey :: ByteArrayAccess privateKey => privateKey -> PrivateKey

-- | Get public key appropriate to private key.
--   
--   <i>WARNING:</i> Vulnerable to timing attacks.
derivePubKey :: PrivateKey -> PublicKey

-- | Make Ethereum standard signature.
--   
--   The message is before enveloped as follows: "x19Ethereum Signed
--   Message:n" + message.length + message
--   
--   <i>WARNING:</i> Vulnerable to timing attacks.
signMessage :: (ByteArrayAccess message, ByteArray rsv) => PrivateKey -> message -> rsv

-- | Keccak 256 hash function.
sha3 :: (ByteArrayAccess bin, ByteArray bout) => bin -> bout


-- | Ethereum Abi dynamic and static size vectors based on linked lists.
module Data.Solidity.Prim.List

-- | A Typed-level sized List equivalent to [a]
data ListN (n :: Nat) a
instance Data.Solidity.Abi.AbiType [a]
instance Data.Solidity.Abi.AbiPut a => Data.Solidity.Abi.AbiPut [a]
instance Data.Solidity.Abi.AbiGet a => Data.Solidity.Abi.AbiGet [a]
instance Data.Solidity.Abi.AbiType (Basement.Sized.List.ListN n a)
instance Data.Solidity.Abi.AbiPut a => Data.Solidity.Abi.AbiPut (Basement.Sized.List.ListN n a)
instance (Basement.Nat.NatWithinBound GHC.Types.Int n, GHC.TypeNats.KnownNat n, Data.Solidity.Abi.AbiGet a) => Data.Solidity.Abi.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 Data.Solidity.Prim.String
instance Data.Solidity.Abi.AbiType Data.Text.Internal.Text
instance Data.Solidity.Abi.AbiPut Data.Text.Internal.Text
instance Data.Solidity.Abi.AbiGet Data.Text.Internal.Text


-- | Ethereum Abi tagged types.
module Data.Solidity.Prim.Tagged

-- | A <tt><a>Tagged</a> s b</tt> value is a value <tt>b</tt> with an
--   attached phantom type <tt>s</tt>. 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 <tt>(s -&gt; b)</tt>, a
--   <tt><a>Tagged</a> s b</tt> can't try to use the argument <tt>s</tt> 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"
--   
--   <a>Tagged</a> has kind <tt>k -&gt; * -&gt; *</tt> if the compiler
--   supports <tt>PolyKinds</tt>, therefore there is an extra <tt>k</tt>
--   showing in the instance haddocks that may cause confusion.
data Tagged (s :: k) b :: forall k. () => k -> Type -> Type
instance forall k a (t :: k). Data.Solidity.Abi.AbiType a => Data.Solidity.Abi.AbiType (Data.Tagged.Tagged t a)
instance forall k a (t :: k). Data.Solidity.Abi.AbiPut a => Data.Solidity.Abi.AbiPut (Data.Tagged.Tagged t a)
instance forall k a (t :: k). Data.Solidity.Abi.AbiGet a => Data.Solidity.Abi.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 Data.Solidity.Prim.Tuple.TH
tupleDecs :: Int -> DecsQ


-- | Tuple type abi encoding instances.
module Data.Solidity.Prim.Tuple
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2) => Data.Solidity.Abi.AbiType (a1, a2)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2) => Data.Solidity.Abi.AbiGet (a1, a2)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2) => Data.Solidity.Abi.AbiPut (a1, a2)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3) => Data.Solidity.Abi.AbiType (a1, a2, a3)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3) => Data.Solidity.Abi.AbiGet (a1, a2, a3)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3) => Data.Solidity.Abi.AbiPut (a1, a2, a3)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13, Data.Solidity.Abi.AbiType a14) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13, Data.Solidity.Abi.AbiGet a14) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13, Data.Solidity.Abi.AbiPut a14) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13, Data.Solidity.Abi.AbiType a14, Data.Solidity.Abi.AbiType a15) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13, Data.Solidity.Abi.AbiGet a14, Data.Solidity.Abi.AbiGet a15) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13, Data.Solidity.Abi.AbiPut a14, Data.Solidity.Abi.AbiPut a15) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13, Data.Solidity.Abi.AbiType a14, Data.Solidity.Abi.AbiType a15, Data.Solidity.Abi.AbiType a16) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13, Data.Solidity.Abi.AbiGet a14, Data.Solidity.Abi.AbiGet a15, Data.Solidity.Abi.AbiGet a16) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13, Data.Solidity.Abi.AbiPut a14, Data.Solidity.Abi.AbiPut a15, Data.Solidity.Abi.AbiPut a16) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13, Data.Solidity.Abi.AbiType a14, Data.Solidity.Abi.AbiType a15, Data.Solidity.Abi.AbiType a16, Data.Solidity.Abi.AbiType a17) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13, Data.Solidity.Abi.AbiGet a14, Data.Solidity.Abi.AbiGet a15, Data.Solidity.Abi.AbiGet a16, Data.Solidity.Abi.AbiGet a17) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13, Data.Solidity.Abi.AbiPut a14, Data.Solidity.Abi.AbiPut a15, Data.Solidity.Abi.AbiPut a16, Data.Solidity.Abi.AbiPut a17) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13, Data.Solidity.Abi.AbiType a14, Data.Solidity.Abi.AbiType a15, Data.Solidity.Abi.AbiType a16, Data.Solidity.Abi.AbiType a17, Data.Solidity.Abi.AbiType a18) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13, Data.Solidity.Abi.AbiGet a14, Data.Solidity.Abi.AbiGet a15, Data.Solidity.Abi.AbiGet a16, Data.Solidity.Abi.AbiGet a17, Data.Solidity.Abi.AbiGet a18) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13, Data.Solidity.Abi.AbiPut a14, Data.Solidity.Abi.AbiPut a15, Data.Solidity.Abi.AbiPut a16, Data.Solidity.Abi.AbiPut a17, Data.Solidity.Abi.AbiPut a18) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13, Data.Solidity.Abi.AbiType a14, Data.Solidity.Abi.AbiType a15, Data.Solidity.Abi.AbiType a16, Data.Solidity.Abi.AbiType a17, Data.Solidity.Abi.AbiType a18, Data.Solidity.Abi.AbiType a19) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13, Data.Solidity.Abi.AbiGet a14, Data.Solidity.Abi.AbiGet a15, Data.Solidity.Abi.AbiGet a16, Data.Solidity.Abi.AbiGet a17, Data.Solidity.Abi.AbiGet a18, Data.Solidity.Abi.AbiGet a19) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13, Data.Solidity.Abi.AbiPut a14, Data.Solidity.Abi.AbiPut a15, Data.Solidity.Abi.AbiPut a16, Data.Solidity.Abi.AbiPut a17, Data.Solidity.Abi.AbiPut a18, Data.Solidity.Abi.AbiPut a19) => Data.Solidity.Abi.AbiPut (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19)
instance (Data.Solidity.Abi.AbiType a1, Data.Solidity.Abi.AbiType a2, Data.Solidity.Abi.AbiType a3, Data.Solidity.Abi.AbiType a4, Data.Solidity.Abi.AbiType a5, Data.Solidity.Abi.AbiType a6, Data.Solidity.Abi.AbiType a7, Data.Solidity.Abi.AbiType a8, Data.Solidity.Abi.AbiType a9, Data.Solidity.Abi.AbiType a10, Data.Solidity.Abi.AbiType a11, Data.Solidity.Abi.AbiType a12, Data.Solidity.Abi.AbiType a13, Data.Solidity.Abi.AbiType a14, Data.Solidity.Abi.AbiType a15, Data.Solidity.Abi.AbiType a16, Data.Solidity.Abi.AbiType a17, Data.Solidity.Abi.AbiType a18, Data.Solidity.Abi.AbiType a19, Data.Solidity.Abi.AbiType a20) => Data.Solidity.Abi.AbiType (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
instance (Data.Solidity.Abi.AbiGet a1, Data.Solidity.Abi.AbiGet a2, Data.Solidity.Abi.AbiGet a3, Data.Solidity.Abi.AbiGet a4, Data.Solidity.Abi.AbiGet a5, Data.Solidity.Abi.AbiGet a6, Data.Solidity.Abi.AbiGet a7, Data.Solidity.Abi.AbiGet a8, Data.Solidity.Abi.AbiGet a9, Data.Solidity.Abi.AbiGet a10, Data.Solidity.Abi.AbiGet a11, Data.Solidity.Abi.AbiGet a12, Data.Solidity.Abi.AbiGet a13, Data.Solidity.Abi.AbiGet a14, Data.Solidity.Abi.AbiGet a15, Data.Solidity.Abi.AbiGet a16, Data.Solidity.Abi.AbiGet a17, Data.Solidity.Abi.AbiGet a18, Data.Solidity.Abi.AbiGet a19, Data.Solidity.Abi.AbiGet a20) => Data.Solidity.Abi.AbiGet (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
instance (Data.Solidity.Abi.AbiPut a1, Data.Solidity.Abi.AbiPut a2, Data.Solidity.Abi.AbiPut a3, Data.Solidity.Abi.AbiPut a4, Data.Solidity.Abi.AbiPut a5, Data.Solidity.Abi.AbiPut a6, Data.Solidity.Abi.AbiPut a7, Data.Solidity.Abi.AbiPut a8, Data.Solidity.Abi.AbiPut a9, Data.Solidity.Abi.AbiPut a10, Data.Solidity.Abi.AbiPut a11, Data.Solidity.Abi.AbiPut a12, Data.Solidity.Abi.AbiPut a13, Data.Solidity.Abi.AbiPut a14, Data.Solidity.Abi.AbiPut a15, Data.Solidity.Abi.AbiPut a16, Data.Solidity.Abi.AbiPut a17, Data.Solidity.Abi.AbiPut a18, Data.Solidity.Abi.AbiPut a19, Data.Solidity.Abi.AbiPut a20) => Data.Solidity.Abi.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 (Data.Tuple.OneTuple.OneTuple a)
instance Generics.SOP.Universe.Generic (Data.Tuple.OneTuple.OneTuple a)
instance Data.Solidity.Abi.AbiType a => Data.Solidity.Abi.AbiType (Data.Tuple.OneTuple.OneTuple a)
instance Data.Solidity.Abi.AbiGet a => Data.Solidity.Abi.AbiGet (Data.Tuple.OneTuple.OneTuple a)
instance Data.Solidity.Abi.AbiPut a => Data.Solidity.Abi.AbiPut (Data.Tuple.OneTuple.OneTuple a)


-- | Solidity primitive data types.
module Data.Solidity.Prim

-- | Ethereum account address
data Address

-- | Simplest Byte Array
data Bytes

-- | Sized byte array with fixed length in bytes
type BytesN n = SizedByteArray n Bytes

-- | Signed integer with fixed length in bits.
data IntN (n :: Nat)

-- | Unsigned integer with fixed length in bits.
data UIntN (n :: Nat)

-- | A Typed-level sized List equivalent to [a]
data ListN (n :: Nat) a


-- | Extra string manipulation functions.
module Data.String.Extra

-- | Lower first char of string
toLowerFirst :: String -> String

-- | Upper first char of string
toUpperFirst :: String -> String


-- | JSON encoded contract ABI parsers.
module Language.Solidity.Abi

-- | 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 <tt>Delcaration</tt>
methodId :: Declaration -> Text

-- | Generate event <tt>topic0</tt> hash by givent event
--   <tt>Delcaration</tt>
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 Language.Solidity.Abi.SolidityType
instance GHC.Classes.Eq Language.Solidity.Abi.SolidityType
instance GHC.Classes.Ord Language.Solidity.Abi.ContractAbi
instance GHC.Classes.Eq Language.Solidity.Abi.ContractAbi
instance Data.Aeson.Types.FromJSON.FromJSON Language.Solidity.Abi.ContractAbi
instance Data.Aeson.Types.ToJSON.ToJSON Language.Solidity.Abi.ContractAbi
instance GHC.Show.Show Language.Solidity.Abi.ContractAbi
instance Data.Aeson.Types.ToJSON.ToJSON Language.Solidity.Abi.Declaration
instance Data.Aeson.Types.FromJSON.FromJSON Language.Solidity.Abi.Declaration
instance GHC.Show.Show Language.Solidity.Abi.Declaration
instance GHC.Classes.Eq Language.Solidity.Abi.Declaration
instance GHC.Classes.Ord Language.Solidity.Abi.Declaration
instance Data.Aeson.Types.ToJSON.ToJSON Language.Solidity.Abi.EventArg
instance Data.Aeson.Types.FromJSON.FromJSON Language.Solidity.Abi.EventArg
instance GHC.Classes.Ord Language.Solidity.Abi.EventArg
instance GHC.Classes.Eq Language.Solidity.Abi.EventArg
instance GHC.Show.Show Language.Solidity.Abi.EventArg
instance Data.Aeson.Types.ToJSON.ToJSON Language.Solidity.Abi.FunctionArg
instance Data.Aeson.Types.FromJSON.FromJSON Language.Solidity.Abi.FunctionArg
instance GHC.Classes.Ord Language.Solidity.Abi.FunctionArg
instance GHC.Classes.Eq Language.Solidity.Abi.FunctionArg
instance GHC.Show.Show Language.Solidity.Abi.FunctionArg


-- | Ethereum generic JSON-RPC types.
module Network.Ethereum.Api.Types

-- | 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 <tt>eth_syncing</tt>.
data SyncingState
Syncing :: SyncActive -> SyncingState
NotSyncing :: SyncingState

-- | Changes pulled by low-level call <tt>eth_getFilterChanges</tt>,
--   <tt>eth_getLogs</tt>, and <tt>eth_getFilterLogs</tt>
data Change
Change :: !Maybe Quantity -> !Maybe Quantity -> !Maybe HexString -> !Maybe HexString -> !Maybe Quantity -> !Address -> !HexString -> ![HexString] -> Change

-- | QUANTITY - integer of the log index position in the block. null when
--   its pending log.
[changeLogIndex] :: Change -> !Maybe Quantity

-- | QUANTITY - integer of the transactions index position log was created
--   from. null when its pending log.
[changeTransactionIndex] :: Change -> !Maybe Quantity

-- | DATA, 32 Bytes - hash of the transactions this log was created from.
--   null when its pending log.
[changeTransactionHash] :: Change -> !Maybe HexString

-- | DATA, 32 Bytes - hash of the block where this log was in. null when
--   its pending. null when its pending log.
[changeBlockHash] :: Change -> !Maybe HexString

-- | QUANTITY - the block number where this log was in. null when its
--   pending. null when its pending log.
[changeBlockNumber] :: Change -> !Maybe 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 -> !HexString

-- | 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 -> ![HexString]

-- | The contract call params.
data Call
Call :: !Maybe Address -> !Maybe Address -> !Maybe Quantity -> !Maybe Quantity -> !Maybe Quantity -> !Maybe HexString -> !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 HexString

-- | 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 HexString] -> 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 HexString]

-- | The Receipt of a Transaction
data TxReceipt
TxReceipt :: !HexString -> !Quantity -> !Maybe HexString -> !Maybe Quantity -> !Quantity -> !Quantity -> !Maybe Address -> ![Change] -> !HexString -> !Maybe Quantity -> TxReceipt

-- | DATA, 32 Bytes - hash of the transaction.
[receiptTransactionHash] :: TxReceipt -> !HexString

-- | 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 -> !Maybe HexString

-- | QUANTITY - block number where this transaction was in. null when its
--   pending.
[receiptBlockNumber] :: TxReceipt -> !Maybe 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 -> !HexString

-- | QUANTITY either 1 (success) or 0 (failure)
[receiptStatus] :: TxReceipt -> !Maybe Quantity

-- | Transaction information.
data Transaction
Transaction :: !HexString -> !Quantity -> !Maybe HexString -> !Maybe Quantity -> !Maybe Quantity -> !Address -> !Maybe Address -> !Quantity -> !Quantity -> !Quantity -> !HexString -> Transaction

-- | DATA, 32 Bytes - hash of the transaction.
[txHash] :: Transaction -> !HexString

-- | 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 -> !Maybe HexString

-- | QUANTITY - block number where this transaction was in. null when its
--   pending.
[txBlockNumber] :: Transaction -> !Maybe Quantity

-- | QUANTITY - integer of the transactions index position in the block.
--   null when its pending.
[txTransactionIndex] :: Transaction -> !Maybe 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 -> !HexString

-- | Block information.
data Block
Block :: !Maybe Quantity -> !Maybe HexString -> !HexString -> !Maybe HexString -> !HexString -> !Maybe HexString -> !HexString -> !HexString -> !Maybe HexString -> !Address -> !Quantity -> !Quantity -> !HexString -> !Quantity -> !Quantity -> !Quantity -> !Quantity -> ![Transaction] -> ![HexString] -> Block

-- | QUANTITY - the block number. null when its pending block.
[blockNumber] :: Block -> !Maybe Quantity

-- | DATA, 32 Bytes - hash of the block. null when its pending block.
[blockHash] :: Block -> !Maybe HexString

-- | DATA, 32 Bytes - hash of the parent block.
[blockParentHash] :: Block -> !HexString

-- | DATA, 8 Bytes - hash of the generated proof-of-work. null when its
--   pending block.
[blockNonce] :: Block -> !Maybe HexString

-- | DATA, 32 Bytes - SHA3 of the uncles data in the block.
[blockSha3Uncles] :: Block -> !HexString

-- | DATA, 256 Bytes - the bloom filter for the logs of the block. null
--   when its pending block.
[blockLogsBloom] :: Block -> !Maybe HexString

-- | DATA, 32 Bytes - the root of the transaction trie of the block.
[blockTransactionsRoot] :: Block -> !HexString

-- | DATA, 32 Bytes - the root of the final state trie of the block.
[blockStateRoot] :: Block -> !HexString

-- | DATA, 32 Bytes - the root of the receipts trie of the block.
[blockReceiptRoot] :: Block -> !Maybe HexString

-- | 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 -> !HexString

-- | 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 -> ![HexString]
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.Block
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.Types.Block
instance GHC.Generics.Generic Network.Ethereum.Api.Types.Block
instance GHC.Show.Show Network.Ethereum.Api.Types.Block
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.Transaction
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.Types.Transaction
instance GHC.Generics.Generic Network.Ethereum.Api.Types.Transaction
instance GHC.Show.Show Network.Ethereum.Api.Types.Transaction
instance GHC.Classes.Eq Network.Ethereum.Api.Types.Transaction
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.TxReceipt
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.Types.TxReceipt
instance GHC.Generics.Generic Network.Ethereum.Api.Types.TxReceipt
instance GHC.Show.Show Network.Ethereum.Api.Types.TxReceipt
instance GHC.Generics.Generic (Network.Ethereum.Api.Types.Filter e)
instance GHC.Show.Show (Network.Ethereum.Api.Types.Filter e)
instance GHC.Classes.Eq (Network.Ethereum.Api.Types.Filter e)
instance GHC.Generics.Generic Network.Ethereum.Api.Types.DefaultBlock
instance GHC.Show.Show Network.Ethereum.Api.Types.DefaultBlock
instance GHC.Classes.Eq Network.Ethereum.Api.Types.DefaultBlock
instance Data.Aeson.Types.ToJSON.ToJSON (Network.Ethereum.Api.Types.Filter e)
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.DefaultBlock
instance GHC.Classes.Ord Network.Ethereum.Api.Types.DefaultBlock
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.Call
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.Types.Call
instance Data.Default.Class.Default Network.Ethereum.Api.Types.Call
instance GHC.Generics.Generic Network.Ethereum.Api.Types.Call
instance GHC.Show.Show Network.Ethereum.Api.Types.Call
instance GHC.Classes.Eq Network.Ethereum.Api.Types.Call
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.Change
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.Types.Change
instance GHC.Generics.Generic Network.Ethereum.Api.Types.Change
instance GHC.Show.Show Network.Ethereum.Api.Types.Change
instance GHC.Classes.Eq Network.Ethereum.Api.Types.Change
instance GHC.Show.Show Network.Ethereum.Api.Types.SyncingState
instance GHC.Generics.Generic Network.Ethereum.Api.Types.SyncingState
instance GHC.Classes.Eq Network.Ethereum.Api.Types.SyncingState
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.Types.SyncingState
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.SyncActive
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.Types.SyncActive
instance GHC.Show.Show Network.Ethereum.Api.Types.SyncActive
instance GHC.Generics.Generic Network.Ethereum.Api.Types.SyncActive
instance GHC.Classes.Eq Network.Ethereum.Api.Types.SyncActive
instance GHC.Generics.Generic Network.Ethereum.Api.Types.Quantity
instance GHC.Classes.Ord Network.Ethereum.Api.Types.Quantity
instance GHC.Classes.Eq Network.Ethereum.Api.Types.Quantity
instance GHC.Enum.Enum Network.Ethereum.Api.Types.Quantity
instance GHC.Real.Integral Network.Ethereum.Api.Types.Quantity
instance GHC.Real.Real Network.Ethereum.Api.Types.Quantity
instance GHC.Num.Num Network.Ethereum.Api.Types.Quantity
instance GHC.Show.Show Network.Ethereum.Api.Types.Quantity
instance Data.String.IsString Network.Ethereum.Api.Types.Quantity
instance Data.Aeson.Types.ToJSON.ToJSON Network.Ethereum.Api.Types.Quantity
instance Data.Aeson.Types.FromJSON.FromJSON Network.Ethereum.Api.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 Data.Solidity.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 (Data.Solidity.Event.IndexedEvent i ni e, Generics.SOP.Universe.Generic i, Generics.SOP.Universe.Rep i Data.Type.Equality.~ Data.SOP.NS.SOP Data.SOP.BasicFunctors.I '[hli], Data.Solidity.Abi.AbiGet ni, Generics.SOP.Universe.Generic ni, Generics.SOP.Universe.Rep ni Data.Type.Equality.~ Data.SOP.NS.SOP Data.SOP.BasicFunctors.I '[hlni], Generics.SOP.Universe.Generic e, Generics.SOP.Universe.Rep e Data.Type.Equality.~ Data.SOP.NS.SOP Data.SOP.BasicFunctors.I '[hle], Data.Solidity.Event.CombineChange i ni e, Data.Solidity.Event.ArrayParser (Data.SOP.NS.SOP Data.SOP.BasicFunctors.I '[hli])) => Data.Solidity.Event.DecodeEvent i ni e
instance (Generics.SOP.Universe.Generic i, Generics.SOP.Universe.Rep i Data.Type.Equality.~ irep, Generics.SOP.Universe.Generic ni, Generics.SOP.Universe.Rep ni Data.Type.Equality.~ nirep, Generics.SOP.Universe.Generic e, Generics.SOP.Universe.Rep e Data.Type.Equality.~ erep, Data.Solidity.Event.Internal.HListRep irep hli, Data.Solidity.Event.Internal.HListRep nirep hlni, Data.Solidity.Event.Internal.MergeIndexedArguments hli hlni, Data.Solidity.Event.Internal.MergeIndexedArguments' hli hlni Data.Type.Equality.~ hle, Data.Solidity.Event.Internal.HListRep erep hle, Data.Solidity.Event.IndexedEvent i ni e) => Data.Solidity.Event.CombineChange i ni e
instance forall k (f :: k -> *). Data.Solidity.Event.ArrayParser (Data.SOP.NP.NP f '[])
instance (Data.Solidity.Event.ArrayParser (Data.SOP.NP.NP Data.SOP.BasicFunctors.I as), Data.Solidity.Abi.AbiGet a) => Data.Solidity.Event.ArrayParser (Data.SOP.NP.NP Data.SOP.BasicFunctors.I (a : as))
instance forall k (f :: k -> *) (as :: [k]). Data.Solidity.Event.ArrayParser (Data.SOP.NP.NP f as) => Data.Solidity.Event.ArrayParser (Data.SOP.NS.SOP f '[as])


-- | Ethereum chain IDs.
module Network.Ethereum.Chain

-- | Ethereum mainnet CHAIN_ID from EIP155
foundation :: Integer

-- | Ethereum testnet CHAIN_ID from EIP155
ropsten :: Integer

-- | Rokenby CHAIN_ID from EIP155
rikenby :: Integer

-- | Kovan CHAIN_ID from EIP155
kovan :: Integer

-- | Ethereum Classic mainnet CHAIN_ID from EIP155
classic :: Integer

-- | Ethereum Classic testnet CHAIN_ID from EIP155
classicTestnet :: Integer


-- | Ethereum contract method support.
module Network.Ethereum.Contract.Method

-- | Smart contract method encoding
class AbiPut a => Method a

-- | Solidity function selector
--   <a>https://solidity.readthedocs.io/en/latest/abi-spec.html#function-selector-and-argument-encoding</a>
selector :: Method a => Proxy a -> Bytes
instance Network.Ethereum.Contract.Method.Method ()
instance Data.Solidity.Abi.AbiType ()
instance Data.Solidity.Abi.AbiPut ()


-- | 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 <a>Wei</a>. Below is a list of the named denominations and
--   their value in <a>Wei</a>. Following a common (although somewhat
--   ambiguous) pattern, ether also designates a unit (of 1e18 or one
--   quintillion <a>Wei</a>) 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:
--   <a>Wei</a>, <a>Szabo</a>, <a>Finney</a>, etc. They are members of
--   <a>Unit</a> typeclass. Also available standart <a>Show</a>,
--   <a>Read</a>, <a>Num</a> operations over Ethereum units.
--   
--   <pre>
--   &gt; let x = 1.2 :: Ether
--   &gt; toWei x
--   1200000000000000000
--   
--   &gt; let y = x + 2
--   &gt; y
--   3.20 ether
--   
--   &gt; let z = 15 :: Szabo
--   &gt; y + z
--   
--   <a>interactive</a>:6:5: error:
--      • Couldn't match type ‘Network.Ethereum.Unit.U4’
--                      with ‘Network.Ethereum.Unit.U6’
--        Expected type: Ether
--        Actual type: Szabo
--   </pre>
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, Integral b) => b -> a

-- | Convert a value to integer wei
toWei :: (Unit a, Integral b) => a -> b

-- | 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)


-- | Transaction managing utils.
module Network.Ethereum.Transaction

-- | Ethereum transaction packer.
--   
--   Two way RLP encoding of Ethereum transaction: for unsigned and signed.
--   Packing scheme described in
--   <a>https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md</a>
encodeTransaction :: ByteArray ba => Call -> Integer -> Maybe (Integer, Integer, Word8) -> ba


-- | Tiny JSON-RPC 2.0 client. Functions for implementing the client side
--   of JSON-RPC 2.0. See <a>http://www.jsonrpc.org/specification</a>.
--   
--   If you have monad with <a>MonadIO</a>, <a>MonadThrow</a> and
--   <tt>MonadReader</tt> instances, it can be used as base for JSON-RPC
--   calls.
--   
--   Example:
--   
--   <pre>
--   newtype MyMonad a = ...
--   
--   instance JsonRpc MyMonad
--   
--   foo :: Mymonad Text
--   foo = remote "foo"
--   </pre>
--   
--   Arguments of function are stored into <tt>params</tt> request array.
--   
--   Example:
--   
--   <pre>
--   myMethod :: JsonRpc m =&gt; Int -&gt; Bool -&gt; m String
--   myMethod = remote "myMethod"
--   </pre>
module Network.JsonRpc.TinyClient

-- | JSON-RPC call monad.
class JsonRpcM m => JsonRpc m

-- | Remote call of JSON-RPC method.
remote :: (JsonRpc m, Remote m a) => MethodName -> a

-- | Name of called method.
type MethodName = Text

-- | JSON-RPC client state vars.
data JsonRpcClient

-- | Create default <a>JsonRpcClient</a> settings.
defaultSettings :: MonadIO m => String -> m JsonRpcClient
jsonRpcServer :: Lens' JsonRpcClient String
jsonRpcManager :: Lens' JsonRpcClient Manager
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
instance GHC.Classes.Eq Network.JsonRpc.TinyClient.JsonRpcException
instance GHC.Show.Show 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.Show.Show Network.JsonRpc.TinyClient.Request
instance GHC.Classes.Eq Network.JsonRpc.TinyClient.Request
instance (Data.Aeson.Types.ToJSON.ToJSON a, Network.JsonRpc.TinyClient.Remote m b) => Network.JsonRpc.TinyClient.Remote m (a -> b)
instance (Network.JsonRpc.TinyClient.JsonRpcM m, Data.Aeson.Types.FromJSON.FromJSON b) => Network.JsonRpc.TinyClient.Remote m (m b)
instance GHC.Exception.Type.Exception Network.JsonRpc.TinyClient.JsonRpcException
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
instance GHC.Show.Show Network.JsonRpc.TinyClient.JsonRpcClient


-- | Ethereum node JSON-RPC API methods with <tt>web3_</tt> prefix.
module Network.Ethereum.Api.Web3

-- | Returns current node version string.
clientVersion :: JsonRpc m => m Text

-- | Returns Keccak-256 (not the standardized SHA3-256) of the given data.
sha3 :: JsonRpc m => HexString -> m HexString


-- | Web3 service provider.
module Network.Ethereum.Api.Provider

-- | Any communication with Ethereum node wrapped with <a>Web3</a> monad
newtype Web3 a
Web3 :: StateT JsonRpcClient IO a -> Web3 a
[unWeb3] :: Web3 a -> StateT JsonRpcClient 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 :: String -> Provider

-- | <a>Web3</a> monad runner, using the supplied Manager
runWeb3With :: MonadIO m => Manager -> Provider -> Web3 a -> m (Either Web3Error a)

-- | <a>Web3</a> monad runner
runWeb3' :: MonadIO m => Provider -> Web3 a -> m (Either Web3Error a)

-- | <a>Web3</a> runner for default provider
runWeb3 :: MonadIO m => Web3 a -> m (Either Web3Error a)

-- | Fork <a>Web3</a> with the same <a>Provider</a> and <a>Manager</a>
forkWeb3 :: Web3 a -> Web3 (Async a)
instance GHC.Generics.Generic Network.Ethereum.Api.Provider.Provider
instance GHC.Classes.Eq Network.Ethereum.Api.Provider.Provider
instance GHC.Show.Show Network.Ethereum.Api.Provider.Provider
instance GHC.Generics.Generic Network.Ethereum.Api.Provider.Web3Error
instance GHC.Classes.Eq Network.Ethereum.Api.Provider.Web3Error
instance GHC.Show.Show Network.Ethereum.Api.Provider.Web3Error
instance Control.Monad.State.Class.MonadState Network.JsonRpc.TinyClient.JsonRpcClient Network.Ethereum.Api.Provider.Web3
instance Control.Monad.Catch.MonadThrow Network.Ethereum.Api.Provider.Web3
instance Control.Monad.IO.Class.MonadIO Network.Ethereum.Api.Provider.Web3
instance GHC.Base.Monad Network.Ethereum.Api.Provider.Web3
instance GHC.Base.Applicative Network.Ethereum.Api.Provider.Web3
instance GHC.Base.Functor Network.Ethereum.Api.Provider.Web3
instance Data.Default.Class.Default Network.Ethereum.Api.Provider.Provider
instance GHC.Exception.Type.Exception Network.Ethereum.Api.Provider.Web3Error
instance Network.JsonRpc.TinyClient.JsonRpc Network.Ethereum.Api.Provider.Web3


-- | Ethereum node JSON-RPC API methods with <tt>personal_</tt> prefix.
module Network.Ethereum.Api.Personal
type Passphrase = Text

-- | Imports the given unencrypted private key (hex string) into the key
--   store, encrypting it with the passphrase.
--   
--   Parameters:
--   
--   <ol>
--   <li>unencrypted private key</li>
--   <li>passphrase</li>
--   </ol>
--   
--   Returns: address of new account
importRawKey :: JsonRpc m => HexString -> Passphrase -> m Address

-- | Returns all the Ethereum account addresses of all keys in the key
--   store.
listAccounts :: JsonRpc m => m [Address]

-- | Removes the private key with given address from memory. The account
--   can no longer be used to send transactions.
lockAccount :: JsonRpc m => Address -> m Bool

-- | Generates a new private key and stores it in the key store directory.
--   The key file is encrypted with the given passphrase. Returns the
--   address of the new account.
newAccount :: JsonRpc m => Passphrase -> m Address

-- | Decrypts the key with the given address from the key store.
--   
--   The unencrypted key will be held in memory until it is locked again
--   
--   The account can be used with eth_sign and eth_sendTransaction while it
--   is unlocked.
unlockAccount :: JsonRpc m => Address -> Passphrase -> m Bool

-- | Validate the given passphrase and submit transaction.
--   
--   The transaction is the same argument as for eth_sendTransaction and
--   contains the from address. If the passphrase can be used to decrypt
--   the private key belonging to the transaction <tt>callFrom</tt>, the
--   transaction is verified, signed and send onto the network. The account
--   is not unlocked globally in the node and cannot be used in other RPC
--   calls.
sendTransaction :: JsonRpc m => Call -> Passphrase -> m HexString

-- | Returns an Ethereum specific signature with:
--   
--   sign(keccak256("x19Ethereum Signed Message:n" + len(message) +
--   message))).
--   
--   when given a passphrase to decrypt the account's private key
sign :: JsonRpc m => HexString -> Address -> Passphrase -> m HexString

-- | Recovers address given message and signature data
--   
--   Parameters:
--   
--   <ol>
--   <li>message: DATA, n bytes</li>
--   <li>signature: DATA, 65 bytes</li>
--   </ol>
--   
--   Returns: Address
ecRecover :: JsonRpc m => HexString -> HexString -> m Address


-- | Ethereum node JSON-RPC API methods with <tt>net_</tt> prefix.
module Network.Ethereum.Api.Net

-- | Returns the current network id.
version :: JsonRpc m => m Text

-- | Returns true if client is actively listening for network connections.
listening :: JsonRpc m => m Bool

-- | Returns number of peers currently connected to the client.
peerCount :: JsonRpc m => m Quantity


-- | Ethereum node JSON-RPC API methods with <tt>eth_</tt> prefix.
module Network.Ethereum.Api.Eth

-- | Returns the current ethereum protocol version.
protocolVersion :: JsonRpc m => m Text

-- | Returns an object with data about the sync status or false.
syncing :: JsonRpc m => m SyncingState

-- | Returns the client coinbase address.
coinbase :: JsonRpc m => m Address

-- | Returns true if client is actively mining new blocks.
mining :: JsonRpc m => m Bool

-- | Returns the number of hashes per second that the node is mining with.
hashrate :: JsonRpc m => m Quantity

-- | Returns the value from a storage position at a given address.
getStorageAt :: JsonRpc m => Address -> Quantity -> DefaultBlock -> m HexString

-- | Returns the number of transactions sent from an address.
getTransactionCount :: JsonRpc m => Address -> DefaultBlock -> m Quantity

-- | Returns the number of transactions in a block from a block matching
--   the given block hash.
getBlockTransactionCountByHash :: JsonRpc m => HexString -> m Quantity

-- | Returns the number of transactions in a block matching the given block
--   number.
getBlockTransactionCountByNumber :: JsonRpc m => Quantity -> m Quantity

-- | Returns the number of uncles in a block from a block matching the
--   given block hash.
getUncleCountByBlockHash :: JsonRpc m => HexString -> m Quantity

-- | Returns the number of uncles in a block from a block matching the
--   given block number.
getUncleCountByBlockNumber :: JsonRpc m => Quantity -> m Quantity

-- | Returns code at a given address.
getCode :: JsonRpc m => Address -> DefaultBlock -> m HexString

-- | Returns an Ethereum specific signature with:
--   sign(keccak256("x19Ethereum Signed Message:n" + len(message) +
--   message))).
sign :: JsonRpc m => Address -> HexString -> m HexString

-- | Creates new message call transaction or a contract creation, if the
--   data field contains code.
sendTransaction :: JsonRpc m => Call -> m HexString

-- | Creates new message call transaction or a contract creation for signed
--   transactions.
sendRawTransaction :: JsonRpc m => HexString -> m HexString

-- | Returns the balance of the account of given address.
getBalance :: JsonRpc m => Address -> DefaultBlock -> m Quantity

-- | Creates a filter object, based on filter options, to notify when the
--   state changes (logs). To check if the state has changed, call
--   <a>getFilterChanges</a>.
newFilter :: JsonRpc m => Filter e -> m Quantity

-- | Polling method for a filter, which returns an array of logs which
--   occurred since last poll.
getFilterChanges :: JsonRpc m => Quantity -> m [Change]

-- | Uninstalls a filter with given id. Should always be called when watch
--   is no longer needed.
uninstallFilter :: JsonRpc m => Quantity -> m Bool

-- | Returns an array of all logs matching a given filter object.
getLogs :: JsonRpc m => Filter e -> m [Change]

-- | Executes a new message call immediately without creating a transaction
--   on the block chain.
call :: JsonRpc m => Call -> DefaultBlock -> m HexString

-- | 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 :: JsonRpc m => Call -> m Quantity

-- | Returns information about a block by hash.
getBlockByHash :: JsonRpc m => HexString -> m Block

-- | Returns information about a block by block number.
getBlockByNumber :: JsonRpc m => Quantity -> m Block

-- | Returns the information about a transaction requested by transaction
--   hash.
getTransactionByHash :: JsonRpc m => HexString -> m (Maybe Transaction)

-- | Returns information about a transaction by block hash and transaction
--   index position.
getTransactionByBlockHashAndIndex :: JsonRpc m => HexString -> Quantity -> m (Maybe Transaction)

-- | Returns information about a transaction by block number and
--   transaction index position.
getTransactionByBlockNumberAndIndex :: JsonRpc m => DefaultBlock -> Quantity -> m (Maybe Transaction)

-- | Returns the receipt of a transaction by transaction hash.
getTransactionReceipt :: JsonRpc m => HexString -> m (Maybe TxReceipt)

-- | Returns a list of addresses owned by client.
accounts :: JsonRpc m => m [Address]

-- | Creates a filter in the node, to notify when a new block arrives.
newBlockFilter :: JsonRpc m => m Quantity

-- | Polling method for a block filter, which returns an array of block
--   hashes occurred since last poll.
getBlockFilterChanges :: JsonRpc m => Quantity -> m [HexString]

-- | Returns the number of most recent block.
blockNumber :: JsonRpc m => m Quantity

-- | Returns the current price per gas in wei.
gasPrice :: JsonRpc m => m Quantity

-- | Returns information about a uncle of a block by hash and uncle index
--   position.
getUncleByBlockHashAndIndex :: JsonRpc m => HexString -> Quantity -> m Block

-- | Returns information about a uncle of a block by number and uncle index
--   position.
getUncleByBlockNumberAndIndex :: JsonRpc m => DefaultBlock -> Quantity -> m 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 :: JsonRpc m => m Quantity

-- | Returns an array of all logs matching filter with given id.
getFilterLogs :: JsonRpc m => Quantity -> m [Change]

-- | Returns the hash of the current block, the seedHash, and the boundary
--   condition to be met ("target").
getWork :: JsonRpc m => m [HexString]

-- | 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 :: JsonRpc m => HexString -> HexString -> HexString -> m 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 :: JsonRpc m => HexString -> HexString -> m Bool


-- | Common event manipulation functions.
module Network.Ethereum.Contract.Event.Common

-- | Event callback control response
data EventAction

-- | Continue to listen events
ContinueEvent :: EventAction

-- | Terminate event listener
TerminateEvent :: EventAction
data FilterChange a
FilterChange :: Change -> a -> FilterChange a
[filterChangeRawChange] :: FilterChange a -> Change
[filterChangeEvent] :: FilterChange a -> a
data EventParseFailure
EventParseFailure :: String -> EventParseFailure
mkFilterChanges :: DecodeEvent i ni e => [Change] -> IO [FilterChange e]
data FilterStreamState e
FilterStreamState :: Quantity -> Filter e -> Integer -> FilterStreamState e
[fssCurrentBlock] :: FilterStreamState e -> Quantity
[fssInitialFilter] :: FilterStreamState e -> Filter e
[fssWindowSize] :: FilterStreamState e -> Integer

-- | Coerce a <a>DefaultBlock</a> into a numerical block number.
mkBlockNumber :: DefaultBlock -> Web3 Quantity
pollTillBlockProgress :: Quantity -> Web3 Quantity
instance GHC.Show.Show Network.Ethereum.Contract.Event.Common.EventParseFailure
instance GHC.Classes.Eq Network.Ethereum.Contract.Event.Common.EventAction
instance GHC.Show.Show Network.Ethereum.Contract.Event.Common.EventAction
instance GHC.Exception.Type.Exception Network.Ethereum.Contract.Event.Common.EventParseFailure


-- | Simple contract event filter support.
module Network.Ethereum.Contract.Event.SingleFilter

-- | Run 'event\'' one block at a time.
event :: DecodeEvent i ni e => Filter e -> (e -> ReaderT Change Web3 EventAction) -> Web3 (Async ())

-- | Same as <a>event</a>, 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 <tt>eventLogs</tt> results
--   using <a>reduceEventStream</a>. If no <a>TerminateEvent</a> 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 ()

-- | Run 'event\'' one block at a time.
eventNoFilter :: DecodeEvent i ni e => Filter e -> (e -> ReaderT Change Web3 EventAction) -> Web3 (Async ())

-- | Same as <a>event</a>, but does not immediately spawn a new thread.
eventNoFilter' :: DecodeEvent i ni e => Filter e -> (e -> ReaderT Change Web3 EventAction) -> Web3 ()
eventManyNoFilter' :: DecodeEvent i ni e => Filter e -> Integer -> (e -> ReaderT Change Web3 EventAction) -> Web3 ()


-- | Support for parallel multiple event filters.
module Network.Ethereum.Contract.Event.MultiFilter

-- | MultiFilters
data MultiFilter (es :: [*])
[NilFilters] :: MultiFilter '[]
[:?] :: Filter e -> MultiFilter es -> MultiFilter (e : es)
infixr 5 :?
minStartBlock :: MultiFilter es -> DefaultBlock
minEndBlock :: MultiFilter es -> DefaultBlock
modifyMultiFilter :: (forall e. Filter e -> Filter e) -> MultiFilter es -> MultiFilter es
multiEvent :: (PollFilters es, QueryAllLogs es, MapHandlers Web3 es (WithChange es), RPureConstrained HasLogIndex (WithChange es), RecApplicative (WithChange es)) => MultiFilter es -> Handlers es (ReaderT Change Web3 EventAction) -> Web3 (Async ())
multiEvent' :: (PollFilters es, QueryAllLogs es, MapHandlers Web3 es (WithChange es), RPureConstrained HasLogIndex (WithChange es), RecApplicative (WithChange es)) => MultiFilter es -> Handlers es (ReaderT Change Web3 EventAction) -> Web3 ()
multiEventMany' :: (PollFilters es, QueryAllLogs es, MapHandlers Web3 es (WithChange es), RPureConstrained HasLogIndex (WithChange es), RecApplicative (WithChange es)) => MultiFilter es -> Integer -> Handlers es (ReaderT Change Web3 EventAction) -> Web3 ()
multiEventNoFilter :: (QueryAllLogs es, MapHandlers Web3 es (WithChange es), RPureConstrained HasLogIndex (WithChange es), RecApplicative (WithChange es)) => MultiFilter es -> Handlers es (ReaderT Change Web3 EventAction) -> Web3 (Async ())
multiEventNoFilter' :: (QueryAllLogs es, MapHandlers Web3 es (WithChange es), RPureConstrained HasLogIndex (WithChange es), RecApplicative (WithChange es)) => MultiFilter es -> Handlers es (ReaderT Change Web3 EventAction) -> Web3 ()
multiEventManyNoFilter' :: (QueryAllLogs es, MapHandlers Web3 es (WithChange es), RPureConstrained HasLogIndex (WithChange es), RecApplicative (WithChange es)) => MultiFilter es -> Integer -> Handlers es (ReaderT Change Web3 EventAction) -> Web3 ()

-- | 'Handlers ts b', is essentially a list of functions, one for each type
--   in ts. All functions produce a value of type <tt>b</tt>. Hence,
--   'Handlers ts b' would represent something like the type-level list: [t
--   -&gt; b | t in ts ]
type Handlers (ts :: [Type]) b = Rec Handler b ts

-- | Newtype around functions for a to b
newtype Handler b a
H :: (a -> b) -> Handler b a

-- | A record is parameterized by a universe <tt>u</tt>, an interpretation
--   <tt>f</tt> and a list of rows <tt>rs</tt>. The labels or indices of
--   the record are given by inhabitants of the kind <tt>u</tt>; the type
--   of values at any label <tt>r :: u</tt> is given by its interpretation
--   <tt>f r :: *</tt>.
data Rec (a :: u -> Type) (b :: [u]) :: forall u. () => u -> Type -> [u] -> Type
[RNil] :: forall u (a :: u -> Type) (b :: [u]). () => Rec a ([] :: [u])
[:&] :: forall u (a :: u -> Type) (b :: [u]) (r :: u) (rs :: [u]). () => !a r -> !Rec a rs -> Rec a (r : rs)
infixr 7 :&
instance Network.Ethereum.Contract.Event.MultiFilter.PollFilters '[]
instance (Data.Solidity.Event.DecodeEvent i ni e, Network.Ethereum.Contract.Event.MultiFilter.PollFilters es, Data.Vinyl.Core.RecApplicative (Network.Ethereum.Contract.Event.MultiFilter.WithChange es), Data.Vinyl.CoRec.FoldRec (Network.Ethereum.Contract.Event.Common.FilterChange e : Network.Ethereum.Contract.Event.MultiFilter.WithChange es) (Network.Ethereum.Contract.Event.MultiFilter.WithChange es)) => Network.Ethereum.Contract.Event.MultiFilter.PollFilters (e : es)
instance GHC.Base.Monad m => Network.Ethereum.Contract.Event.MultiFilter.MapHandlers m '[] '[]
instance (GHC.Base.Monad m, Network.Ethereum.Contract.Event.MultiFilter.MapHandlers m es es') => Network.Ethereum.Contract.Event.MultiFilter.MapHandlers m (e : es) (Network.Ethereum.Contract.Event.Common.FilterChange e : es')
instance Network.Ethereum.Contract.Event.MultiFilter.HasLogIndex (Network.Ethereum.Contract.Event.Common.FilterChange e)
instance Network.Ethereum.Contract.Event.MultiFilter.QueryAllLogs '[]
instance (Data.Solidity.Event.DecodeEvent i ni e, Network.Ethereum.Contract.Event.MultiFilter.QueryAllLogs es, Data.Vinyl.Core.RecApplicative (Network.Ethereum.Contract.Event.MultiFilter.WithChange es), Data.Vinyl.CoRec.FoldRec (Network.Ethereum.Contract.Event.Common.FilterChange e : Network.Ethereum.Contract.Event.MultiFilter.WithChange es) (Network.Ethereum.Contract.Event.MultiFilter.WithChange es)) => Network.Ethereum.Contract.Event.MultiFilter.QueryAllLogs (e : es)


-- | Ethereum contract event support.
module Network.Ethereum.Contract.Event


-- | Ethereum external owned account abstraction.
module Network.Ethereum.Account.Class

-- | Account is needed for sending transactions to blockchain
--   
--   Typically account is provided by node. In this case node manage
--   accounts: encrypt and decrypt private keys, manipulate files etc. In
--   other case web3 can derive account from private key and send to node
--   already signed transactions.
class MonadTrans t => Account a t | t -> a

-- | Run computation with given account credentials
withAccount :: (Account a t, JsonRpc m) => a -> t m b -> m b

-- | Send transaction to contract, like a <tt>write</tt> command
send :: (Account a t, JsonRpc m, Method args) => args -> t m TxReceipt

-- | Call constant method of contract, like a <a>read</a> command
call :: (Account a t, JsonRpc m, Method args, AbiGet result) => args -> t m result


-- | Internal types and functions of <a>Account</a> module.
module Network.Ethereum.Account.Internal

-- | Account is needed to send transactions to blockchain
--   
--   Transaction parametrization data type
data CallParam p
CallParam :: Maybe Address -> Integer -> Maybe Integer -> Maybe Integer -> DefaultBlock -> p -> CallParam p

-- | Transaction recepient
[_to] :: CallParam p -> Maybe Address

-- | Transaction value
[_value] :: CallParam p -> Integer

-- | Transaction gas limit
[_gasLimit] :: CallParam p -> Maybe Integer

-- | Transaction gas price
[_gasPrice] :: CallParam p -> Maybe Integer

-- | Call block number
[_block] :: CallParam p -> DefaultBlock

-- | Account params to sign transaction
[_account] :: CallParam p -> p

-- | Transaction recipient lens
to :: Lens' (CallParam p) Address

-- | Transaction value lens
value :: Unit value => Lens' (CallParam p) value

-- | Transaction gas limit lens
gasLimit :: Lens' (CallParam p) Integer

-- | Transaction gas price lens
gasPrice :: Unit gasprice => Lens' (CallParam p) gasprice

-- | Call execution block lens
block :: Lens' (CallParam p) DefaultBlock

-- | EOA params lens
account :: Lens' (CallParam p) p

-- | Monad transformer for sending parametrized transactions from account
newtype AccountT p m a
AccountT :: StateT (CallParam p) m a -> AccountT p m a
[runAccountT] :: AccountT p m a -> StateT (CallParam p) m a

-- | <tt>withParam</tt> is very similar to <tt>withStateT</tt> function,
--   it's used to set parameters of transaction locally and revert params
--   after out of scope.
--   
--   <pre>
--   withAccount () $
--     withParam (to .~ tokenAddress) $
--       transfer alice 42
--   
--   </pre>
withParam :: Account p (AccountT p) => (CallParam p -> CallParam p) -> AccountT p m a -> AccountT p m a
defaultCallParam :: a -> CallParam a
getCall :: MonadState (CallParam p) m => m Call
getReceipt :: JsonRpc m => HexString -> m TxReceipt
updateReceipt :: JsonRpc m => TxReceipt -> m TxReceipt
instance Control.Monad.Trans.Class.MonadTrans (Network.Ethereum.Account.Internal.AccountT p)
instance GHC.Base.Monad m => GHC.Base.Monad (Network.Ethereum.Account.Internal.AccountT p m)
instance GHC.Base.Monad m => GHC.Base.Applicative (Network.Ethereum.Account.Internal.AccountT p m)
instance GHC.Base.Functor m => GHC.Base.Functor (Network.Ethereum.Account.Internal.AccountT p m)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Network.Ethereum.Account.Internal.CallParam p)
instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState (Network.Ethereum.Account.Internal.CallParam p) (Network.Ethereum.Account.Internal.AccountT p m)


-- | Safe sending of Ethereum transaction.
module Network.Ethereum.Account.Safe

-- | Safe version of <a>send</a> function of <a>Account</a> typeclass
--   Waiting for some blocks of transaction confirmation before return
safeSend :: (Account p t, JsonRpc m, Method args, Monad (t m)) => Integer -> args -> t m TxReceipt

-- | Count block confirmation to keep secure According to Vitalik post
--   <a>https://blog.ethereum.org/2015/09/14/on-slow-and-fast-block-times/</a>
safeConfirmations :: Integer


-- | Smart contract type class and utils. A contract in the sense of
--   Solidity is a collection of code (its functions) and data (its state)
--   that resides at a specific address on the Ethereum blockchain.
module Network.Ethereum.Contract

-- | Contract description type clase
class Contract a

-- | Contract Solidity ABI
--   <a>https://solidity.readthedocs.io/en/latest/abi-spec.html</a>
abi :: Contract a => Proxy a -> Text

-- | Contract bytecode as hex string
bytecode :: Contract a => Proxy a -> HexString

-- | Create new smart contract on blockchain
new :: (Account p t, JsonRpc m, Method a, Monad (t m)) => a -> t m (Maybe Address)


-- | 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 <tt>ERC20.json</tt>. 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.
--   
--   <pre>
--   import Network.Ethereum.Contract.TH
--   
--   [abiFrom|examples/ERC20.json|]
--   
--   main = do
--       runWeb3 $ event' def $
--          (Transfer _ to val) -&gt; liftIO $ do print to
--                                              print val
--   </pre>
--   
--   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 Name System registry smart contract.
module Network.Ethereum.Ens.Registry
data OwnerData
OwnerData :: {-# NOUNPACK #-} !BytesN 32 -> OwnerData
data ResolverData
ResolverData :: {-# NOUNPACK #-} !BytesN 32 -> ResolverData
data SetOwnerData
SetOwnerData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> SetOwnerData
data SetResolverData
SetResolverData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> SetResolverData
data SetSubnodeOwnerData
SetSubnodeOwnerData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> SetSubnodeOwnerData
data SetTTLData
SetTTLData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !UIntN 64 -> SetTTLData
data TtlData
TtlData :: {-# NOUNPACK #-} !BytesN 32 -> TtlData
data NewOwnerIndexed
NewOwnerIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> {-# NOUNPACK #-} !Tagged 2 (BytesN 32) -> NewOwnerIndexed
data NewOwnerNonIndexed
NewOwnerNonIndexed :: {-# NOUNPACK #-} !Tagged 3 Address -> NewOwnerNonIndexed
data NewOwner
NewOwner :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> NewOwner
[newOwnerNode_] :: NewOwner -> {-# NOUNPACK #-} !BytesN 32
[newOwnerLabel_] :: NewOwner -> {-# NOUNPACK #-} !BytesN 32
[newOwnerOwner_] :: NewOwner -> {-# NOUNPACK #-} !Address
data NewResolverIndexed
NewResolverIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> NewResolverIndexed
data NewResolverNonIndexed
NewResolverNonIndexed :: {-# NOUNPACK #-} !Tagged 2 Address -> NewResolverNonIndexed
data NewResolver
NewResolver :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> NewResolver
[newResolverNode_] :: NewResolver -> {-# NOUNPACK #-} !BytesN 32
[newResolverResolver_] :: NewResolver -> {-# NOUNPACK #-} !Address
data NewTTLIndexed
NewTTLIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> NewTTLIndexed
data NewTTLNonIndexed
NewTTLNonIndexed :: {-# NOUNPACK #-} !Tagged 2 (UIntN 64) -> NewTTLNonIndexed
data NewTTL
NewTTL :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !UIntN 64 -> NewTTL
[newTTLNode_] :: NewTTL -> {-# NOUNPACK #-} !BytesN 32
[newTTLTtl_] :: NewTTL -> {-# NOUNPACK #-} !UIntN 64
data TransferIndexed
TransferIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> TransferIndexed
data TransferNonIndexed
TransferNonIndexed :: {-# NOUNPACK #-} !Tagged 2 Address -> TransferNonIndexed
data Transfer
Transfer :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> Transfer
[transferNode_] :: Transfer -> {-# NOUNPACK #-} !BytesN 32
[transferOwner_] :: Transfer -> {-# NOUNPACK #-} !Address
ttl :: (JsonRpc m_a1SxO, Account a_a1SxM t_a1SxN, Functor (t_a1SxN m_a1SxO)) => BytesN 32 -> t_a1SxN m_a1SxO (UIntN 64)
setTTL :: (JsonRpc m_a1SxK, Account a_a1SxI t_a1SxJ, Functor (t_a1SxJ m_a1SxK)) => BytesN 32 -> UIntN 64 -> t_a1SxJ m_a1SxK TxReceipt
setSubnodeOwner :: (JsonRpc m_a1SxF, Account a_a1SxD t_a1SxE, Functor (t_a1SxE m_a1SxF)) => BytesN 32 -> BytesN 32 -> Address -> t_a1SxE m_a1SxF TxReceipt
setResolver :: (JsonRpc m_a1Sxz, Account a_a1Sxx t_a1Sxy, Functor (t_a1Sxy m_a1Sxz)) => BytesN 32 -> Address -> t_a1Sxy m_a1Sxz TxReceipt
setOwner :: (JsonRpc m_a1Sxu, Account a_a1Sxs t_a1Sxt, Functor (t_a1Sxt m_a1Sxu)) => BytesN 32 -> Address -> t_a1Sxt m_a1Sxu TxReceipt
resolver :: (JsonRpc m_a1Sxp, Account a_a1Sxn t_a1Sxo, Functor (t_a1Sxo m_a1Sxp)) => BytesN 32 -> t_a1Sxo m_a1Sxp Address
owner :: (JsonRpc m_a1Sxl, Account a_a1Sxj t_a1Sxk, Functor (t_a1Sxk m_a1Sxl)) => BytesN 32 -> t_a1Sxk m_a1Sxl Address
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.Transfer
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.Transfer
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.Transfer
instance GHC.Show.Show Network.Ethereum.Ens.Registry.Transfer
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.TransferNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.TransferNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.TransferNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.TransferNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.TransferIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.TransferIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.TransferIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.TransferIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewTTL
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewTTL
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewTTL
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewTTL
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewTTLNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewTTLNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewTTLNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewTTLNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewTTLIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewTTLIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewTTLIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewTTLIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewResolver
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewResolver
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewResolver
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewResolver
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewResolverNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewResolverNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewResolverNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewResolverNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewResolverIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewResolverIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewResolverIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewResolverIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewOwner
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewOwner
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewOwner
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewOwner
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewOwnerNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewOwnerNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewOwnerNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewOwnerNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.NewOwnerIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.NewOwnerIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.NewOwnerIndexed
instance GHC.Show.Show Network.Ethereum.Ens.Registry.NewOwnerIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.TtlData
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.TtlData
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.TtlData
instance GHC.Show.Show Network.Ethereum.Ens.Registry.TtlData
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.SetTTLData
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.SetTTLData
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.SetTTLData
instance GHC.Show.Show Network.Ethereum.Ens.Registry.SetTTLData
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance GHC.Show.Show Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.SetResolverData
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.SetResolverData
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.SetResolverData
instance GHC.Show.Show Network.Ethereum.Ens.Registry.SetResolverData
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.SetOwnerData
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.SetOwnerData
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.SetOwnerData
instance GHC.Show.Show Network.Ethereum.Ens.Registry.SetOwnerData
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.ResolverData
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.ResolverData
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.ResolverData
instance GHC.Show.Show Network.Ethereum.Ens.Registry.ResolverData
instance GHC.Generics.Generic Network.Ethereum.Ens.Registry.OwnerData
instance GHC.Classes.Ord Network.Ethereum.Ens.Registry.OwnerData
instance GHC.Classes.Eq Network.Ethereum.Ens.Registry.OwnerData
instance GHC.Show.Show Network.Ethereum.Ens.Registry.OwnerData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.Transfer
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.Registry.TransferIndexed Network.Ethereum.Ens.Registry.TransferNonIndexed Network.Ethereum.Ens.Registry.Transfer
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.Registry.Transfer)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.TransferNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.TransferNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.TransferNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.TransferIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.TransferIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.TransferIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewTTL
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.Registry.NewTTLIndexed Network.Ethereum.Ens.Registry.NewTTLNonIndexed Network.Ethereum.Ens.Registry.NewTTL
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.Registry.NewTTL)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewTTLNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.NewTTLNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.NewTTLNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewTTLIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.NewTTLIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.NewTTLIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewResolver
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.Registry.NewResolverIndexed Network.Ethereum.Ens.Registry.NewResolverNonIndexed Network.Ethereum.Ens.Registry.NewResolver
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.Registry.NewResolver)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewResolverNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.NewResolverNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.NewResolverNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewResolverIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.NewResolverIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.NewResolverIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewOwner
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.Registry.NewOwnerIndexed Network.Ethereum.Ens.Registry.NewOwnerNonIndexed Network.Ethereum.Ens.Registry.NewOwner
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.Registry.NewOwner)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewOwnerNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.NewOwnerNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.NewOwnerNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.NewOwnerIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.NewOwnerIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.NewOwnerIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.TtlData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.TtlData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.Registry.TtlData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.TtlData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.Registry.TtlData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.SetTTLData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.SetTTLData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.Registry.SetTTLData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.SetTTLData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.Registry.SetTTLData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.Registry.SetSubnodeOwnerData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.SetResolverData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.SetResolverData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.Registry.SetResolverData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.SetResolverData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.Registry.SetResolverData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.SetOwnerData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.SetOwnerData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.Registry.SetOwnerData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.SetOwnerData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.Registry.SetOwnerData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.ResolverData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.ResolverData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.Registry.ResolverData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.ResolverData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.Registry.ResolverData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.Registry.OwnerData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.Registry.OwnerData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.Registry.OwnerData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.Registry.OwnerData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.Registry.OwnerData


-- | Ethereum Name System public resolver smart contract.
module Network.Ethereum.Ens.PublicResolver
data ABIData
ABIData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !UIntN 256 -> ABIData
data AddrData
AddrData :: {-# NOUNPACK #-} !BytesN 32 -> AddrData
data ContentData
ContentData :: {-# NOUNPACK #-} !BytesN 32 -> ContentData
data NameData
NameData :: {-# NOUNPACK #-} !BytesN 32 -> NameData
data PubkeyData
PubkeyData :: {-# NOUNPACK #-} !BytesN 32 -> PubkeyData
data SetABIData
SetABIData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !UIntN 256 -> {-# NOUNPACK #-} !Bytes -> SetABIData
data SetAddrData
SetAddrData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> SetAddrData
data SetContentData
SetContentData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> SetContentData
data SetNameData
SetNameData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Text -> SetNameData
data SetPubkeyData
SetPubkeyData :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> SetPubkeyData
data SupportsInterfaceData
SupportsInterfaceData :: {-# NOUNPACK #-} !BytesN 4 -> SupportsInterfaceData
data ABIChangedIndexed
ABIChangedIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> {-# NOUNPACK #-} !Tagged 2 (UIntN 256) -> ABIChangedIndexed
data ABIChangedNonIndexed
ABIChangedNonIndexed :: ABIChangedNonIndexed
data ABIChanged
ABIChanged :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !UIntN 256 -> ABIChanged
[aBIChangedNode_] :: ABIChanged -> {-# NOUNPACK #-} !BytesN 32
[aBIChangedContentType_] :: ABIChanged -> {-# NOUNPACK #-} !UIntN 256
data AddrChangedIndexed
AddrChangedIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> AddrChangedIndexed
data AddrChangedNonIndexed
AddrChangedNonIndexed :: {-# NOUNPACK #-} !Tagged 2 Address -> AddrChangedNonIndexed
data AddrChanged
AddrChanged :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Address -> AddrChanged
[addrChangedNode_] :: AddrChanged -> {-# NOUNPACK #-} !BytesN 32
[addrChangedA_] :: AddrChanged -> {-# NOUNPACK #-} !Address
data ContentChangedIndexed
ContentChangedIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> ContentChangedIndexed
data ContentChangedNonIndexed
ContentChangedNonIndexed :: {-# NOUNPACK #-} !Tagged 2 (BytesN 32) -> ContentChangedNonIndexed
data ContentChanged
ContentChanged :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> ContentChanged
[contentChangedNode_] :: ContentChanged -> {-# NOUNPACK #-} !BytesN 32
[contentChangedHash_] :: ContentChanged -> {-# NOUNPACK #-} !BytesN 32
data NameChangedIndexed
NameChangedIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> NameChangedIndexed
data NameChangedNonIndexed
NameChangedNonIndexed :: {-# NOUNPACK #-} !Tagged 2 Text -> NameChangedNonIndexed
data NameChanged
NameChanged :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !Text -> NameChanged
[nameChangedNode_] :: NameChanged -> {-# NOUNPACK #-} !BytesN 32
[nameChangedName_] :: NameChanged -> {-# NOUNPACK #-} !Text
data PubkeyChangedIndexed
PubkeyChangedIndexed :: {-# NOUNPACK #-} !Tagged 1 (BytesN 32) -> PubkeyChangedIndexed
data PubkeyChangedNonIndexed
PubkeyChangedNonIndexed :: {-# NOUNPACK #-} !Tagged 2 (BytesN 32) -> {-# NOUNPACK #-} !Tagged 3 (BytesN 32) -> PubkeyChangedNonIndexed
data PubkeyChanged
PubkeyChanged :: {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> {-# NOUNPACK #-} !BytesN 32 -> PubkeyChanged
[pubkeyChangedNode_] :: PubkeyChanged -> {-# NOUNPACK #-} !BytesN 32
[pubkeyChangedX_] :: PubkeyChanged -> {-# NOUNPACK #-} !BytesN 32
[pubkeyChangedY_] :: PubkeyChanged -> {-# NOUNPACK #-} !BytesN 32
supportsInterface :: (JsonRpc m_a26tE, Account a_a26tC t_a26tD, Functor (t_a26tD m_a26tE)) => BytesN 4 -> t_a26tD m_a26tE Bool
setPubkey :: (JsonRpc m_a26tA, Account a_a26ty t_a26tz, Functor (t_a26tz m_a26tA)) => BytesN 32 -> BytesN 32 -> BytesN 32 -> t_a26tz m_a26tA TxReceipt
setName :: (JsonRpc m_a26tu, Account a_a26ts t_a26tt, Functor (t_a26tt m_a26tu)) => BytesN 32 -> Text -> t_a26tt m_a26tu TxReceipt
setContent :: (JsonRpc m_a26tp, Account a_a26tn t_a26to, Functor (t_a26to m_a26tp)) => BytesN 32 -> BytesN 32 -> t_a26to m_a26tp TxReceipt
setAddr :: (JsonRpc m_a26tk, Account a_a26ti t_a26tj, Functor (t_a26tj m_a26tk)) => BytesN 32 -> Address -> t_a26tj m_a26tk TxReceipt
setABI :: (JsonRpc m_a26tf, Account a_a26td t_a26te, Functor (t_a26te m_a26tf)) => BytesN 32 -> UIntN 256 -> Bytes -> t_a26te m_a26tf TxReceipt
pubkey :: (JsonRpc m_a26t9, Account a_a26t7 t_a26t8, Functor (t_a26t8 m_a26t9)) => BytesN 32 -> t_a26t8 m_a26t9 (BytesN 32, BytesN 32)
name :: (JsonRpc m_a26t5, Account a_a26t3 t_a26t4, Functor (t_a26t4 m_a26t5)) => BytesN 32 -> t_a26t4 m_a26t5 Text
content :: (JsonRpc m_a26t1, Account a_a26sZ t_a26t0, Functor (t_a26t0 m_a26t1)) => BytesN 32 -> t_a26t0 m_a26t1 (BytesN 32)
addr :: (JsonRpc m_a26sX, Account a_a26sV t_a26sW, Functor (t_a26sW m_a26sX)) => BytesN 32 -> t_a26sW m_a26sX Address
aBI :: (JsonRpc m_a26sT, Account a_a26sR t_a26sS, Functor (t_a26sS m_a26sT)) => BytesN 32 -> UIntN 256 -> t_a26sS m_a26sT (UIntN 256, Bytes)
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.PubkeyChanged
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.PubkeyChanged
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.PubkeyChanged
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.PubkeyChanged
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.NameChanged
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.NameChanged
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.NameChanged
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.NameChanged
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.NameChangedIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.NameChangedIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.NameChangedIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.NameChangedIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ContentChanged
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ContentChanged
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ContentChanged
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ContentChanged
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.AddrChanged
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.AddrChanged
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.AddrChanged
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.AddrChanged
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ABIChanged
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ABIChanged
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ABIChanged
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ABIChanged
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.SetNameData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.SetNameData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.SetNameData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.SetNameData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.SetContentData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.SetContentData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.SetContentData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.SetContentData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.SetAddrData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.SetAddrData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.SetAddrData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.SetAddrData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.SetABIData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.SetABIData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.SetABIData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.SetABIData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.PubkeyData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.PubkeyData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.PubkeyData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.PubkeyData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.NameData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.NameData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.NameData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.NameData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ContentData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ContentData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ContentData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ContentData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.AddrData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.AddrData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.AddrData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.AddrData
instance GHC.Generics.Generic Network.Ethereum.Ens.PublicResolver.ABIData
instance GHC.Classes.Ord Network.Ethereum.Ens.PublicResolver.ABIData
instance GHC.Classes.Eq Network.Ethereum.Ens.PublicResolver.ABIData
instance GHC.Show.Show Network.Ethereum.Ens.PublicResolver.ABIData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.PubkeyChanged
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed Network.Ethereum.Ens.PublicResolver.PubkeyChanged
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.PublicResolver.PubkeyChanged)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.PubkeyChangedNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.PubkeyChangedIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.NameChanged
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.PublicResolver.NameChangedIndexed Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed Network.Ethereum.Ens.PublicResolver.NameChanged
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.PublicResolver.NameChanged)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.NameChangedNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.NameChangedIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.NameChangedIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.NameChangedIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ContentChanged
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed Network.Ethereum.Ens.PublicResolver.ContentChanged
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.PublicResolver.ContentChanged)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.ContentChangedNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.ContentChangedIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.AddrChanged
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed Network.Ethereum.Ens.PublicResolver.AddrChanged
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.PublicResolver.AddrChanged)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.AddrChangedNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.AddrChangedIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ABIChanged
instance Data.Solidity.Event.IndexedEvent Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed Network.Ethereum.Ens.PublicResolver.ABIChanged
instance Data.Default.Class.Default (Network.Ethereum.Api.Types.Filter Network.Ethereum.Ens.PublicResolver.ABIChanged)
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.ABIChangedNonIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.ABIChangedIndexed
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.SupportsInterfaceData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.SetPubkeyData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.SetNameData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.SetNameData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.SetNameData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.SetNameData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.SetNameData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.SetContentData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.SetContentData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.SetContentData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.SetContentData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.SetContentData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.SetAddrData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.SetAddrData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.SetAddrData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.SetAddrData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.SetAddrData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.SetABIData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.SetABIData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.SetABIData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.SetABIData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.SetABIData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.PubkeyData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.PubkeyData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.PubkeyData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.PubkeyData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.PubkeyData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.NameData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.NameData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.NameData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.NameData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.NameData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ContentData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.ContentData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.ContentData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.ContentData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.ContentData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.AddrData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.AddrData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.AddrData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.AddrData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.AddrData
instance Generics.SOP.Universe.Generic Network.Ethereum.Ens.PublicResolver.ABIData
instance Data.Solidity.Abi.AbiType Network.Ethereum.Ens.PublicResolver.ABIData
instance Data.Solidity.Abi.AbiPut Network.Ethereum.Ens.PublicResolver.ABIData
instance Data.Solidity.Abi.AbiGet Network.Ethereum.Ens.PublicResolver.ABIData
instance Network.Ethereum.Contract.Method.Method Network.Ethereum.Ens.PublicResolver.ABIData


-- | ENS offers a secure &amp; decentralised way to address resources both
--   on and off the blockchain using simple, human-readable names.
--   
--   This module provide basic ENS resolvers.
module Network.Ethereum.Ens

-- | Namehash algorithm
--   <a>http://docs.ens.domains/en/latest/implementers.html#algorithm</a>
namehash :: ByteString -> BytesN 32

-- | Get address of ENS domain
resolve :: (JsonRpc m, Account p (AccountT p)) => ByteString -> AccountT p m Address


-- | Node managed unlockable account. Typically to send transaction from
--   this account password is required.
module Network.Ethereum.Account.Personal

-- | Unlockable node managed account params
data Personal
Personal :: !Address -> !Passphrase -> Personal
[personalAddress] :: Personal -> !Address
[personalPassphrase] :: Personal -> !Passphrase
type PersonalAccount = AccountT Personal
instance GHC.Show.Show Network.Ethereum.Account.Personal.Personal
instance GHC.Classes.Eq Network.Ethereum.Account.Personal.Personal
instance Network.Ethereum.Account.Class.Account Network.Ethereum.Account.Personal.Personal Network.Ethereum.Account.Personal.PersonalAccount
instance Data.Default.Class.Default Network.Ethereum.Account.Personal.Personal


-- | Using ECC for singing transactions locally, e.g. out of Ethereum node.
--   Transaction will send using <tt>eth_sendRawTransacion</tt> JSON-RPC
--   method.
module Network.Ethereum.Account.LocalKey

-- | Local EOA params
data LocalKey
LocalKey :: !PrivateKey -> !Integer -> LocalKey
[localKeyPrivate] :: LocalKey -> !PrivateKey
[localKeyChainId] :: LocalKey -> !Integer
type LocalKeyAccount = AccountT LocalKey
instance GHC.Show.Show Network.Ethereum.Account.LocalKey.LocalKey
instance GHC.Classes.Eq Network.Ethereum.Account.LocalKey.LocalKey
instance Network.Ethereum.Account.Class.Account Network.Ethereum.Account.LocalKey.LocalKey Network.Ethereum.Account.LocalKey.LocalKeyAccount
instance Data.Default.Class.Default Network.Ethereum.Account.LocalKey.LocalKey


-- | Default node managed account (typically the first of accounts list).
module Network.Ethereum.Account.Default
type DefaultAccount = AccountT ()
instance Network.Ethereum.Account.Class.Account () Network.Ethereum.Account.Default.DefaultAccount


-- | In Etereun there are two types of accounts: * Externally owned account
--   (EOAs): an account controlled by a private key, and if you own the
--   private key associated with the EOA you have the ability to send ether
--   and messages from it. * Contract: an account that has its own code,
--   and is controlled by code.
--   
--   This module exports different kinds of EOAs: default, node managed and
--   local. Node managed accounts use <a>Personal</a> JSON-RPC API for
--   signing transactions. Local account sign transaction locally and use
--   <tt>sendRawTransaction</tt> method to export transaction to Ethereum
--   network.
module Network.Ethereum.Account

-- | Account is needed for sending transactions to blockchain
--   
--   Typically account is provided by node. In this case node manage
--   accounts: encrypt and decrypt private keys, manipulate files etc. In
--   other case web3 can derive account from private key and send to node
--   already signed transactions.
class MonadTrans t => Account a t | t -> a

-- | Run computation with given account credentials
withAccount :: (Account a t, JsonRpc m) => a -> t m b -> m b

-- | Send transaction to contract, like a <tt>write</tt> command
send :: (Account a t, JsonRpc m, Method args) => args -> t m TxReceipt

-- | Call constant method of contract, like a <a>read</a> command
call :: (Account a t, JsonRpc m, Method args, AbiGet result) => args -> t m result
type DefaultAccount = AccountT ()
type PersonalAccount = AccountT Personal

-- | Unlockable node managed account params
data Personal
Personal :: !Address -> !Passphrase -> Personal
[personalAddress] :: Personal -> !Address
[personalPassphrase] :: Personal -> !Passphrase
type LocalKeyAccount = AccountT LocalKey

-- | Local EOA params
data LocalKey
LocalKey :: !PrivateKey -> !Integer -> LocalKey
[localKeyPrivate] :: LocalKey -> !PrivateKey
[localKeyChainId] :: LocalKey -> !Integer

-- | <tt>withParam</tt> is very similar to <tt>withStateT</tt> function,
--   it's used to set parameters of transaction locally and revert params
--   after out of scope.
--   
--   <pre>
--   withAccount () $
--     withParam (to .~ tokenAddress) $
--       transfer alice 42
--   
--   </pre>
withParam :: Account p (AccountT p) => (CallParam p -> CallParam p) -> AccountT p m a -> AccountT p m a

-- | Transaction recipient lens
to :: Lens' (CallParam p) Address

-- | Transaction value lens
value :: Unit value => Lens' (CallParam p) value

-- | Transaction gas limit lens
gasLimit :: Lens' (CallParam p) Integer

-- | Transaction gas price lens
gasPrice :: Unit gasprice => Lens' (CallParam p) gasprice

-- | Call execution block lens
block :: Lens' (CallParam p) DefaultBlock

-- | EOA params lens
account :: Lens' (CallParam p) p


-- | 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 <a>Web3</a> monad
data Web3 a

-- | <a>Web3</a> runner for default provider
runWeb3 :: MonadIO m => Web3 a -> m (Either Web3Error a)

-- | 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 ())
