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
- Host: GitHub
- URL: https://github.com/cwgoes/haskell-abci
- Owner: cwgoes
- License: bsd-3-clause
- Created: 2017-08-09T21:40:45.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-08-10T01:08:43.000Z (almost 9 years ago)
- Last Synced: 2024-04-22T21:08:21.602Z (about 2 years ago)
- Topics: abci, cosmos, tendermint
- Language: Haskell
- Size: 6.84 KB
- Stars: 8
- Watchers: 2
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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
```