使用Avail作为DA部署Dymension RollApps

最新更新

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

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

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

近期Avail 开启了Clash of Nodes激励测试网完成任务有积分。目前有一个Anyone都能参与的任务——使用Avail作为DA部署Dymension RollApps。

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

  1. 使用Avail作为DA层

  2. 可操作和可访问:RollApp 应在可公开访问的环境中主动运行和托管,而不是局限于专用网络。

  3. 功能性:必须不仅仅是一个裸节点;RollApp 应具备操作特性或功能。

  4. 公共界面:提供可公开访问的网页,以便用户与 RollApp 交互,或其使用的详细说明。

  5. 护照验证:管理 RollApp 的团队成员必须在社区内具有“Passport verified”角色。(通过Gitcoin Passport认证)

本教程仅供参考,请以官方教程为准。

部署Rollapp

本教程是新建rollapp,如果你有老的rollapp需要迁移,请根据官方教程。(迁移比新建验证更简单)

硬件要求

  • 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

输出中应该有

💈 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字母以上。

如果成功,会显示如下。

这里我们得到了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

以创建新通道。

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

sudo systemctl restart relayer

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

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

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

建议换一个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的日志。

如果出现

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

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

上面这样是正常的。

监控

请参考官方教程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

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

sudo systemctl restart relayer

可以用这个命令进行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通过后,建议使用门户将代币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_sequencerrollapp_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 部署合约并交互。 也可以用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

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

并点击右上角的fork按钮。

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

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

点击Sync fork,点击Update Branch

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"
}

然后可以通过

这类工具验证你的json格式。

9. 在github添加并提交你的更改。

git add .
git commit -m "added RollApp"
git push -u origin main

这里需要登陆github并输入密码。然而密码处必须填写你自己设置的access token

10. 向

提交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会显示在

同时能看到Avail的Logo。

Leaderboard 网站也能看到你的rollapp。

至此Rollapp的运行和注册便完成了。我们只需要保持稳定运行即可。 你可以在上面开发Dapp, 吸引用户来交互,增加自己rollapp的TVL,也许能获得更多奖励。

如果有新的变化,本教程还会持续更新。

欢迎关注我的推特

Subscribe to Silent ⚛| validator
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.