keep-core

command module
v1.2.4-rc Latest Latest
Warning

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

Go to latest
Published: Jun 23, 2020 License: MIT Imports: 8 Imported by: 0

README

= keep-core

https://circleci.com/gh/keep-network/keep-core[image:https://circleci.com/gh/keep-network/keep-core.svg?style=svg&circle-token=ec728f5ca814b6cb2db5ffeb7258151b752a207e[CircleCI Build Status]]
https://discord.gg/wYezN7v[image:https://img.shields.io/badge/chat-Discord-blueViolet.svg[Chat with us on Discord]]

The core contracts and reference client implementation behind the Keep network,
a privacy, interoperability, and censorship-resistance toolkit for developers
on Ethereum.

== What's a keep?

The network offers application developers **keeps**, small off-chain data
containers for private storage and computation that can be opened, closed, and
managed by smart contracts autonomously.

Keeps are maintained by stakers, actors who run nodes and have skin in the
game, and collect fees for operating the network. When a new keep is opened,
the requisite number of stakers are chosen via a
link:https://blog.keep.network/whats-in-a-beacon-12c34b0bc078[BLS-based random beacon]
to maintain the keep, using a process called
link:https://en.wikipedia.org/wiki/Sortition[sortition].

The first type of keep launching with the network is the `BondedECDSAKeep`,
allowing smart contracts to generate private keys and sign messages without
endangering key material. ECDSA keeps mean decentralized signing, cross-chain
applications, and new tools for custodial applications — from Solidity. This
capability is used heavily by https://tbtc.network/[tBTC].

To learn more about ECDSA keeps, check out
https://github.com/keep-network/keep-ecdsa[keep-ecdsa].

== Getting Started

A good place to start is the link:docs/[the docs directory].

=== Running a Node

To run your own node in the Keep network, follow the
link:docs/keep-client-quickstart.adoc[`keep-client` quickstart]. Feedback on
this process and the documentation
https://github.com/keep-network/keep-core/issues[is appreciated!]

=== dApp Developers

dApp developers will be most interested in the smart contracts exposing Keep's
on-chain facilities.

The core contracts can be found in the link:solidity/[`solidity/`] directory.
They can be used to request
link:solidity/contracts/IRandomBeacon.sol[miner-resistant random numbers], as
well as creating and managing keeps. To generate new ECDSA key material and
request signatures, the contracts can be found in
link:https://github.com/keep-network/keep-ecdsa/blob/master/solidity/contracts/api/IBondedECDSAKeep.sol[`keep-ecdsa`].

=== Client Developers

Client developers will be most interested in the link:./main.go[reference Keep
Go client] and link:./CONTRIBUTING.adoc[CONTRIBUTORS file], as well as the
link:docs/rfc/[RFCs] and repo directory structure 👇

==== Directory structure

The directory structure used in this repository is very similar to that used in
other Go projects:

```
keep-core/
  Dockerfile
  main.go, *.go
  docs/
  solidity/ <1>
  cmd/ <2>
  pkg/ <3>
    net/
      net.go, *.go <4>
      libp2p/
    chain/
      chain.go, *.go <4>
      ethereum/
        gen/
          gen.go <5>
    relay/
      relay.go, *.go
```
<1> While the Keep network only uses Solidity at the moment, the directory
    structure allows for other contract languages.
<2> Keep client subcommands are implemented here, though they should be minimal and
    deal solely with user interaction. The meat of the commands should exist in
    a package fit for the appropriate purpose.
<3> All additional packages live in `pkg/`.
<4> The high-level interfaces for a package `mypackage` live in `mypackage.go`.
    `net` and `chain` are interface packages that expose a common interface
    to network and blockchain layers. Their subpackages provide particular
    implementations of these common interfaces. Only `cmd/` and the main
    package should interact with the implementations directly.
<5> When a package requires generated code, it should have a subpackage named
    `gen/`. This subpackage should contain a single file, `gen.go`, with a
    `// go:generate` annotation to trigger appropriate code generation. All code
    generation is done with a single invocation of `go generate` at build time.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
pkg
beacon/relay/event
Package event contains data structures that are attached to events in the relay.
Package event contains data structures that are attached to events in the relay.
beacon/relay/gjkr
Package gjkr contains code that implements Distributed Key Generation protocol described in [GJKR 99].
Package gjkr contains code that implements Distributed Key Generation protocol described in [GJKR 99].
beacon/relay/groupselection
Package groupselection implements the random beacon group selection protocol - an interactive, ticket-based method of selecting a candidate group from the set of all stakers given a pseudorandom seed value.
Package groupselection implements the random beacon group selection protocol - an interactive, ticket-based method of selecting a candidate group from the set of all stakers given a pseudorandom seed value.
beacon/relay/thresholdsignature/gen/pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.
bls
gen
gen/async
This is auto generated code This is auto generated code This is auto generated code This is auto generated code This is auto generated code This is auto generated code
This is auto generated code This is auto generated code This is auto generated code This is auto generated code This is auto generated code This is auto generated code
internal/byteutils
Package byteutils provides helper utilities for working with bytes
Package byteutils provides helper utilities for working with bytes
internal/dkgtest
Package dkgtest provides a full roundtrip DKG test engine including all the phases.
Package dkgtest provides a full roundtrip DKG test engine including all the phases.
internal/entrytest
Package entrytest provides a full roundtrip relay entry signing test engine including all the signing phases.
Package entrytest provides a full roundtrip relay entry signing test engine including all the signing phases.
internal/pbutils
Package pbutils provides helper utilities for working with protobuf objects.
Package pbutils provides helper utilities for working with protobuf objects.
internal/testutils
Package testutils contains general utilities for testing to help ensure consistency in output style.
Package testutils contains general utilities for testing to help ensure consistency in output style.
net
net/local
Package local provides a local, non-networked implementation of the interfaces defined by the net package.
Package local provides a local, non-networked implementation of the interfaces defined by the net package.
net/retransmission
Package retransmission implements a simple retransmission mechanism for network messages based on their sequence number.
Package retransmission implements a simple retransmission mechanism for network messages based on their sequence number.
net/security/handshake
Package handshake contains the code that implements authentication handshake performed when a new connection between two peers is established, as described in the network security implementation [RFC], section 1.2.3 and 1.2.4.
Package handshake contains the code that implements authentication handshake performed when a new connection between two peers is established, as described in the network security implementation [RFC], section 1.2.3 and 1.2.4.
net/watchtower
Package watchtower continuously monitors firewall rules compliance of all connected peers, and disconnects peers which do not comply to the rules.
Package watchtower continuously monitors firewall rules compliance of all connected peers, and disconnects peers which do not comply to the rules.

Jump to

Keyboard shortcuts

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