前面《跨链五部曲之:开篇》我们介绍了 Basecoin, 它是一个基于 tendermint 的 ABCI 应用,同时它也是一个跨链 IBC 应用。
这节,我先带大家一起体验下 Basecoin,介绍下如何利用它在不同的账户之间发送交易,并试着探索下其中的技术内幕。
本文翻译自 《basecoin-basics》,并加入了部分个人理解。
Install
墙外的用户直接运行:
像我们被困在墙内的用户怎么办呢,Basecoin 是用 glide 管理依赖包的,老司机都知道通过 来设置那些被墙包的镜像,具体请参考这篇 《我的golang的包管理方法》。
安装好后,会有两个工具,版本号为 :
basecoin 运行区块链节点
basecli 轻客户端命令行
Generate some keys
首先,生成 2 组账户的 key:
生成 key 时会提示你输入密码,生成好后,查看已有的 key 列表:
同时,你可以看到在 的工作目录下已经有 cool 和 friend 两组 key 了:
Initialize Basecoin
初始化 Basecoin 区块链:
basecoin 会在 目录下创建出运行区块链必须的文件,同时会给 账户打一大笔钱,因为 basecoin 在 区块链创世时配置了 选项。
相应地,basecoin 实现了 ABCI 的 接口(详见 app.go)
Start
准备就绪!现在,我们可以启动 Basecoin 区块链了:
你可以从控制台上看到,Basecoin 会每隔一秒出一个新块。
Initialize Light-Client
Basecoin 区块链已经运行,我们可以初始化 了。打开一个新的命令行窗口:
通过提供 genesis 配置文件给 basecli,它会解析出区块链的 chainID 和 validator 集合,basecli 需要这些信息才能通过 basecoin 区块链的密码学验证逻辑。
注意: 只有在 validator 集合没有变动的情况下才能生效,如果之前 validator 集合发生过更改,你需要通过其他方式来找到当前区块链的 validator 集合。
Send transactions
初始化后,它可以发送交易给 ,并查询 区块链的状态。
为了后续操作方便,先设置两个环境变量对应两个账户名:
来看下我们之前创建的两个账户的资产信息:
第一个账户显示出了它的资产信息,第二个账户显示账户不存在。让我们从第一个账户发点币给第二个账户:
第二个账户现在有 1000 个 mycoin 了,我们可以从第二个账户发回 500 个给第一个账户:
如果我们发送的币超出发送者拥有的数量,毫无疑问,会报错:
从上面例子都可以看出,每次发送交易时,需指定发送者名字 ,发送币及数量 ,接收者名字 以及本次交易的序列号 (有序递增),区块链则返回本次交易 hash,我们可以根据这个 hash 查询到本次交易在区块链上的记录。
Accounts and Transactions
为了更好地理解 basecli 以及 basecoin 是如何工作的,我们需要先补点跟账户、交易相关的基础知识。
Accounts
受以太坊的账户系统的启发,Basecoin 也维护了一个账户系统,每个账户包含一个公钥、不同币种的资产信息以及一个严格递增的交易序列号。
注:Basecoin 是支持多种加密货币的区块链,因此每个账户可以有多种不同的 。
如果你想往区块链里添加更多的币种,只需要在区块链初始化前手动编辑 。
账户被序列号保存在默克尔树中,键为 ,其中是账户的地址。一般地,账户地址是一个 20 字节的公钥哈希(算法),当然,其他格式也支持。Basecoin 中用到的默克尔树是一个平衡二叉查找树,也称 树。
Transactions
Basecoin 定义里一个简单的交易类型 ,它包含多个输入和输出,允许 token 从一个账户转移到其他账户。
注意到还包含 和 字段,Gas 限制了每次交易最多允许执行的计算次数,Fee 指这比交易的交易费,validator 根据交易费大小对接收到的交易进行打包排序,这有点类似于比特币中手续费概念。
和以太坊中的 Gas、GasPrice 概念稍微有点不同,以太坊中的交易费 ,在 Basecoin 中,Gas 和 Fee 是两个独立的概念。
只有在 的时候,才是必选项。之后,它会存储在默克尔树该账户对应的 key 中,后续的交易只需要引用对应的 就可以指定发送者了。
最后,多个输入账户和多个输出账户可以让我们在一笔交易中就实现在不同账户间多个 token 的转移,当然,你必须保证”价值守恒”(,并且,每个输入都要有对应账户的私钥签名。
Conclusion
本章介绍了 basecoin 和 basecli 两个命令行工具及其基本用法,演示了如何启动一条 basecoin 区块链,怎样在账户间发送 token,并讨论了 basecoin 中账户和交易类型,下一章,我们将介绍 Basecoin 的插件系统,为实现跨链做准备。
领取专属 10元无门槛券
私享最新 技术干货