An open API service indexing awesome lists of open source software.

https://github.com/cwgoes/haskell-abci

Haskell Application BlockChain Interface (ABCI) Server Library
https://github.com/cwgoes/haskell-abci

abci cosmos tendermint

Last synced: 9 months ago
JSON representation

Haskell Application BlockChain Interface (ABCI) Server Library

Awesome Lists containing this project

README

          

# Haskell ABCI Server Library

Haskell library for writing [Application BlockChain Interface](https://github.com/tendermint/abci) (ABCI) servers. Licensed under BSD 3-clause (see LICENSE).

# Usage

Available as a [library on Hackage](https://hackage.haskell.org/package/haskell-abci).

If you're using [Stack](https://haskellstack.org), simply add *haskell-abci* to the build-depends in your project's Cabal file.

If you're using Cabal directly, *cabal install haskell-abci* should do the trick.

This library exposes a request-response API. Usage is simple:

1. Import the library

```haskell
import qualified Network.ABCI as ABCI
```

2. Define your application (for more information, see the [ABCI application development documentation](https://tendermint.com/docs/guides/app-development))

See [the example counter app](app/Main.hs) for a template.

```haskell
app :: ABCI.Request -> IO ABCI.Response
app = undefined
```

3. Specify a host and port on which to bind the ABCI server, or use the defaults

```haskell
host :: String
host = ABCI.defaultHost

port :: Int
port = ABCI.defaultPort
```

4. Launch the server

```haskell
run :: IO ()
run = ABCI.serve host port app
```

# Development / Testing

You'll need [Stack](https://haskellstack.org/) and a relatively recent version of [protobuf](https://github.com/google/protobuf).

```bash
git clone https://github.com/cwgoes/haskell-abci.git
cd haskell-abci
stack build --install-ghc
```

Note that *src/types.proto* is used to generate a Haskell interface file whenever you run *stack build*.

Optionally, to also install the example counter application (*haskell-abci-counter*) in *~/.local/bin*:

```bash
stack install
```

Once you've installed *haskell-abci-counter*, to run the counter example application with the standard ABCI Golang tests:
(note that you'll need *~/.local/bin* on your shell path and [Tendermint](https://tendermint.com/docs/guides/install-from-source) installed)

```bash
git clone https://github.com/tendermint/abci.git
cd abci/tests/test_app
ABCI_APP="haskell-abci-counter" go run ./*.go
```