Fix build on stackage nightly & lts-11

This commit is contained in:
Alexander Krupenkin 2018-10-25 23:02:38 +03:00
parent 884ba7a930
commit e14c2c6155
No known key found for this signature in database
GPG Key ID: 0D0A7FA67911873E
16 changed files with 96 additions and 47 deletions

View File

@ -16,8 +16,6 @@ cache:
matrix:
include:
# Build with different GHC versions
- env: RESOLVER=lts-9.21
compiler: ": #GHC 8.0.2"
- env: RESOLVER=lts-11.22
compiler: ": #GHC 8.2.2"
- env: RESOLVER=lts-12.14
@ -26,9 +24,6 @@ matrix:
compiler: ": #GHC 8.6.1"
# Build on macOS in addition to Linux
- env: RESOLVER=lts-9.21
compiler: ": #GHC 8.0.2"
os: osx
- env: RESOLVER=lts-11.22
compiler: ": #GHC 8.2.2"
os: osx
@ -39,6 +34,9 @@ matrix:
compiler: ": #GHC 8.6.1"
os: osx
install:
- curl -sSL https://get.haskellstack.org/ | sh -s - -d .
- ./stack --version
script:
- nix-shell -p stack --run \
"stack test web3:unit --flag web3:solidity --nix --no-terminal --haddock --no-haddock-deps --resolver $RESOLVER"
- ./stack test web3:unit --flag web3:solidity --nix --no-terminal --haddock --no-haddock-deps --resolver $RESOLVER

View File

@ -23,6 +23,7 @@ All notable changes to this project will be documented in this file.
- 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 `Unit` typeclass now operates over `Integral`
### Removed
- `convert` function from `Unit` typeclass

View File

@ -6,43 +6,74 @@ The Haskell Ethereum API which implements the [Generic JSON RPC](https://github.
[![Documentation Status](https://readthedocs.org/projects/hs-web3/badge/?version=latest)](https://hs-web3.readthedocs.io/en/latest/?badge=latest)
[![Build Status](https://travis-ci.org/airalab/hs-web3.svg?branch=master)](https://travis-ci.org/airalab/hs-web3)
[![Hackage](https://img.shields.io/hackage/v/web3.svg)](http://hackage.haskell.org/package/web3)
![Haskell Programming Language](https://img.shields.io/badge/language-Haskell-blue.svg)
[![LTS-12](http://stackage.org/package/web3/badge/lts-12)](http://stackage.org/lts-12/package/web3)
[![nightly](http://stackage.org/package/web3/badge/nightly)](http://stackage.org/nightly/package/web3)
[![Code Triagers](https://www.codetriage.com/airalab/hs-web3/badges/users.svg)](https://www.codetriage.com/airalab/hs-web3)
![BSD3 License](http://img.shields.io/badge/license-BSD3-brightgreen.svg)
[![Code Triagers Badge](https://www.codetriage.com/airalab/hs-web3/badges/users.svg)](https://www.codetriage.com/airalab/hs-web3)
Installation
------------
Install
-------
Using [Stackage](https://docs.haskellstack.org):
`stack install web3`
stack install web3
Usage
-----
Quick start
-----------
```haskell
{-# LANGUAGE OverloadedStrings #-}
module Main where
Lets import library entrypoint modules using `ghci`:
-- Basic imports
import Network.Ethereum.Web3
> import Network.Ethereum.Web3
> import qualified Network.Ethereum.Api.Web3 as Web3
-- Eth API support
import qualified Network.Ethereum.Api.Eth as Eth
import Network.Ethereum.Api.Types
> We recomends to import `Network.Ethereun.Api.Web3` as **qualified**, because it has name similar to their prefix in JSON-RPC API.
-- ENS support
import qualified Network.Ethereum.Ens as Ens
Looks anything in `Web3` API:
-- Lens to simple param setting
import Lens.Micro ((.~))
> :t Web3.clientVersion
Web3.clientVersion :: JsonRpc m => m Text
main :: IO ()
main = do
-- Use default provider on http://localhost:8545
ret <- runWeb3 $ do
To run it use `Web3` provider monad:
-- Get address of default account
me <- head <$> Eth.accounts
> :t runWeb3
runWeb3 :: MonadIO m => Web3 a -> m (Either Web3Error a)
-- Get balance of default account on latest block
myBalance <- Eth.getBalance me Latest
> runWeb3 Web3.clientVersion
Right "Parity-Ethereum//v2.0.3-unstable/x86_64-linux-gnu/rustc1.29.0"
-- Get half of balance
let halfBalance = fromWei (myBalance / 2)
> Function `runWeb3` use default provider at `http://localhost:8545`, for using custom providers try `runweb3'`.
-- Use default account
withAccount () $ do
-- Get Ethereum address via ENS
alice <- Ens.resolve "alice.address.on.eth"
bob <- Ens.resolve "bob.address.on.eth"
-- Send transaction with value
withParam (value .~ halfBalance) $ do
-- Send transaction to alice account
withParam (to .~ alice) $ send ()
-- Send transaction to bob account
withParam (to .~ bob) $ send ()
-- Return sended value
return halfBalance
-- Web3 error handling
case ret of
Left e -> error $ show e
Right v -> print (v :: Ether) -- Print returned value in ethers
```
---
See [documentation](https://hs-web3.readthedocs.io) for other examples.
Read more in the [documentation on ReadTheDocs](https://hs-web3.readthedocs.io).

View File

@ -3,7 +3,7 @@ version: 0.8.0.0
synopsis: Ethereum API for Haskell
description: Web3 is a Haskell client library for Ethereum
github: "airalab/hs-web3"
license: BSD3
license: BSD-3-Clause
license-file: LICENSE
author: Alexander Krupenkin
maintainer: mail@akru.me
@ -13,6 +13,7 @@ category: Network
extra-source-files:
- README.md
- CHANGELOG.md
- stack.yaml
- examples/token/ERC20.hs
- examples/token/ERC20.json
- examples/token/Main.hs
@ -23,7 +24,7 @@ extra-source-files:
dependencies:
- base >4.9 && <4.13
- secp256k1-haskell >=0.1.3 && <0.2
- secp256k1-haskell >=0.1.4 && <0.2
- http-client-tls >=0.3.5.1 && <0.4
- template-haskell >=2.11.1.0 && <2.15
- microlens-aeson >=2.2.0.2 && <2.4
@ -46,7 +47,7 @@ dependencies:
- memory >=0.14.11 && <0.15
- cereal >=0.5.4.0 && <0.6
- aeson >=1.1.2.0 && <1.5
- vinyl >=0.5.3 && <0.11
- vinyl >=0.5.3 && <0.10
- async >=2.1.1.1 && <2.3
- text >=1.2.2.2 && <1.3
- mtl >=2.2.1 && <2.3
@ -98,7 +99,8 @@ library:
cpp-options: -DSOLIDITY_COMPILER
dependencies: containers
extra-libraries: solidity
c-sources: ./cbits/solidity_lite.cpp
cxx-options: -std=c++14
cxx-sources: ./cbits/solidity_lite.cpp
include-dirs: ./cbits
tests:

View File

@ -44,6 +44,7 @@ import qualified Data.ByteString as BS (take, unpack)
import qualified Data.ByteString.Char8 as C8 (drop, length, pack, unpack)
import qualified Data.Char as C (toLower, toUpper)
import Data.Default (Default (..))
import Data.Monoid ((<>))
import Data.String (IsString (..))
import Data.Text.Encoding as T (encodeUtf8)
import Generics.SOP (Generic)

View File

@ -21,6 +21,7 @@ module Language.Solidity.Compiler where
import Data.ByteString (ByteString)
import Data.Map (Map)
import Data.Semigroup (Semigroup (..))
import qualified Language.Solidity.Compiler.Foreign as FFI
import System.IO.Unsafe (unsafePerformIO)
@ -40,6 +41,7 @@ instance Semigroup Sources where
(optimization a || optimization b)
instance Monoid Sources where
mappend = (<>)
mempty = Sources mempty mempty False
type Compiled = Map ByteString (ByteString, ByteString)

View File

@ -23,6 +23,7 @@ import Control.Monad.State.Strict (get, runStateT)
import Control.Monad.Trans (MonadTrans (..))
import qualified Data.ByteArray as BA (convert)
import Data.Maybe (listToMaybe)
import Data.Monoid ((<>))
import Data.Proxy (Proxy (..))
import Data.Solidity.Abi.Codec (decode, encode)

View File

@ -24,6 +24,7 @@ import Control.Monad.State.Strict (get, runStateT)
import Control.Monad.Trans (lift)
import qualified Data.ByteArray as BA (convert)
import Data.Default (Default (..))
import Data.Monoid ((<>))
import Data.Proxy (Proxy (..))
import Data.Solidity.Abi.Codec (decode, encode)

View File

@ -27,7 +27,7 @@ import Data.ByteString (ByteString)
import Data.ByteString.Short (fromShort)
import Data.Default (Default (..))
import Data.Maybe (fromJust, fromMaybe)
import Data.Monoid (mempty)
import Data.Monoid (mempty, (<>))
import Data.Proxy (Proxy (..))
import Data.RLP (packRLP, rlpEncode)

View File

@ -25,6 +25,7 @@ import Control.Concurrent (threadDelay)
import Control.Exception (Exception, throwIO)
import Control.Monad.IO.Class (liftIO)
import Data.Either (lefts, rights)
import Data.Solidity.Event (DecodeEvent (..))
import qualified Network.Ethereum.Api.Eth as Eth
import Network.Ethereum.Api.Provider (Web3)

View File

@ -65,12 +65,19 @@ import Data.Maybe (catMaybes, fromJust,
listToMaybe)
import Data.Monoid ((<>))
import Data.Proxy (Proxy (..))
import Data.Tagged (Tagged (..))
import Data.Vinyl (Rec ((:&), RNil),
RecApplicative)
import Data.Vinyl.CoRec (CoRec (..), Field,
FoldRec, Handler (H),
Handlers, coRecToRec,
firstField, match,
onField)
import Data.Vinyl.Functor (Compose (..),
Identity (..))
import Data.Vinyl.TypeLevel (AllAllSat)
import Data.Solidity.Event (DecodeEvent (..))
import Data.Tagged
import Data.Vinyl
import Data.Vinyl.CoRec
import Data.Vinyl.Functor
import Data.Vinyl.TypeLevel
import qualified Network.Ethereum.Api.Eth as Eth
import Network.Ethereum.Api.Provider (Web3, forkWeb3)
import Network.Ethereum.Api.Types (Change (..),

View File

@ -46,6 +46,7 @@ import Data.Machine (MachineT, asParts,
unfoldPlan, (~>))
import Data.Machine.Plan (PlanT, stop, yield)
import Data.Maybe (catMaybes, listToMaybe)
import Data.Solidity.Event (DecodeEvent (..))
import qualified Network.Ethereum.Api.Eth as Eth
import Network.Ethereum.Api.Provider (Web3, forkWeb3)

View File

@ -24,6 +24,7 @@ import Data.ByteArray (convert, zero)
import Data.ByteArray.Sized (unsafeFromByteArrayAccess)
import Data.ByteString (ByteString)
import Data.ByteString.Char8 (split)
import Data.Monoid ((<>))
import Lens.Micro ((.~))
import Data.Solidity.Prim (Address, BytesN)

View File

@ -74,10 +74,10 @@ import qualified Text.Read.Lex as L
-- | Ethereum value unit
class (Read a, Show a, UnitSpec a, Fractional a) => Unit a where
-- | Make a value from integer wei
fromWei :: Integer -> a
fromWei :: Integral b => b -> a
-- | Convert a value to integer wei
toWei :: a -> Integer
toWei :: Integral b => a -> b
-- | Unit specification
class UnitSpec a where
@ -92,8 +92,8 @@ mkValue :: forall a b . (UnitSpec a, RealFrac b) => b -> Value a
mkValue = MkValue . round . (* divider (Proxy :: Proxy a))
instance UnitSpec a => Unit (Value a) where
fromWei = MkValue
toWei = unValue
fromWei = MkValue . toInteger
toWei = fromInteger . unValue
instance UnitSpec a => UnitSpec (Value a) where
divider = const $ divider (Proxy :: Proxy a)

View File

@ -1,5 +1,5 @@
# Resolver to choose a 'specific' stackage snapshot or a compiler version.
resolver: lts-12.12
resolver: lts-12.14
# User packages to be built.
packages:
@ -7,8 +7,9 @@ packages:
# Extra package dependencies
extra-deps:
- secp256k1-haskell-0.1.3
- secp256k1-haskell-0.1.4
- relapse-1.0.0.0
- vinyl-0.9.3
# Dependencies bounds
pvp-bounds: both

View File

@ -31,8 +31,9 @@ import Control.Concurrent.MVar
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Reader (ask)
import Data.Default
import Data.Default (def)
import Data.List (sort)
import Data.Monoid ((<>))
import Test.Hspec
import qualified Network.Ethereum.Api.Eth as Eth