go-algorand Algorand在Go中的官方实现

719 阅读5分钟

Build Status

go-algorand

Algorand在Go中的官方实现。

Algorand是一个无权限、纯股权证明的区块链,提供去中心化、可扩展性、安全性和交易最终性。

入门

我们的开发者网站有关于使用和安装Algorand平台的最新信息。

从源代码构建

开发是使用Go编程语言进行的。Go的版本在项目的go.mod文件中指定。本文件假设您已经建立了一个正常的环境。如果您需要帮助设置环境,请访问Go官方文档网站

Linux / OSX

我们目前努力支持基于Debian的发行版,Ubuntu 18.04是我们的官方发布目标。在Arch Linux上构建也是可以的。我们的核心工程团队使用Linux和OSX,所以这两种环境都能很好地支持开发。

仅限OSX:在继续之前必须安装Homebrew(brew)以下是安装要求。

初始环境设置。

git clone https://github.com/algorand/go-algorand

在这一点上,你已经准备好构建go-algorand。我们使用make ,并有一些目标来自动完成常见的任务。

build

make install

测试

# unit tests

样式和检查

make fmt
make lint
make fix
make vet

或替代性的

make sanity

运行一个节点

一旦软件构建完成,你会在${GOPATH}/bin 找到二进制文件,而数据目录将在~/.algorand 被初始化。用${GOPATH}/bin/goal node start -d ~/.algorand 启动你的节点,用${GOPATH}/bin/carpenter -d ~/.algorand 来查看活动。关于如何使用不同的工具,请参考开发者网站

提供你自己的数据目录

你可以从~/.algorand 以外的其他目录中运行一个节点,并加入主网以外的网络。只要建立一个新的目录并将网络的genesis.json 文件复制到其中。比如说。

mkdir 

mainnet、testnet和betanet的Genesis文件可以在installer/genesis/

贡献(代码、文档、错误等

请参考我们的 "贡献"(CONTRIBUTING)文件。

项目布局

go-algorand 被分割成各种子包。

下面的包为algodkmd 守护程序提供核心功能,以及其他工具和命令。

  • crypto 包含了我们用于散列、签名和VRFs的加密结构。这里还有一些Algorand特定的细节,关于支出密钥、协议密钥、一次性使用的签名密钥,以及它们之间的关系。
  • config 保存配置参数。这些包括节点在本地使用的参数,以及必须由协议同意的参数。
  • data 定义了整个代码库中使用的各种类型。
    • basics 保存基本类型,如MicroAlgos、账户数据和地址。
    • account 定义了账户,包括 "根 "账户(可以花钱)和 "参与 "账户(可以参与协议协议)。
    • transactions 定义了账户可以针对Algorand状态发出的交易。这些交易包括标准支付,也包括参与密钥注册交易。
    • bookkeeping 定义了区块,它是以原子方式提交给Algorand的成批交易。
    • pools 实现交易池。交易池将节点看到的交易保存在内存中,然后在区块中提出。
    • committee 实现了认证参与账户在协议协议中的成员资格的凭证。
  • ledger (README)包含Algorand Ledger状态机,它持有区块的序列。Ledger执行应用这些区块而产生的状态转换。它回答对区块的查询(例如,最后提交的区块中有哪些交易?)和对账户的查询(例如,我的余额是多少?
  • protocol 声明了用于识别协议版本的常量,用于路由网络消息的标签,以及用于加密输入的领域分离的前缀。它还实现了规范的编码器。
  • network 包含参与基于WebSockets的网状网络的代码。保持与一些对等体的连接,(可选择)接受对等体的连接,发送点对点和广播消息,并接收消息,将其路由到各种处理程序代码(例如agreement/gossip/network.go注册了三个处理程序)。
    • rpcs 包含HTTP RPCs,它被algod 进程用来相互查询。
  • agreement (README)包含协议服务,它实现了Algorand的拜占庭协议协议。该协议允许参与的账户以叉子安全的方式快速确认区块,前提是有足够的账户股权正确执行该协议。
  • node 集成了上述组件并处理初始化和关闭。它提供对这些组件的查询。

daemon 定义了两个为Algorand客户端提供服务的守护程序。

  • daemon/algod 持有algod 守护程序,它实现了一个参与节点。algod 允许节点参与协议协议,提交和确认交易,并查看 Algorand Ledger 的状态。
    • daemon/algod/api (README)是用于与algod互动的REST接口。
  • daemon/kmd (README)持有kmd 守护程序。这个守护程序允许节点签署交易。因为kmdalgod 分开,所以kmd 允许用户在一个有空气的计算机上签署交易。

下面的软件包允许开发者与Algorand系统对接。

  • cmd 拥有定义进入系统入口的主要命令。
    • cmd/catchupsrv (README)是一个协助在新节点上处理历史块的工具。
  • libgoal 输出一个对Algorand客户端的开发者有用的Go接口。
  • debug 拥有辅助命令,在调试过程中帮助开发者。

以下软件包包含帮助Algorand开发者部署自己的网络的工具。

  • nodecontrol
  • tools
  • docker
  • commandandcontrol (README)是一个用于自动部署algod实例网络的工具。
  • components
  • netdeploy

一些软件包提供了各种组件的实用程序。

  • logging 是一个围绕logrus 的包装。
  • util 包含各种实用程序,包括一个编解码器、一个SQLite包装器、一个goroutine池、一个定时器接口、节点度量等等。

test (README)包含上述组件的端到端测试和实用程序。