README

API Reference pipeline status Go Report Card Windows Build Status codecov

Chain33 区块链开发框架(为了适合go module 的版本号标准 最新版本号改为: 1.65.0)

高度模块化, 遵循 KISS原则的区块链开发框架

官方网站 和 文档: https://chain.33.cn

官方插件库: https://github.com/33cn/plugin

典型案例: https://github.com/bityuan/bityuan

chain33背后故事: chain33诞生记

视频教程: 视频教程

感谢

腾讯玄武安全实验室

bug 奖励

我们会对bug 评价4个等级(不会奖励人民币,等值虚拟资产)。 只有影响现有在线运行系统的,并且会产生严重分叉等行为的,才会评价为 L3

L0 1000
L1 3000
L2 10000
L3 20000

Building from source

环境要求: Go (version 1.13 or later)

编译:

git clone https://github.com/33cn/chain33.git $GOPATH/src/github.com/33cn/chain33
cd $GOPATH/src/github.com/33cn/chain33
//国内用户需要导入一下代理
export GOPROXY=https://mirrors.aliyun.com/goproxy
make
 注意:国内用户需要加一下阿里云代理,用于获取依赖包, mod功能已经在Makefile默认开启了

测试:

$ make test

运行

通过这个命令可以运行一个单节点到环境,可以用于开发测试

$ chain33 -f chain33.toml

使用chain33 开发插件注意点

  • 不可以使用 master 分支,要使用 发布分支

贡献代码

我们先说一下代码贡献的细节流程,这些流程可以不看,用户可以直接看我们贡献代码简化流程

细节过程
  • 如果有什么想法,建立 issues, 和我们来讨论。
  • 首先点击 右上角的 fork 图标, 把chain33 fork 到自己的分支 比如我的是 vipwzw/chain33
  • git clone https://github.com/vipwzw/chain33.git $GOPATH/src/github.com/33cn/chain33
注意:这里要 clone 到 $GOPATH/src/github.com/33cn/chain33, 否则go 包路径会找不到
  • 添加 33cn/chain33 远端分支: git remote add upstream https://github.com/33cn/chain33.git 我已经把这个加入了 Makefile 可以直接 运行 make addupstream

  • 保持 33cn/chain33vipwzw/chain33 master 分支的同步,可以直接跑 make sync , 或者执行下面的命令

git fetch upstream
git checkout master
git merge upstream/master
注意:不要去修改 master 分支,这样,master 分支永远和upstream/master 保持同步
  • 从最新的33cn/chain33代码建立分支开始开发
git fetch upstream
git checkout master
git merge upstream/master
git branch -b "fixbug_ci"
  • 开发完成后, push 到 vipwzw/chain33
git fetch upstream
git checkout master
git merge upstream/master
git checkout fixbug_ci
git merge master
git push origin fixbug_ci

然后在界面上进行pull request

简化流程
准备阶段
  • 首先点击 右上角的 fork 图标, 把chain33 fork 到自己的分支 比如我的是 vipwzw/chain33
  • git clone https://github.com/vipwzw/chain33.git $GOPATH/src/github.com/33cn/chain33
注意:这里要 clone 到 $GOPATH/src/github.com/33cn/chain33, 否则go 包路径会找不到
make addupstream
开始开发: 这个分支名称自己设置
make branch b=mydevbranchname
开发完成: push
make push b=mydevbranchname m="这个提交的信息"

如果m不设置,那么不会执行 git commit 的命令

修改别人的pull requset

比如我要修改 name=libangzhu branch chain33-p2p-listenPort 的pr

step1: 拉取要修改的分支
make pull name=libangzhu b=chain33-p2p-listenPort

然后修改代码,修改完成后,并且在本地commit

step2: push已经修改好的内容
make pullpush name=libangzhu b=chain33-p2p-listenPort

License

BSD 3-Clause License

Copyright (c) 2018, 33.cn
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Expand ▾ Collapse ▴

Documentation

The Go Gopher

There is no documentation for this package.

Source Files

Directories

Path Synopsis
Package account 实现chain33 区块链资产操作
Package account 实现chain33 区块链资产操作
Package blockchain 实现区块链模块,包含区块链存储
Package blockchain 实现区块链模块,包含区块链存储
Package client 系统接口客户端: 封装 Queue Event
Package client 系统接口客户端: 封装 Queue Event
api
cmd
autotest
Package 自动化系统回归测试工具,外部支持输入测试用例配置文件, 输出测试用例执行结果并记录详细执行日志。
Package 自动化系统回归测试工具,外部支持输入测试用例配置文件, 输出测试用例执行结果并记录详细执行日志。
autotest/testflow
Package testflow test flow, Add=>HandleDepend=>Send=>Check
Package testflow test flow, Add=>HandleDepend=>Send=>Check
autotest/types
Package types 定义autotest包基础结构体、接口、以及函数
Package types 定义autotest包基础结构体、接口、以及函数
chain33
Package main chain33程序入口
Package main chain33程序入口
cli
Package main chain33-cli程序入口
Package main chain33-cli程序入口
cli/buildflags
Package buildflags build flags
Package buildflags build flags
execblock
package main 主要是执行已经同步好的区块链的某个区块
package main 主要是执行已经同步好的区块链的某个区块
jsfmt
package main js转换 -> 1.
package main js转换 -> 1.
miner_accounts
Package main 挖矿监控
Package main 挖矿监控
miner_accounts/accounts
Package accounts is a generated protocol buffer package.
Package accounts is a generated protocol buffer package.
tools
更新初始化文件: 扫描指定path目录下所有的插件,根据扫描到的结果重新更新consensus、dapp和、store、mempool的初始化文件 init.go 使用方式:./tools updateinit -p $(YourPluginPath) 例子:./tools updateinit -p /GOPATH/src/github.com/33cn/chain33/cmd/tools/plugin
更新初始化文件: 扫描指定path目录下所有的插件,根据扫描到的结果重新更新consensus、dapp和、store、mempool的初始化文件 init.go 使用方式:./tools updateinit -p $(YourPluginPath) 例子:./tools updateinit -p /GOPATH/src/github.com/33cn/chain33/cmd/tools/plugin
tools/strategy
Package strategy 实现开发者工具实现不同策略的功能
Package strategy 实现开发者工具实现不同策略的功能
tools/tasks
Package tasks 处理的事务任务
Package tasks 处理的事务任务
tools/types
Package types 开发者工具相关常量等的定义
Package types 开发者工具相关常量等的定义
tools/util
Package util util chain33基础功能函数实现
Package util util chain33基础功能函数实现
Package common contains various helper functions.
Package common contains various helper functions.
address
Package address 计算地址相关的函数
Package address 计算地址相关的函数
crypto
Package crypto 加解密、签名接口定义
Package crypto 加解密、签名接口定义
crypto/sha3
Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202.
Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202.
db
Package db 数据库操作底层接口定义以及实现包括:leveldb、 memdb、mvcc、badgerdb、pegasus、ssdb
Package db 数据库操作底层接口定义以及实现包括:leveldb、 memdb、mvcc、badgerdb、pegasus、ssdb
db/table
Package table 实现一个基于kv的关系型数据库的表格功能
Package table 实现一个基于kv的关系型数据库的表格功能
difficulty
Package difficulty 难度计算基础函数
Package difficulty 难度计算基础函数
limits
Package limits 实现设置进程打开文件资源数
Package limits 实现设置进程打开文件资源数
log
Package log 日志相关接口以及函数
Package log 日志相关接口以及函数
log/log15
Package log15 provides an opinionated, simple toolkit for best-practice logging that is both human and machine readable.
Package log15 provides an opinionated, simple toolkit for best-practice logging that is both human and machine readable.
merkle
Package merkle 实现默克尔树相关的hash计算
Package merkle 实现默克尔树相关的hash计算
pubsub
Package pubsub implements a simple multi-topic pub-sub library.
Package pubsub implements a simple multi-topic pub-sub library.
version
Package version 软件版本号
Package version 软件版本号
vrf
Package vrf defines the interface to a verifiable random function.
Package vrf defines the interface to a verifiable random function.
vrf/secp256k1
Package secp256k1 implements a verifiable random function using curve secp256k1.
Package secp256k1 implements a verifiable random function using curve secp256k1.
Package consensus 共识相关的模块
Package consensus 共识相关的模块
Package executor 实现执行器模块基类功能
Package executor 实现执行器模块基类功能
p2p
Package p2p 实现多种类型p2p兼容管理
Package p2p 实现多种类型p2p兼容管理
utils
Package utils p2p utils
Package utils p2p utils
Package pluginmgr 插件管理模块,负责插件初始化等功能
Package pluginmgr 插件管理模块,负责插件初始化等功能
Package queue chain33底层消息队列模块
Package queue chain33底层消息队列模块
rpc
Package rpc chain33 RPC模块包含JSONRpc以及grpc
Package rpc chain33 RPC模块包含JSONRpc以及grpc
jsonclient
Package jsonclient 实现JSON rpc客户端请求功能
Package jsonclient 实现JSON rpc客户端请求功能
types
Package types rpc相关的一些结构体定义以及转化函数
Package types rpc相关的一些结构体定义以及转化函数
Package store store the world - state data
Package store store the world - state data
Package system 系统基础插件包
Package system 系统基础插件包
consensus
Package consensus 系统基础共识包
Package consensus 系统基础共识包
consensus/init
Package init 初始化系统共识插件
Package init 初始化系统共识插件
consensus/solo
Package solo solo共识挖矿
Package solo solo共识挖矿
crypto/ed25519
Package ed25519 ed25519系统加密包
Package ed25519 ed25519系统加密包
crypto/ed25519/ed25519
Package ed25519 implements the Ed25519 signature algorithm.
Package ed25519 implements the Ed25519 signature algorithm.
crypto/ed25519/ed25519/edwards25519
Package edwards25519 implements operations in GF(2**255-19) and on an Edwards curve that is isomorphic to curve25519.
Package edwards25519 implements operations in GF(2**255-19) and on an Edwards curve that is isomorphic to curve25519.
crypto/init
Package init 初始化系统加密包
Package init 初始化系统加密包
crypto/none
Package none none driver
Package none none driver
crypto/secp256k1
Package secp256k1 secp256k1系统加密包
Package secp256k1 secp256k1系统加密包
crypto/sm2
Package sm2 带证书交易的签名
Package sm2 带证书交易的签名
dapp
Package dapp 系统基础dapp包
Package dapp 系统基础dapp包
dapp/coins
Package coins 系统级coins dapp插件
Package coins 系统级coins dapp插件
dapp/coins/autotest
Package autotest 系统级coins dapp自动测试包
Package autotest 系统级coins dapp自动测试包
dapp/coins/executor
Package executor coins执行器
Package executor coins执行器
dapp/commands
Package commands 系统级dapp相关命令包
Package commands 系统级dapp相关命令包
dapp/commands/types
Package types commands中结构体定义
Package types commands中结构体定义
dapp/init
Package init 初始化系统dapp包
Package init 初始化系统dapp包
dapp/manage
Package manage manage负责管理配置的插件 1.
Package manage manage负责管理配置的插件 1.
dapp/manage/commands
Package commands 管理插件命令
Package commands 管理插件命令
dapp/manage/executor
Package executor 管理插件执行器
Package executor 管理插件执行器
dapp/manage/types
Package types 管理插件相关的定义
Package types 管理插件相关的定义
dapp/none
Package none 系统级dapp,执行内容为空
Package none 系统级dapp,执行内容为空
dapp/none/executor
Package executor none执行器
Package executor none执行器
p2p/dht
Package dht 基于libp2p实现p2p 插件
Package dht 基于libp2p实现p2p 插件
p2p/dht/manage
Package manage p2p manage
Package manage p2p manage
p2p/dht/protocol
Package protocol p2p protocol
Package protocol p2p protocol
p2p/dht/protocol/broadcast
Package broadcast broadcast protocol
Package broadcast broadcast protocol
p2p/dht/types
Package types dht public types Package types 外部公用类型
Package types dht public types Package types 外部公用类型
p2p/init
Package init init dht
Package init init dht
store
Package store store the world - state data
Package store store the world - state data
store/init
Package init 初始化系统store包
Package init 初始化系统store包
store/mavl
Package mavl 默克尔平衡树接口
Package mavl 默克尔平衡树接口
store/mavl/db
Package mavl 默克尔平衡树算法实现以及裁剪
Package mavl 默克尔平衡树算法实现以及裁剪
store/mavl/db/tool
package main 用于测试数据库中的MAVL节点数目
package main 用于测试数据库中的MAVL节点数目
Package types 实现了chain33基础结构体、接口、常量等的定义
Package types 实现了chain33基础结构体、接口、常量等的定义
chaincfg
Package chaincfg 实现chain33的基础配置相关功能
Package chaincfg 实现chain33的基础配置相关功能
jsonpb
Package jsonpb provides marshaling and unmarshaling between protocol buffers and JSON.
Package jsonpb provides marshaling and unmarshaling between protocol buffers and JSON.
cli
Package wallet wallet chain33钱包功能实现
Package wallet wallet chain33钱包功能实现
bipwallet
Package bipwallet 比特币改进协议钱包相关定义
Package bipwallet 比特币改进协议钱包相关定义
bipwallet/basen
Package basen basen (base-N) is a simple Go encoding package for representing bytes as big integers in arbitrary base-N encoding.
Package basen basen (base-N) is a simple Go encoding package for representing bytes as big integers in arbitrary base-N encoding.
bipwallet/btcutilecc
Package btcutil Utility functions for Bitcoin elliptic curve cryptography.
Package btcutil Utility functions for Bitcoin elliptic curve cryptography.
bipwallet/go-bip32
Package bip32 A fully compliant implementation of the BIP0032 spec for Hierarchical Deterministic Bitcoin addresses
Package bip32 A fully compliant implementation of the BIP0032 spec for Hierarchical Deterministic Bitcoin addresses
bipwallet/go-bip39
Package bip39 A golang implementation of the BIP0039 spec for mnemonic seeds
Package bip39 A golang implementation of the BIP0039 spec for mnemonic seeds
bipwallet/go-bip44
Package bip44 基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。
Package bip44 基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。
bipwallet/transformer
Package transformer 通过私钥生成所选币种的公钥和地址
Package transformer 通过私钥生成所选币种的公钥和地址
bipwallet/transformer/btcbase
Package btcbase 转换基于比特币地址规则的币种 使用此规则的币种有:BTC、BCH、LTC、ZEC、USDT、 BTY
Package btcbase 转换基于比特币地址规则的币种 使用此规则的币种有:BTC、BCH、LTC、ZEC、USDT、 BTY
common
Package common 实现钱包基础功能包
Package common 实现钱包基础功能包