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 被分割成各种子包。
下面的包为algod 和kmd 守护程序提供核心功能,以及其他工具和命令。
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守护程序。这个守护程序允许节点签署交易。因为kmd与algod分开,所以kmd允许用户在一个有空气的计算机上签署交易。
下面的软件包允许开发者与Algorand系统对接。
cmd拥有定义进入系统入口的主要命令。cmd/catchupsrv(README)是一个协助在新节点上处理历史块的工具。
libgoal输出一个对Algorand客户端的开发者有用的Go接口。debug拥有辅助命令,在调试过程中帮助开发者。
以下软件包包含帮助Algorand开发者部署自己的网络的工具。
nodecontroltoolsdockercommandandcontrol(README)是一个用于自动部署algod实例网络的工具。componentsnetdeploy
一些软件包提供了各种组件的实用程序。
logging是一个围绕logrus的包装。util包含各种实用程序,包括一个编解码器、一个SQLite包装器、一个goroutine池、一个定时器接口、节点度量等等。
test (README)包含上述组件的端到端测试和实用程序。