Git Product home page Git Product logo

libocr's Introduction

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

libocr's People

Contributors

connorwstein avatar coventry avatar gtklocker avatar kaleofduty avatar samsondav avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libocr's Issues

Methods needed to call `OffchainAggregator.SetConfig` are inside `internal/config` package, which can't be used externally

The OffchainAggregator.SetConfig call that I could find, here, uses confighelper.ContractSetConfigArgsForIntegrationTest (which is public) which in turn calls down to XXXContractSetConfigArgsFromSharedConfig here.

However, because XXXContractSetConfigArgsFromSharedConfig lives in the internal package, it's not accessible from the outside. This means that the logic inside XXXContractSetConfigArgsFromSharedConfig would need to be reimplemented to provide the encodedConfigVersion and encodedConfig arguments to OffchainAggregator.SetConfig.

Is this intentional/is there a way to work around this?

How to use libocr to deploy contract?

Hey @kaleofduty , I'm trying to use this library to deploy an OCR contract to a local ETH testnet, but I've been struggling to figure out what I should be calling. AFAICT I should be using the offchainaggregator.DeployOffchainAggregator method, but I'm not sure what values I should be specifying for the arguments:

auth *bind.TransactOpts
backend bind.ContractBackend
_maximumGasPrice uint32
_reasonableGasPrice uint32
_microLinkPerEth uint32
_linkGweiPerObservation uint32
_linkGweiPerTransmission uint32
_link common.Address
_validator common.Address
_minAnswer *big.Int
_maxAnswer *big.Int
_billingAccessController common.Address
_requesterAccessController common.Address
_decimals uint8
_description string

Is there an example or docs that I could reference, to figure out how to set this up?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.