Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 40 million developers.Sign up
This release introduce changes in account system of library. Accounts is a big deal for any crypto(currency) library. Previously
hs-web3 support node managed accounts only. Currently library support three types of accounts:
- Default account (node managed, typically first of accounts list, should be unlocked)
- Personal account (node managed accounts available via JSON-RPC
- Local account (derived from secp256k1 private key and use JSON-RPC
Transaction sending code have a lot of changes too. Introduced
Account typeclass in
Network.Ethereum.Account module that looks like:
class MonadTrans t => Account a t | t -> a where -- | Run computation with given account credentials withAccount :: JsonRpc m => a -> t m b -> m b -- | Send transaction to contract, like a 'write' command send :: (JsonRpc m, Method args) => args -> t m TxReceipt -- | Call constant method of contract, like a 'read' command call :: (JsonRpc m, Method args, AbiGet result) => args -> t m result
This is mean that sending transaction from multiple accounts simultaneously using
withAccount function is not a problem now.
... = do withAccount () $ ... withAccount (Personal "0x..." "password") $ ...
Transaction parametrisation was too hard previously and forced to carry a lot of vars. Currently
withParam function exported in account module use state monad for transaction parametrisation. It make code looks good and more powerful.
withAccount () $ -- Set transaction value withParam (value .~ halfBalance) $ do -- Send transaction to alice account withParam (to .~ alice) $ send () -- Send transaction to bob account withParam (to .~ bob) $ send ()
Finally in this release contract creation is supported via using truffle generated smart contract artifacts. Example available in tests.
- Support for Ethereum cryptography
- Local private key transaction signer
- Generalized JSON-RPC monad for API methods
- Support for multiple transaction sending methods via one
- Monad based transaction sending parametrization
- Experimental support for solidity compiler (disabled by default)
- Support for Ethereum mainnet ENS resolver
- Contract typeclass with api/bytecode getters
- Contract typeclass TH generator
- Function for creating contracts
- Event single/multi filters
- HexString data type
- Personal api calls
- Address checksum
- package.yaml instead web3.cabal package descriptor
- Solidity related data types and codecs moved to Data.Solidity
- Solidity related parsers and compiler moved to Language.Solidity
- Modules in Network.Ethereum.Web3 moved to Network.Ethereum.Api
- fromWei/toWei from
Unittypeclass now operates over
This is one of the biggest releases of hs-web3. The aim of this release is make library more easy to use and understand. In this release library modules are separated for three parts:
ABI operational modules,
Contract abstraction and JSON-RPC generic communication interface (
Imports optimization is enabled for scenario:
- if you need TH, just only import
- in other cases use
For using specified JSON-RPC method make qualified imports, like
import qualified Network.Ethereum.Web3.Eth as Eth ... runWeb3 Eth.accounts
- Descriptive types for all JSON-RPC method parameters and returned values (#15).
- Widely use of basement:Word256 type for encoding.
- Full list of ethereum abi encoding types:
- dynamic array:
- static array:
- Rewriten encoding engine for best performance, it now based on cereal:Serialize instead of parsec:Parser.
- Renamed encoding type classes and methods:
- Encoding related modules moved to Network.Ethereum.ABI.
- Primitive abi encoding types are moved to separated modules in Network.Ethereum.ABI.Prim.
- Contract interation related modules moved to Network.Ethereum.Contract.
- Ethereum node communication modules stay in Network.Ethereum.Web3.
- JSON-RPC tiny client is independent now and can be used separately.
Eventtype class, currently TH create
- Custom setup for live testing (it replaced by travis script).