主页 > 怎么在华为下imtoken > 使用 Loom SDK 构建以太坊侧链并部署智能合约

使用 Loom SDK 构建以太坊侧链并部署智能合约

怎么在华为下imtoken 2023-03-05 05:21:55

前两天写了一篇使用Truffle开发链上记事本的文章[1]。 很多人说写这样的笔记要花多少钱。 在这篇文章中,让我们看看如何将链上记事本智能合约迁移到Loom SDK 构建的以太坊侧链,将在下一篇文章中介绍如何用loom.js[2] 重写这个DApp。

关于织机

Loom(或 Loom Network)是一个探索区块链 Layer 2 扩容技术的团队。 他们正在尝试构建一个可用于游戏和其他领域的二层网络(Layer 2)平台。 目前开发的两个重要产品是 Loom PlasmaChain 和 Loom SDK。

织机等离子链

Loom PlasmaChain 是一个高性能的 DPoS 侧链,它实现了 Plasma Cash 框架模型 [3](提供 1-3 秒的交易确认时间)。

这条侧链带来的特点是显而易见的。 它可以获得以太坊底层网络的安全背书,让我们可以使用以太坊上发行的Token(包括ERC20和ERC721支持),享受DPos共识带来的收益。 高性能。

以太坊交易确认至少需要 15 秒,并且需要 gas 费,所以当然牺牲了一些去中心化。

这张图可以展示 PlasmaChain 和以太坊之间的关系。 未来会链接多个侧链。 根据 PlasmaChain 官方整合,排名前 100 的 ERC20 代币,包括 6 个稳定币。

Loom SDK(工具集)

Loom SDK 允许开发者快速构建自己的区块链(DApp 侧链),同时也提供了一些用于开发和部署应用程序的工具。 这包括:

用于创建您自己的应用程序链的可执行 loom 命令行工具。

有时狭义的 Loom SDK 指的是单独的工具

其他一些工具,比如用于主链和侧链之间资产转移的工具:plasma-cli gateway-cli。

本文后面将介绍用于部署合约和开发DApps的JavaScript SDK,包括Loom Truffle Provider和loom-js。

用于部署合约和开发 DApp 的 Go SDK。

以及游戏相关SDK的开发:Cosos SDK、Unity SDK。

本文的重点是介绍如何使用 Loom SDK 创建自己的链并部署应用程序。

Loom 安装并启动区块链 Loom 安装

loom命令行工具的安装很简单,直接下载可执行文件,在控制台输入:

wget https://private.delegatecall.com/loom/osx/stable/loomchmod +x loom

怎么搭建以太坊侧链_搭建以太坊私有链_以太坊 侧链

复制

您可以将 loom 添加到环境变量中以备后用。

我使用的系统是Mac OS。 如果你用的是Linux,wget后面的url是,Window暂时不支持,可以选择虚拟机。

初始化链

mkdir loom-chain  # 为侧链创建一个目录cd loom-chainloom init

复制

初始化命令会生成genesis.json和chaindata目录,genesis.json是本侧链的创世区块配置,chaindata目录用户保存区块数据。

运行区块链

使用以下命令启动新初始化的 DApp 侧链:

loom run

复制

输出如下所示:

I[29046-04-29|20:46:50.356] Loading IAVL Store                           module=loomI[29046-04-29|20:46:50.362] Using simple log event dispatcherI[29046-04-29|20:46:50.368] Deployed contract                            vm=plugin location=coin:1.0.0 name=coin address=default:0xe288d6eec7150D6a22FDE33F0AA2d81E06591C4dInit DPOS Params &dpos.DPOSInitRequest{Params:(*dpos.Params)(0xc000e44dc0), Validators:[]*types.Validator{(*types.Validator)(0xc000e46dc0)}, XXX_NoUnkeyedLiteral:struct {}{}, XXX_unrecognized:[]uint8(nil), XXX_sizecache:0}I[29046-04-29|20:46:50.369] Deployed contract                            vm=plugin location=dpos:1.0.0 name=dpos address=default:0x01D10029c253fA02D76188b84b5846ab3D19510DE[29046-04-29|20:46:50.374] Couldn't connect to any seeds                module=p2pI[29046-04-29|20:46:50.374] Starting RPC HTTP server on [::]:46658       module=query-serverI[29046-04-29|20:46:50.374] Starting RPC HTTP server on 127.0.0.1:9999   module=query-server

复制

启动的侧链运行在46658端口,可以通过区块链浏览器://127.0.0.1:46658查看本测试链的区块数据,如图:

它是 Plasma Chain 的区块链浏览器。 在block browser浏览器下方,可以选择链接的RPC服务器,选择本地IP和端口。

现在链已准备就绪,下一步是开发和部署 DApp。 我们仍然使用 Truffle 进行开发。 不熟悉的可以参考:Truffle官方开发文档-中文[4]

在侧链上开发和部署智能合约

以太坊 侧链_搭建以太坊私有链_怎么搭建以太坊侧链

在使用Truffle开发链上notebook[5]一文中,介绍了如何开发这个DApp,这里不再赘述。

这个链上记事本的源代码在 GitHub[6]。 在进行以下操作之前,需要先git clone到本地:

> git clone git@github.com:xilibi2003/note_dapp.git> npm install  # 安装相应的依赖

复制

Truffle 配置侧链网络

原代码中Truffle是连接以太坊网络的,所以需要修改truffle.js加入新创建的侧链网络,这和我们介绍的使用truffle-hdwallet-provider连接Infura网络的原理类似更早之前,连接侧链网络还需要提供一个Provider,即Loom Truffle Provider[7],在修改配置前先安装:

npm install loom-truffle-provider --save

复制

然后修改配置文件truffle.js,(有Truffle配置[8]文档),参考配置如下:

const { readFileSync } = require('fs')const LoomTruffleProvider = require('loom-truffle-provider')
const chainId    = 'default'const writeUrl   = 'http://127.0.0.1:46658/rpc'const readUrl    = 'http://127.0.0.1:46658/query'const privateKey = readFileSync('./priv_key', 'utf-8')
const loomTruffleProvider = new LoomTruffleProvider(chainId, writeUrl, readUrl, privateKey)
module.exports = {  networks: {    loom_dapp_chain: {      provider: loomTruffleProvider,      network_id: '*'    }  }}

复制

在配置中,我们添加了一个新的网络 loom_dapp_chain,由 LoomTruffleProvider 提供。 :46658/用于启动侧链节点使用loom run提供的RPC服务。 细心的同学应该已经发现了priv_key,这是用来部署合约到侧链链上账户的私钥文件,下面我们来创建一下。

配置链接到其他侧链,可以参考PlasmaChain测试网[9]

创建测试链账户

loom 工具提供了创建帐户的选项。 在项目note_dapp目录下,执行如下命令:

怎么搭建以太坊侧链_以太坊 侧链_搭建以太坊私有链

$ loom genkey -k priv_key -a pub_key

复制

输出如下(当然你的账户会和我的不一样):

local address: 0x8b7A68cFf3725ca1b682XLb575bC891e381138ef8local address base64: i3poz/NyXKG2gv5XW8iR44ETjvg=

复制

此命令将在当前文件夹中生成私钥和公钥文件:priv_key 和 pub_key。 priv_key 文件包含用于稍后将合约部署到侧链的私钥。

部署到 DApp 侧链

在执行部署时(需要确保链当前正在运行),使用--network指定网络,命令如下:

truffle migrate --network loom_dapp_chain

复制

输出结构如下:

Compiling ./contracts/Migrations.sol...Compiling ./contracts/NoteContract.sol...Writing artifacts to ./build/contracts
Starting migrations...======================> Network name:    'loom_dapp_chain'> Network id:      13654820909954> Block gas limit: 0
.......
2_deploy_contract.js====================
   Deploying 'NoteContract'   ------------------------   > transaction hash:    0x88a6131cb89fcf...d72d3f92ceb2e   > Blocks: 0            Seconds: 0   > contract address:    0x0611Afc2fac9B72f5a75E1BC330Ba4c5da103217   > account:             0x8b7A68cFf3725ca1b682XLb575bC891e381138ef8   > balance:             0   > gas used:            0   > gas price:           0 gwei   > value sent:          0 ETH   > total cost:          0 ETH
   > Saving migration to chain.   > Saving artifacts   -------------------------------------   > Total cost:                   0 ETH

怎么搭建以太坊侧链_搭建以太坊私有链_以太坊 侧链

Summary=======> Total deployments: 2> Final cost: 0 ETH

复制

从这个输出中,将列出部署的网络名称、网络 id、交易哈希、合约地址等信息怎么搭建以太坊侧链,并且还将在构建目录中生成相应的文件 contracts/NoteContract.json 以及示例部署操作。

与侧链上的智能合约交互

Truffle 提供了一个控制台 truffle console[10]

启动控制台

首先通过--network选项指定连接DApp侧链loom_dapp_chain,进入控制台,命令如下:

truffle console --network loom_dapp_chain

复制

进入控制台后怎么搭建以太坊侧链,控制台提示文字如下:

truffle(loom_dapp_chain)> 

复制

然后我们就可以在这个控制台中执行交互式命令了。

获取合约实例

truffle(loom_dapp_chain)> let instance = await NoteContract.deployed()truffle(loom_dapp_chain)> instance

复制

检查实例会输出实例实例的详细信息,使用的Provider,包括哪些方法,ABI描述等,结果如下:

TruffleContract {...web3:      Web3 {        class_defaults:      { from: '0x8b7A68cFf3725ca1b682XLb575bC891e381138ef8',        gas: 6721975,        gasPrice: 20000000000 },currentProvider:      TruffleLoomProvider {        _engine: [LoomProvider],        send: [Function],        _alreadyWrapped: true },     network_id: '13654820909954' },  methods:   { 'notes(address,uint256)':      { ... },     'addNote(string)':      {... },     'getNotesLen(address)':      {...},     'modifyNote(address,uint256,string)':      { ... },  abi:   [...]}

搭建以太坊私有链_怎么搭建以太坊侧链_以太坊 侧链

复制

通过合约实例调用合约函数

调用合约添加备注:

truffle(loom_dapp_chain)> instance.addNote("abc");

复制

获取当前账号(后面查看笔记数量的功能需要用到账号作为参数,所以先获取账号):

truffle(loom_dapp_chain)> let accounts = await web3.eth.getAccounts()truffle(loom_dapp_chain)> accounts[0]

复制

这时控制台会打印出账户地址:

‘0x8b7A68cFf3725ca1b682XLb575bC891e381138ef8’

复制

查看该账号下的笔记数量:

truffle(loom_dapp_chain)> let noteNum = await instance.getNotesLen("0x8b7A68cFf3725ca1b682XLb575bC891e381138ef8")truffle(loom_dapp_chain)> noteNum.toNumber()# 输出结果1

复制

调用其他方法类似,这里就不一一解释了,可以参考Truffle Documentation - Interacting with Contracts[11]

下一篇文章将继续介绍如何在DApp中与合约进行交互。

加入知识星球[12],与一群优秀的区块链从业者一起学习。

区块链简单讲解[13] - 系统学习区块链,学区块链的人都在这里,打造最好的区块链技术博客。 因为微信不支持链接,感兴趣的同学可以阅读原文:

参考

[1] 使用Truffle开发链上notebook: [2] 使用loom.js重写这个DApp: [3] Plasma Cash框架模型: [4] Truffle官方开发文档-中文: [5] 使用Truffle开发a chain 在记事本上:[6] GitHub:[8] Truffle 配置:[9] PlasmaChain 测试网络:[10] truffle 控制台:#[11] Truffle 文档 - 与合约交互:[13] 用简单的术语解释区块链: