# 使用Avail作为DA部署Dymension RollApps

By [Silent ⚛| validator](https://paragraph.com/@exploring) · 2024-01-27

---

最新更新
====

![](https://storage.googleapis.com/papyrus_images/dd3dafceba758d7b4d481301b67f5e58821de67ea2f564a6f737c932ccf78284.png)

**这个任务已经结束了。您必须在排行榜上有积分，才能在节点冲突结束时考虑获得奖励。官方也不再接受新的tickets。**

Avail，由Polygon前联合创始人Anurag Arjun创建，是一个专注于数据可用性（DA）的模块化区块链(和celestia同赛道)。

它为下一代去中心化应用和主权级Rollup提供支持，特别强调轻客户端通过对等网络轻松验证数据可用性的能力。Avail的模块化设计使开发人员可以更容易地集成区块链技术，无需担心验证节点集合或代币经济模型。此外，它支持各种执行环境，包括EVM、WASM和新的自定义运行时。

近期Avail 开启了[Clash of Nodes**激励测试网**](https://docs.availproject.org/clash-of-nodes/challenges/)，**完成任务有积分**。目前有一个Anyone都能参与的任务——使用Avail作为DA部署Dymension RollApps。

![](https://storage.googleapis.com/papyrus_images/ef7013c2fadb492debe708181bb3162d7a3c59096b8049073a6bce276f614864.png)

官方文档中提到了哪些ROLLAPP符合要求

![](https://storage.googleapis.com/papyrus_images/0983333683b334ac92e5f1ff541bce8189af0c4e125694c5cdb3db87226855bc.png)

1.  使用Avail作为DA层
    
2.  可操作和可访问：RollApp 应在可公开访问的环境中主动运行和托管，而不是局限于专用网络。
    
3.  功能性：必须不仅仅是一个裸节点；RollApp 应具备操作特性或功能。
    
4.  公共界面：提供可公开访问的网页，以便用户与 RollApp 交互，或其使用的详细说明。
    
5.  **护照验证**：管理 RollApp 的团队成员必须在社区内具有“**Passport verified**”角色。（通过Gitcoin Passport认证）
    

**本教程仅供参考，请以**[**官方教程**](https://docs.availproject.org/clash-of-nodes/dymension/)**为准。**

**部署Rollapp**
=============

**本教程是新建rollapp，如果你有老的rollapp需要迁移，请根据**[**官方教程**](https://docs.availproject.org/clash-of-nodes/dymension/)**。（迁移比新建验证更简单）**

### **硬件要求**

*   2核
    
*   至少 100GB SSD 磁盘存储
    
*   至少 16GB RAM
    
*   至少 100mbps 网络带宽
    

### **安装roller**

    sudo apt update -y
    sudo apt install jq -y
    curl -L https://dymensionxyz.github.io/roller/install.sh | bash
    

安装成功显示如下

    💈 Installation complete! You can now use roller from your terminal.
    

验证

输出中应该有

    💈 Roller version v1.0.6-beta
    💈 Build time: 2024-01-18T09:05:45+0000"
    💈 Git commit: 21b1b22e96466cc83b051ebacfb513b3a0d99de1
    

### **初始化RollApp**

这里我们选择默认的EVM环境,DA层为Avail。

    roller config init <rollapp-id> <denom> --da Avail
    

其中`rollapp-id`格式如下

    仅包含字母字符
    
    例如: berlin,test
    

`denom`为你的rollapp原生代币的名称。如BTC,PEPE,DYM等，需要3字母以上。

如果成功，会显示如下。

![](https://storage.googleapis.com/papyrus_images/a8dbe3c051542c181908b333e9573b3312ccf9650236f349b776710a802a163a.png)

这里我们得到了3个地址，需要领水龙头。dym开头的地址去Dymension Discord #froopyland-faucet 频道发`$request <dym开头的地址>`

**领取avail测试币需要在Avail discord领取，需要验证Gitcoin Passport（具体规则见Avail discord faucet-access频道）。**

验证完成后，在goldberg-faucet频道发

    /deposit 你的avail地址
    

领到测试币后，我们可以注册我们的rollapp了。

    roller tx register
    

注册成功会显示如下

`💈 Rollapp 'xxx_4544616-1' has been successfully registered on the hub.`

接下来运行我们的rollapp。我们将其配置成服务运行。

输入

    roller services load
    

成功后会显示`💈 Services 'sequencer', 'da-light-client' and 'relayer' been loaded successfully. To start them, use 'systemctl start <service>'.`

**官方的默认hub rpc不太稳定,我们可以换成其他的。**

     roller config set hub-rpc "https://rpc-dymension-testnet.mzonder.com:443"
    

接下来输入

    sudo systemctl enable sequencer
    sudo systemctl enable relayer
    

和

    sudo systemctl start sequencer
    sudo systemctl start relayer
    

以启动服务。

#### **检查运行状态**

    sudo systemctl status sequencer
    sudo systemctl status relayer
    

正常情况下，2个都应显示为active (running)。

#### **查看sequencer 日志(按ctrl+c退出)**

    sudo journalctl -u sequencer -f
    

正常情况应该看到

    💈 The Rollapp sequencer is running on your local machine!
    💈 Default endpoints:
    💈 EVM RPC: http://0.0.0.0:8545
    💈 Node RPC: http://0.0.0.0:26657
    💈 Rest API: http://0.0.0.0:1317
    💈 Log file path:  /Users/USERNAME/.roller/rollapp/rollapp.log
    💈 Rollapp root dir:  /Users/USERNAME/.roller/rollapp
    

查看详细日志

    tail -f ~/.roller/rollapp/rollapp.log 
    

#### **查看中继器日志(按ctrl+c退出)**

    sudo journalctl -u relayer -f
    

正常情况应该看到

    💈 The relayer is running successfully on you local machine on channel channel-0!
    

**注意：中继器（relayer）通常需要较长时间才能启动成功,一般要几小时以上。请耐心等待。**

**如果一直都没有成功，则通道可能已进入卡住状态。请打开一个新终端并运行**

    sudo systemctl stop relayer
    roller relayer start --override
    

以创建新通道。

完成后，关闭终端并重启服务

**查看relayer 详细日志(如果你的中继器一直有问题才需要看这部分)**

     tail -f ~/.roller/relayer/relayer.log
    

如果一直是这样的日志(503, error in json rpc client …) 可能是hub rpc问题

![](https://storage.googleapis.com/papyrus_images/ef1f0e3c7093b8c2ca3241082fb7cbddcd69a776b8aea72e4a785d74afb177a4.png)

建议换一个hub rpc

    roller config set hub-rpc "新的hub rpc:443"
    sudo systemctl restart sequencer
    sudo systemctl restart relayer
    

也可能是avail rpc的问题。

    tail -f ~/.roller/rollapp/rollapp.log 
    

检查sequencer +da的日志。

如果出现

![](https://storage.googleapis.com/papyrus_images/3c2f4144fbf9c6413893e17f16a8043a6a0e0a6f6a8eeb5d918e3f234a7f12f6.png)

说明avail rpc有问题，建议去avail discord反馈。正常应该是这样的

![](https://storage.googleapis.com/papyrus_images/3b0a916878770435ddbe5a05d75ab74291cfb230ae0ddd8f94ec969ccb74250c.png)

然后等几分钟再看看relayer日志。

![](https://storage.googleapis.com/papyrus_images/e95404f8e0807beb6e8042cf5ca098ad1a522d50dbf2eb4fa921f48e5fcd9792.png)

上面这样是正常的。

### **监控**

请参考官方教程[https://docs.dymension.xyz/build/production/monitor](https://docs.dymension.xyz/build/production/monitor)

### **IBC 转账**

如果你的中继器运行成功了，运行

    roller relayer  status
    

会显示如下

    💈 Relayer Channels: src, channel-0 <-> channel-1, dst
    

这时，source channel将是**channel-0 （具体数字不一定是0，1）**

如果显示的内容不是上面这样，说明你的relayer还没有运行成功，**如果十几小时以上还没有成功，请运行以下命令，以创建新通道。**

    sudo systemctl stop relayer
    roller relayer start --override
    

完成后，关闭终端并重启服务

可以用这个命令进行ibc transfer （**这个命令不是必须的**）

    rollapp_evm tx ibc-transfer transfer transfer <src-channel> <destination-address> 5000000000000000000000000<base-denom> --from rollapp_sequencer --keyring-backend test --home ~/.roller/rollapp --broadcast-mode block
    

注意这里的 `src-channel` 就是上面显示的source channel。 而`base-denom` 是小写字母 u加上你刚刚设置的denon。如`utest`

_这里的数量和以太坊wei 相对于ether一样。1 xxx= 10^18 uxxxx_

**用户应该预计 IBC 交易提交和目标地址接收之间会有大约 15 -30分钟的延迟。这是为了模拟防欺诈期，只有在防欺诈期过后，资金才会在 Dymension Hub 上可用**

### **给水龙头转账**

如果你的中继器运行成功了，运行

    roller relayer  status
    

会显示如下

    💈 Relayer Channels: src, channel-0 <-> channel-1, dst
    

**channel不一定是0，1。** 之后我们可以运行以下命令转移部分资金给水龙头。

    roller tx fund-faucet
    

等待15-30分钟后，可以去Discord #froopyland-faucet 频道发以下命令查询你的ibc transfer是否成功，**如果没有成功，可以再发几次交易**。

    $balance dym1g8sf7w4cz5gtupa6y62h3q6a4gjv37pgefnpt5 <你的rollapp-id>
    

这里的rollapp-id可以通过 `roller config show` 查看，类似`silent_1319141-1`

如果成功后，其他用户将可以通过

    $request <user-address> <rollapp-id>
    

领取你的rollapp测试币。并与你的rollapp交互。

PR通过后，建议使用[门户](https://portal.dymension.xyz/)将代币IBC 传输到相应的 RollApp。

**开发你的rollapp（目前这个步骤是必须的，你需要在rollapp部署智能合约，并且应该能够向管理描述它到底做了什么）**
----------------------------------------------------------------

### **导出私钥**

运行`roller keys list` 将显示如下

    🔑 Addresses:
    
      my_celes_key        | RollApp Sequencer account on the Celestia network
      hub_sequencer       | RollApp Sequencer account on the Dymension Hub
      rollapp_sequencer   | RollApp Sequencer account on the RollApp
      relayer-hub-key     | IBC relayer account on Dymension Hub
      relayer-rollapp-key | IBC relayer account on RollApp
    

目前支持导出 `hub_sequencer`, `rollapp_sequencer` and `my_celes_key` 使用

    roller keys export rollapp_sequencer
    

导出你的`rollapp_sequencer` 私钥，你可以将私钥导入到metamask等其他地方。

使用以下配置连接到你自己的rollapp网络。

    Network Name: <YOUR-ROLLAPP-NAME>
    
    New RPC URL: <RPC-END-POINT> //  http://你的ip:8545
    
    Chain ID: <YOUR-CHAIN-ID> // 你的EIP155 数字 (middle number of RollApp ID，对于test_101-1， 这个数字是101)
    
    Currency Symbol (optional): <你rollapp 原生代币，如ETH,DYM>
    

**接下来，你可以想在别的evm链开发一样，开发你自己的app了。可以查看官方教程中的示例。**[**用Remix 部署合约并交互。**](https://docs.dymension.xyz/build/quick-start/evm/create) **也可以用truffle,hardhat等。**

**设置https rollapp rpc**
=======================

开发人员应在https下提供以下端点。这将允许用户能够与您的 RollApp 交互：

1.  RollApp RPC 端点（默认端口`26657`）
    
2.  Rest端点（默认端口`1317`）
    
3.  JSON RPC 端点（默认端口`8545`。仅与 EVM RollApps 相关）
    

**首先，你需要准备一个域名，并将 RPC、REST 和 JSON RPC 端点的相应域名解析指向你的服务器。接下来，你可以使用 Nginx 或 Caddy 来配置 HTTPS 代理。请注意，这个配置过程相对复杂，建议你查询相关文档学习**。

**将您的 RollApp 添加到 Dymension Registry**
======================================

**此注册过程在 Dymension Hub 中为您的 RollApp 引入了专用命名空间。注册后，RollApp 就会被 Dymension Hub 识别，从而允许排序器在链上发布状态更新，并增强不同生态系统之间的互操作性。**

为了将您的RollApp添加到Dymension Registry，需要执行下面的步骤

1\. 按照给水龙头转账部分所述，用您的 rollapp 代币为Discord水龙头提供资金。

可以用下面的命令查询。

    $balance dym1g8sf7w4cz5gtupa6y62h3q6a4gjv37pgefnpt5 <RollApp-ID>
    

2.打开 [https://github.com/dymensionxyz/chain-registry](https://github.com/dymensionxyz/chain-registry)

(**注意，现在更换了一个新的github链接)**

并点击右上角的fork按钮。

![](https://storage.googleapis.com/papyrus_images/12497bb5dd954af7690d75b2dd77efa215df5bdf5605984cd5b3c674adb389f3.png)

如果你以前fork过，打开你自己的库

（ `https://github.com/<你的github用户名>/chain-registry`）

点击Sync fork,点击Update Branch

![](https://storage.googleapis.com/papyrus_images/8a78672dd5c35a5d364348b7c8f46dde8da8d11dcad9195b56ffbb92875fabe1.png)

3\. 运行

    git clone https://github.com/<你的github用户名>/chain-registry 
    

4\. 运行

    cd chain-registry/devnet
    

5\. 通过 `roller config show` 命令找到你的RollappID 。并运行

    export ROLLAPP_ID=<你看到的RollappID>
    

6\. 创建适当的文件和文件夹

    mkdir -p $ROLLAPP_ID/logos cd $ROLLAPP_ID && touch $ROLLAPP_ID.json 
    

7\. 将您的 RollApp 图标添加到该logos文件夹​​中。图标文件名：.. 可以是 SVG、PNG 或 JPG 格式（**请确保文件不超过 50KB**）。例如silent\_1319141-1.jpg。可以使用FTP上传文件到服务器里，具体用法请自行百度或者谷歌。 8. 运行roller config export 并将 JSON 输出复制粘贴到 刚刚创建的$ROLLAPP\_ID.json文件 并填写以下字段（可以使用vim等文本编辑器，方法请自行百度或者谷歌）： a. rpc: `"http://<你的ip或者域名>:<端口>" (默认端口是26657)` **根据新要求，需要是https端点。** b. rest: `"http://<你的ip或者域名>:<端口>" (默认端口是1317)` **根据新要求，需要是https端点。** c. evm rpc (仅仅适用于evm rollapp): `"http://<你的ip或者域名>:<端口>" (默认端口是8545)` **根据新要求，需要是https端点。** d. Logo path: `"/logos/<RollApp-ID>.<format>"` 可选字段: e. chainName: 在门户页面替换 `<RollApp-ID>` 作为你的Rollapp名称 f. description: add `"<你的RollApp描述>",` 以显示在门户页面里 g. website: add `"<你的rollapp的网址>",`以显示在门户页面里 json下方`"analytics": true,` **必须补充以下内容** `"goldberg": true` `"availAddress": "<你Rollapp的avail 地址 >"` avail 地址运行`roller keys list` 可以得到 下面是**avail官方给的模版，请参考这个模版** { "chainId": "your\_chain\_id", "chainName": "Your Chain Name", "rpc": "http://your.rpc.url:port", "rest": "http://your.rest.url:port", "bech32Prefix": "your\_prefix", "currencies": \[ { "displayDenom": "YOUR\_TOKEN", "baseDenom": "uYOUR\_TOKEN", "decimals": 18, "logo": "/path/to/your/logo.png", "type": "main" } \], "coinType": 60, "faucetUrl": "http://link.to.your.faucet", "website": "http://link.to.your.website", "logo": "/path/to/your/logo.png", "ibc": { "hubChannel": "your\_hub\_channel", "channel": "your\_channel", "timeout": 172800000 }, "evm": { "chainId": "your\_evm\_chain\_id", "rpc": "http://your.evm.rpc.url:port" }, "type": "RollApp", "da": "Avail", "description": "Description of your RollApp", "analytics": true, "goldberg": true, "availAddress": "Your RollApp's Avail address" } **然后可以通过** [https://jsonlint.com/](https://jsonlint.com/) **这类工具验证你的json格式。** 9. 在github添加并提交你的更改。 git add . git commit -m "added RollApp" git push -u origin main 这里需要登陆github并输入密码。然而密码处必须填写你自己设置的[access token](https://www.jianshu.com/p/5e15eb39ab31)。 10. 向 [https://github.com/dymensionxyz/chain-registry](https://github.com/dymensionxyz/chain-registry) 提交pull request。 打开你自己的仓库 https://github.com/<你的github用户名>/chain-registry 点击contribute按钮下的Open pull request，提交PR。 更多信息可以自行谷歌或者百度 **由于官方需要看我们rollapp的活动，我们需要在没有前端的情况下向rollapp存入DYM并转出DYM。这个过程非常繁琐，已经有人找官方反馈了，但是目前暂时还没有变化。** 方法一：可以使用 https://explorer.nodestake.org/wallet/keplr?chain 输入自定义链的config,然后添加自己的链到Keplr钱包中，然后使用钱包进行ibc转账。这里不详细写，可以去avail discord求助。 **方法二:使用命令行** 10. 用新钱包向你的rollapp存入DYM 创建一个新钱包 dymd keys add 钱包名 去Dymension Discord #froopyland-faucet 频道发`$request <dym开头的地址>` 领到水后，在同一频道发 $balance <dym开头的地址> 查询余额 接下来我们进行IBC 转账 首先查询自己rollapp的port和channel roller relayer status 会显示如 Active src, channel-0 <-> channel-8399, dst 这里的channel-8399 是我们转账到dymension hub要用的 **src-channel** 我们可以用自己的rollapp\_sequencer 作为接收地址（`roller keys list` 可以看） 设置好dymension的rpc和chain-id dymd config node https://rpc-dymension-testnet.mzonder.com:443 dymd config chain-id froopyland\_100-1 向你的Rollapp IBC转账（这里转了10个dym）**转账不一定能成功，建议多发送几次交易。** dymd tx ibc-transfer transfer transfer <你的src-channel> <你的rollapp\_sequencer地址，ethm开头> 1000000000000000000udym --from <刚刚设置的钱包名> --fees 20000udym -y 我们可以通过命令查询DYM是否成功到达你的rollapp\_sequencer钱包。 接下来我们需要一个去掉0x的0x地址 这里的钱包地址由这个命令得到 rollapp\_evm debug addr 你刚刚的接收地址 **注：需要Address (hex): 后面的地址** 接下来运行下面的命令查询 WALLET\_ADDRESS=刚得到的去掉0x的钱包地址 CONTRACT\_ADDRESS=0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd curl -s -X POST -H "Content-Type: application/json" \\ --data '{"jsonrpc":"2.0","method":"eth\_call","params":\[{"to": "'$CONTRACT\_ADDRESS'", "data": "0x70a08231000000000000000000000000'$WALLET\_ADDRESS'"},"latest"\],"id":1}' \\ http://127.0.0.1:8545 如果结果**不为** {"jsonrpc":"2.0","id":1,"result":"0x0000000000000000000000000000000000000000000000000000000000000000"} 就说明ibc转账到账了。**到账后才能进行下一步操作**，如果一直不到账，可以考虑**多发几次IBC 交易**。 11. 从你的rollapp中转出dym到dymension hub 将你的rollapp\_sequencer钱包导入rollapp\_evm。 首先需要导出你的`rollapp_sequencer` 私钥（刚刚接收dym的钱包） roller keys export rollapp\_sequencer 接下来将私钥导入到rollapp\_evm 以进行ibc转账 rollapp\_evm keys unsafe-import-eth-key 钱包名 私钥 我们需要将erc20的dym转换为Cosmos coin rollapp\_evm tx erc20 convert-erc20 0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd 10000000000000000000 --from 刚刚导入的钱包名 --chain-id 你的RollappID --gas 10000000 -y **注: roller config show 可以看你的RollappID** 运行以下命令查询转换结果 rollapp\_evm query bank balances <你的rollapp\_sequencer地址，ethm开头> 如果转换成功，能看到类似下面的结果 balances: - amount: "10000000000000000000" denom: ibc/15B5176FE96608C01D36B7B23A990E2AE4E16BAE78EDA4D54B2672B844922823 我们终于可以将rollapp中的dym IBC转账到Dymension Hub了。 首先查询自己rollapp的port和channel roller relayer status 会显示如 Active src, channel-0 <-> channel-8399, dst 其中channel-0 是我们从自己的rollapp转出DYM到Dymension Hub要用的 **src-channel** 我们可以用之前新创建的dym地址当接收地址（随便用一个dym地址也行）。 向Dymension Hub IBC转账（这里转了2个dym） rollapp\_evm tx ibc-transfer transfer transfer <你的src-channel> <你之前创建的dym地址，dym开头> 2000000000000000000ibc/15B5176FE96608C01D36B7B23A990E2AE4E16BAE78EDA4D54B2672B844922823 --from <刚刚设置的钱包名> -y --gas 1000000 --chain-id 你的RollappID 例如下方是我的命令,你需要根据自己的情况修改。 rollapp\_evm tx ibc-transfer transfer transfer channel-0 dym1sfla5j67eyepslh0s6ltr4ype724pk3wrg24ly 2000000000000000000ibc/15B5176FE96608C01D36B7B23A990E2AE4E16BAE78EDA4D54B2672B844922823 --from silent -y --gas 1000000 --chain-id silent\_4544616-1 如果转账成功，你将在之后看到之前的dym钱包余额增加（这里转了2个dym）。**转账不一定能成功，可以多发送几次交易。这里增加的是in Txs Count** 如果成功后(dym接收地址余额增加)，**等待半小时到一小时左右可以打开以下网站(网站更新感觉很慢)** https://fl.dym.fyi/rollapp/<你的RollappID> **注: roller config show 可以看你的RollappID** **打开网站看IBC 30 days activities这栏** **需要In Txs Count 和 Out Txs Count 都大于一，如果你完成了上面的步骤，应该达到了要求。** 12. 验证你的rollapp 去avail discord 中 rollapp-verification 频道开票。 发送自己的**Github PR链接**，和 https://fl.dym.fyi/rollapp/<你的RollappID> 等待管理验证。 之后管理会要求你用hub\_sequencer地址从metamask转指定数量的DYM到他指定的地址。 首先导出hub\_sequencer地址 roller keys export hub\_sequencer 然后导入到小狐狸里。小狐狸里需要根据下面配置添加并切换至DYM网络 Network name: Dymension Froopyland testnet RPC: https://froopyland-json.rpc.silknodes.io/ Chain-id: 100 Symbol: DYM Explorer URL: https://fl.dym.fy 之后，用你刚刚导入的hub\_sequencer钱包给**官方指定的地址发指定数额的DYM**。 **之后将这笔交易的区块浏览器链接发给管理**,等待管理验证。 如果验证通过后，PR 将会被Merge(**需要等待较长时间，可能一两天？**)。 之后，你的rollapp会显示在 [https://portal.dymension.xyz/](https://portal.dymension.xyz/) 同时能看到Avail的Logo。 Leaderboard 网站也能看到你的rollapp。 [https://leaderboard.availproject.org/](https://leaderboard.availproject.org/) 至此Rollapp的运行和注册便完成了。我们只需要保持**稳定运行**即可。 你可以在上面开发Dapp, 吸引用户来交互，增加自己rollapp的TVL，也许能获得更多奖励。 **如果有新的变化，本教程还会持续更新。** **欢迎关注我的推特** [https://twitter.com/EthExploring](https://twitter.com/EthExploring)

---

*Originally published on [Silent ⚛| validator](https://paragraph.com/@exploring/avail-da-dymension-rollapps)*
