A minimal and compact IBFT 2.0 implementation, written in Go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-ibft/README.md

82 lines
2.7 KiB

[![codecov](https://codecov.io/gh/0xPolygon/go-ibft/branch/main/graph/badge.svg?token=0vLkmaEq3h)](https://codecov.io/gh/0xPolygon/go-ibft)
# go-ibft README
## Overview
`go-ibft` is a simple, straightforward, IBFT state machine implementation.
2 years ago
It doesn't contain fancy synchronization logic, or any kind of transaction execution layer.
Instead, `go-ibft` is designed from the ground up to respect and adhere to the `IBFT 2.0` specification document.
Inside this package, you’ll find that it solves the underlying liveness and persistence issues of the original IBFT specification, as well as that it contains a plethora of optimizations that make it faster and more lightweight. For a complete specification overview on the package, you can check out the official documentation.
As mentioned before, `go-ibft` implements basic IBFT 2.0 state machine logic, meaning it doesn’t have any kind of transaction execution or block building mechanics. That responsibility is left to the `Backend` implementation.
## Installation
To get up and running with the `go-ibft` package, you can pull it into your project using:
`go get github.com/0xPolygon/go-ibft`
2 years ago
Currently, the minimum required go version is `go 1.17`.
## Usage Examples
```go
2 years ago
package main
import "github.com/0xPolygon/go-ibft"
// IBFTBackend is the structure that implements all required
// go-ibft Backend interfaces
type IBFTBackend struct {
// ...
}
// IBFTLogger is the structure that implements all required
// go-ibft Logger interface
type IBFTLogger struct {
// ...
}
// IBFTTransport is the structure that implements all required
// go-ibft Transport interface
type IBFTTransport struct {
// ...
}
// ...
func main() {
backend := NewIBFTBackned(...)
logger := NewIBFTLogger(...)
transport := NewIBFTTransport(...)
ibft := NewIBFT(logger, backend, transport)
blockHeight := uint64(1)
2 years ago
ctx, cancelFn := context.WithCancel(context.Background())
2 years ago
go func () {
// Run the consensus sequence for the block height.
// When the method returns, that means that
// consensus was reached
i := RunSequence(ctx, blockHeight)
}
2 years ago
// ...
2 years ago
// Stop the sequence by cancelling the context
cancelFn()
}
```
## License
Copyright 2022 Polygon Technology
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
### http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “ AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.