Go to file
Christopher Goes 65786e4578
Update version.go & changelog
2018-06-13 10:05:50 +02:00
.circleci Fix minor typo 2018-06-01 04:03:40 +02:00
.github Merge PR #1195: PR template improvement 2018-06-10 06:11:27 +02:00
baseapp Merge PR #1075: Add more baseapp tests 2018-06-05 06:55:02 +02:00
client Revert "Merge PR #1232: Bucky/gaiadebug" 2018-06-13 09:57:54 +02:00
cmd/gaia Merge branch 'develop' into release/v0.19.0 2018-06-13 10:02:55 +02:00
docs Account Numbers for Replay Protection with Account Pruning (#1077) 2018-06-12 04:30:54 +02:00
examples Account Numbers for Replay Protection with Account Pruning (#1077) 2018-06-12 04:30:54 +02:00
networks/remote Added logzio scripts 2018-05-25 03:03:18 +02:00
server Revert "Merge PR #1228: Update to Tendermint develop" (#1231) 2018-06-13 07:25:14 +02:00
store works 2018-05-26 18:00:39 -07:00
tests better tooling for cli, couple lsd fixes 2018-05-31 18:46:25 -07:00
tools Fix bug: make will fail if the path contains whitespace 2018-03-09 13:06:36 +08:00
types Merge PR #1085: Re-enable tx history in LCD 2018-06-11 22:09:29 +02:00
version Update version.go & changelog 2018-06-13 10:05:50 +02:00
wire many renames / golint compliance 2018-04-19 00:49:24 -04:00
x Merge PR #1233: Inflation now unbonded 2018-06-13 09:12:57 +02:00
.codecov.yml codecov: closes #334 2018-01-17 20:00:54 -05:00
.dockerignore Add basic Dockerfile to build all binaries and export gaiad 2018-04-10 12:39:47 +02:00
.gitignore Merge PR #1191: LCD cleanup / add LCD gas field 2018-06-12 03:12:37 +02:00
CHANGELOG.md Update version.go & changelog 2018-06-13 10:05:50 +02:00
CODEOWNERS add ebuchman as codeowner 2018-02-13 08:55:44 -05:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2018-01-29 12:38:50 +01:00
Dockerfile Update Dockerfile for gometalinter requirement 2018-05-08 01:32:15 +02:00
Gopkg.lock Revert "Merge PR #1228: Update to Tendermint develop" (#1231) 2018-06-13 07:25:14 +02:00
Gopkg.toml Revert "Merge PR #1228: Update to Tendermint develop" (#1231) 2018-06-13 07:25:14 +02:00
LICENSE Add README.md to Basecoin; Update licenses 2018-01-28 18:17:19 -08:00
Makefile Revert "Merge PR #1232: Bucky/gaiadebug" 2018-06-13 09:57:54 +02:00
README.md Revert "Merge PR #1232: Bucky/gaiadebug" 2018-06-13 09:57:54 +02:00
Vagrantfile Finally working 2018-01-27 17:40:11 -08:00

README.md

Cosmos SDK

banner

version API Reference Rocket.Chat license LoC Go Report Card

Branch Tests Coverage
develop CircleCI codecov
master CircleCI codecov

WARNING: the libraries are still undergoing breaking changes as we get better ideas and start building out the Apps.

Note: Requires Go 1.10+

Testnet

For more information on connecting to the testnet, see cmd/gaia/testnets

For the latest status of the testnet, see the status file.

Overview

The Cosmos-SDK is a platform for building multi-asset Proof-of-Stake (PoS) blockchains, like the Cosmos Hub. It is both a library for building and securely interacting with blockchain applications.

The goal of the Cosmos-SDK is to allow developers to easily create custom interoperable blockchain applications within the Cosmos Network without having to recreate common blockchain functionality, thus abstracting away the complexities of building a Tendermint ABCI application. We envision the SDK as the npm-like framework to build secure blockchain applications on top of Tendermint.

In terms of its design, the SDK optimizes flexibility and security. The framework is designed around a modular execution stack which allows applications to mix and match elements as desired. In addition, all modules are sandboxed for greater application security.

It is based on two major principles:

  • Composability: Anyone can create a module for the Cosmos-SDK and integrating the already-built modules is as simple as importing them into your blockchain application.

  • Capabilities: The SDK is inspired by capabilities-based security, and informed by years of wrestling with blockchain state machines. Most developers will need to access other 3rd party modules when building their own modules. Given that the Cosmos-SDK is an open framework and that we assume that some those modules may be malicious, we designed the SDK using object-capabilities (ocaps) based principles. In practice, this means that instead of having each module keep an access control list for other modules, each module implements keepers that can be passed to other modules to grant a pre-defined set of capabilities. For example, if an instance of module A's keepers is passed to module B, the latter will be able to call a restricted set of module A's functions.

    The capabilities of each keeper are defined by the module's developer, and it's their job to understand and audit the safety of foreign code from 3rd party modules based on the capabilities they are passing into each 3rd party module. For a deeper look at capabilities, you can read this article.

Note: For now the Cosmos-SDK only exists in Golang, which means that developers can only develop SDK modules in Golang. In the future, we expect that the SDK will be implemented in other programming languages. Funding opportunities supported by the Tendermint team may be available eventually.

Application architecture

Modules

The Cosmos-SDK has all the necessary pre-built modules to add functionality on top of a BaseApp, which is the template to build a blockchain dApp in Cosmos. In this context, a module is a fundamental unit in the Cosmos-SDK. Each module is an extension of the BaseApp functionalities that defines transactions, handles application state and the state transition logic. Each module also contains handlers for messages and transactions, as well as REST and CLI for secure user interactions.

Some of the most important modules already integrated in the SDK are:

  • Auth: Defines a standard account structure (BaseAccount) and how transaction signers are authenticated.
  • Bank: Defines how coins (i.e cryptocurrencies) are transferred.
  • Governance: Governance related implementation including proposals and voting.
  • Staking: Proof of Stake related implementation including bonding and delegation transactions, inflation, fees, unbonding, etc.
  • IBC: Defines the intereoperability of blockchain zones according to the specifications of the IBC Protocol.

Directories

The key directories of the SDK are:

  • baseapp: Defines the template for a basic ABCI application so that your Cosmos-SDK application can communicate with the underlying Tendermint node.
  • client: CLI and REST server tooling.
  • server: RPC server to communicate with the node.
  • examples: Contains examples on how to build working standalone applications.
  • store: Contains code for the multistore (i.e. state). Each module can create any number of KVStores (key-value stores) from the multistore.
  • types: Common types required in any SDK-based application.
  • x(for eXtensions): Folder for storing the BaseApp module and all the already-built modules described in the previous section.

Prerequisites

Getting Started

See the documentation.

Disambiguation

This Cosmos-SDK project is not related to the React-Cosmos project (yet). Many thanks to Evan Coury and Ovidiu (@skidding) for this Github organization name. As per our agreement, this disambiguation notice will stay here.