libocr

module
v0.0.0-...-fd3cab2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 19, 2024 License: MIT

README

libocr

libocr consists of a Go library and a set of Solidity smart contracts that implement the Chainlink Offchain Reporting Protocol, a Byzantine fault tolerant protocol that allows a set of oracles to generate offchain an aggregate report of the oracles' observations of some underlying data source. This report is then transmitted to an onchain contract in a single transaction.

You may also be interested in libocr's integration into the actual Chainlink node.

Protocol Description

Protocol execution mostly happens offchain over a peer to peer network between Chainlink nodes. The nodes regularly elect a new leader node who drives the rest of the protocol. The protocol is designed to choose each leader fairly and quickly rotate away from leaders that aren’t making progress towards timely onchain reports.

The leader regularly requests followers to provide freshly signed observations and aggregates them into a report. It then sends the aggregate report back to the followers and asks them to attest to the report's validity by signing it. If a quorum of followers approves the report, the leader assembles a final report with the quorum's signatures and broadcasts it to all followers.

The nodes then attempt to transmit the final report to the smart contract according to a randomized schedule. Finally, the smart contract verifies that a quorum of nodes signed the report and exposes the median value to consumers.

Organization

.
├── contract: Ethereum smart contracts
├── gethwrappers: go-ethereum bindings for the OCR1 contracts, generated with abigen
├── gethwrappers2: go-ethereum bindings for the OCR2 contracts, generated with abigen
├── networking: p2p networking layer
├── offchainreporting: offchain reporting protocol version 1
├── offchainreporting2: offchain reporting protocol version 2 specific packages, not much here
├── offchainreporting2plus: offchain reporting protocol version 2 and beyond
├── permutation: helper package for generating permutations
└── subprocesses: helper package for managing go routines

Directories

Path Synopsis
Serializes and deserializes big ints using two's complement big endian representation
Serializes and deserializes big ints using two's complement big endian representation
gethwrappers
gethwrappers2
internal
confighelper
Package confighelper provides helpers for converting between the gethwrappers/OffchainAggregator.SetConfig event and types.ContractConfig
Package confighelper provides helpers for converting between the gethwrappers/OffchainAggregator.SetConfig event and types.ContractConfig
internal/managed
Package managed provides "managed" versions of Oracle and BootstrapNode that perform garbage collection, track on-chain configuration changes, serializes messages to binary, etc...
Package managed provides "managed" versions of Oracle and BootstrapNode that perform garbage collection, track on-chain configuration changes, serializes messages to binary, etc...
internal/protocol/observation
Package observation contains the data structures and logic for handling observations provided by the client DataSource.
Package observation contains the data structures and logic for handling observations provided by the client DataSource.
internal/shim
Package shim contains implementations of internal types in terms of the external types
Package shim contains implementations of internal types in terms of the external types
types
Package types contains the types and interfaces a consumer of the OCR library needs to be aware of
Package types contains the types and interfaces a consumer of the OCR library needs to be aware of
offchainreporting2
chains/evmutil
alias for offchainreporting2plus/chains/evmutil
alias for offchainreporting2plus/chains/evmutil
confighelper
alias for offchainreporting2plus/confighelper
alias for offchainreporting2plus/confighelper
reportingplugin/titlerequest
titlerequest is a small example reporting plugin that requests website titles and puts them onchain.
titlerequest is a small example reporting plugin that requests website titles and puts them onchain.
types
alias for offchainreporting2plus/types
alias for offchainreporting2plus/types
confighelper
Package confighelper provides helpers for converting between the gethwrappers/OCR2Aggregator.SetConfig event and types.ContractConfig
Package confighelper provides helpers for converting between the gethwrappers/OCR2Aggregator.SetConfig event and types.ContractConfig
internal/managed
Package managed provides "managed" versions of Oracle and Bootstrapper that perform garbage collection, track on-chain configuration changes, serializes messages to binary, etc...
Package managed provides "managed" versions of Oracle and Bootstrapper that perform garbage collection, track on-chain configuration changes, serializes messages to binary, etc...
internal/shim
Package shim contains implementations of internal types in terms of the external types
Package shim contains implementations of internal types in terms of the external types
types
Package types contains the types and interfaces a consumer of the OCR library needs to be aware of
Package types contains the types and interfaces a consumer of the OCR library needs to be aware of
Package permutation generates cryptographically secure pseudorandom permutations
Package permutation generates cryptographically secure pseudorandom permutations
ragep2p is a simple p2p networking library that provides best-effort, self-healing, message-oriented, authenticated, encrypted bidirectional communication streams between peers.
ragep2p is a simple p2p networking library that provides best-effort, self-healing, message-oriented, authenticated, encrypted bidirectional communication streams between peers.
Package subprocesses keeps track of concurrent processes, for coordination of cleanly shutting down systems of goroutines.
Package subprocesses keeps track of concurrent processes, for coordination of cleanly shutting down systems of goroutines.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL