Bytom DAPP 开发流程

本贴最后更新于 667 天前,其中的信息可能已经事过景迁

从目前已经发布的 DAPP 来看,DAPP 架构大致可以分成 3 种类型:插件钱包模式、全节点钱包模式和兼容模式。

接下来介绍的比原链 DAPP 的架构模式跟账户模型 DAPP 的插件钱包模式有些相似,都是由 DAPP 前端、插件钱包和合约程序共同组成,其中插件钱包需要连接去中心化的区块链服务器 blockcenter,该服务器主要是为了管理插件钱包的相关信息。此外,比原链是 UTXO 模型的区块链系统,合约程序存在于无状态的 UTXO 中,如果要实现这样一个具体的 DAPP,就需要在前端和后端多做一些逻辑的处理。

1. 编写、编译并实例化智能合约

编写智能合约

比原链的虚拟机是图灵完备的,理论上可以实现任意图灵计算机能实现的操作。而 Equity 作为比原链的智能合约语言,使用 Equity 语言可以实现许多典型的金融模型案例,但是为了解决停机问题,比原链也设置了手续费的上限,因此用户在设计合约的时候做一下权衡。

合约模板结构如下:

contract contract_name(...) locks valueAmount of valueAsset {
  clause clause_name(...) {
    ...
    lock/unlock ...
  }
  ...
}

Equity 语法结构简单,语句意思明确,有开发经验的童鞋一看基本能明白合约的意思。编写智能合约可以参考Equity 合约介绍,文档中对 Equity 语言的语法和编译方法都做了详细的介绍。此外,文档还对一些典型的模板合约进行了介绍,开发者可以自己需求进行参考。

编译并实例化合约

编译合约目前支持两种方式,一种是使用 Equity 编译工具,另一种是调用比原链中编译合约的 RPC 接口 compile; 而合约实例化是为了将合约脚本按照用户设定的参数进行锁定,编译并实例化合约可以参考编译并实例化合约的上半部分说明,该文档不仅介绍了合约的参数构造说明,还对编译合约的步骤进行详细说明。而编译器以及相关工具位于Equity 编译器中,是使用 go 语言开发的,用户可以下载源代码并编译使用。

工具编译和实例化示例如下:

// compile
./equity [contract_name] --bin

// instance
./equity [contract_name] --instance [arguments ...]

2. 部署合约

部署合约即发送合约交易,调用比原链的 build-transaction 接口将指定数量的资产发送到合约 program 中,只需将输出 output 中接收方 control_program 设置为指定合约即可。用户可以参考合约交易说明中的锁定合约章节,交易的构造按照文档中介绍进行参考即可。如果合约交易发送成功,并且交易已经成功上链,便可以通过调用 API 接口 list-unspent-outputs 来查找该合约的 UTXO

部署合约交易模板大致如下:

{
  "actions": [
    // inputs
    {
	// btm fee
    },
    {
	amount, asset, spend_account
	// spend user asset
    },

    // outputs
    {
	amount, asset, contract_program
	// receive contract program with instantiated result
    }
  ],
  ...
}

3. 搭建 DAPP 架构

Bytom 的 blockcenter 服务器是官方开发的去中心化插件钱包服务器,开发者可以按照相关 API 接口来调用即可。比原链的 DAPP 总体框架模型如下:

frame.png

DAPP 前端

搭建 DAPP 前端主要包含两个方面:一个是前端与插件钱包的交互,另一个是前端的逻辑处理、以及与缓冲服务器的交互。插件钱包是与区块链节点服务器通信的窗口,一个 DAPP 为了跟区块链节点进行通信,需要通过借助插件来与后台服务器节点进行交互。比原的插件钱包除了与后台服务器进行交互之外,还包含一些本地业务逻辑处理的接口 API,具体内容可以参考一下 DAPP 开发者向导。由于比原链是基于 UTXO 模型的区块链系统,交易是由多输入和多输出构成的结构,并且交易输入或输出的位置也需要按照顺序来排列,因此开发 DAPP 需要前端处理一些构建交易的逻辑。除此之外,合约中的 lock-unlock 语句中涉及到数量的计算需要根据抽象语法树来进行预计算,计算的结果将用于构建交易,而 verifyif-else 等其他语句类型也需要进行相关的预校验,从而防止用户在执行合约的时候报错。

从功能层面来说,前端主要包含页面的设计、插件的调用、合约交易逻辑的处理、缓冲服务器的交互等。接下来对这几个重要的部分展开说明:

前端逻辑处理流程大致如下:

DAPP 缓冲服务器

缓冲服务器主要是为了在管理合约 UTXO 层面做一些效率方面的处理,包括了对 bycoin 服务器是如何同步请求的,此外对 DAPP 的相关交易记录也进行了存储。bycoin 服务器是比原链的去中心化钱包服务器,缓冲服务器的 UTXO 跟它是同步更新的,比原官方插件钱包默认连接的就是该服务器。尽管 bycoin 服务器的也对比原链的所有 UTXO 进行了管理,但是由于 UTXO 数量比较大,如果直接在该层面处理会导致 DAPP 性能不佳,所以建议用户自己构建自己的缓冲服务器做进一步优化处理。此外,DAPP 开发者也可以搭建了自己的去中心化钱包服务器,并且自己开发相关的插件。

缓冲服务器架构可以参考一下 bufferserver 案例的源代码,其编译和启动步骤如下:

Bytom DAPP 实例

Bytom DAPP 实例说明,请参考储蓄分红 DAPP

  • 比原链
    20 引用 • 2 回帖
  • DApp
    7 引用 • 21 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    93 引用 • 746 回帖 • 1 关注

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...