0%

ZETA测试网交互(踩坑)记录

本文不是指南,只是个人学习记录,仅供参考。

ZETA开发指南:发送和存入代币

首先,我们需要去安装他说的模板,这一步已经难倒了90%的外行人。

安装模板

github模板

image-20231109185209717

外行人:

按照上图操作下载ZIP包,然后解压进入。

内行人:

找个地方(放项目),执行下面命令。

1
git clone https://github.com/zeta-chain/template.git

安装Yarn

关于Node.js的安装,可以查看我的这篇文章Windows安装Node.js

yarn是一个包管理工具,类似于npm,但是比npm更加强大,可以并行下载依赖包。

1
npm install -g yarn

我们在项目文件下启动终端,来执行以下命令:

1
yarn

该命令默认安装依赖模块。(你无需理会专业术语)

image-20231109190023071

更多Yarn相关请查看:Yarn安装与使用详细介绍

创建账号

我们根据github的文档来操作,创建账号使用的命令是:

1
npx hardhat account --save

该操作会生成测试账号,并且将私钥保存在名为.env的文件中。

image-20231109190613723

从上图可以看到,他直接在控制台输出了钱包的私钥地址等信息,建议手动保存一份。

查询余额

我们根据文档来操作,执行下面的命令:

1
npx hardhat balances

这可能有点慢,但是他还给你画了一个表,的确不错。

image-20231109191756846

如果想查询不同的地址,可以使用address命令,操作如下:

1
npx hardhat balances --address ADDRESS

自己把地址替换一下就好了。

image-20231109192504180

领取水龙头

根据文档操作,获取水龙头代币。

1
npx hardhat faucet

我遇到了错误:

image-20231109192929115

暂时还不知道是哪里出问题了,我们尝试其他的命令。

请求将代币发送到不同的链,比如goerli testnet:

1
npx hardhat faucet --chain goerli_testnet

还是遇到了同样的错误,就不截屏了。

以下内容为后续补充:(2023年11月21日)

获取测试网 ZETA(水龙头)

1
2
npm install -g @zetachain/faucet-cli
zetafaucet --drip --address 0x4bB9089ee3B86e97b171838205483362966f9dE8

需要验证Github账号,如何申请之前有写过教程,不再赘述。

发送代币

直接跳过了一些部分,来到了我感兴趣的地方,也是我本次学习的目的。

首先,我用其他账号再Goerli链上给他发送了,0.05GETH 和 2 ZETA。

前者拿来当手续费,后者来测试跨链,想看看是如何操作的,毕竟什么获取水龙头失败了。

所以,ZETA是从uniswap里面兑换的,合约如下:

1
0x0000c304D2934c00Db1d51995b9f6996AffD17c0

我们的测试账号也的确拥有了测试代币。

image-20231109194245649

我们开始下一步,看看文档怎么说,从Goerli转移ZETA到ZetaChain链上,使用下面的代码:

1
npx hardhat send-zeta --amount 1 --network goerli_testnet --destination zeta_testnet

操作截图如下所示:

image-20231109194616955

他一会儿就给出了成功的哈希值,我们去链上看看他做了什么。

image-20231109194735974

然后看看具体使用了什么方法和参数:

方法叫:approve

有两个参数分别是地址、代币数量

image-20231109194921460

如果使用的是etherscan是可以解析数据的,如上图所示,但是我还是不理解这个地址。

然后我又去搜索了一下,发现这是一个合约地址。

image-20231109195138366

最后,我需要去看看,有没有在ZetaChain链收到代币。

我们再次使用查询命令,当然你也可以去ZetaScan上面查询:

https://explorer.zetachain.com/

image-20231109195737780

发送代币2

这次我们从mumbai上面发送到ZetaChain链上。

关于ZETA在不同链的代币合约:ZETA Testnet Token

这次我发送了0.1wMATIC 和 139ZETA到测试用户mumbai链上。

文档说明没有给案例,但是无非是修改一个单词而已,把Goerli改成mumbai,所以命令如下:

1
npx hardhat send-zeta --amount 139 --network mumbai_testnet --destination zeta_testnet

刚开始我遇到了一个错误,如下图所示:

image-20231109202032082

然后我查询了一下余额:

image-20231109202112028

随后有再次尝试,结果成功了。

所以,我现在还不知道为什么会出错,就莫名其妙成功了。

这种行为表现在链上就是:

image-20231109202249717

肯定是Send这一条成功了,最开始调用Approve却是失败了。

最后,我们这次去ZetaScan去查看:

image-20231109202842357

跨链返回

我们尝试将代币从ZETA跨链回来,我们就选择跨会Goerli吧。

1
npx hardhat send-zeta --amount 2 --network zeta_testnet --destination goerli_testnet

其实就是把两个单词的位置调头了而已,如此简洁优雅。

不出意外的话,出意外了。

我不小心复制错了,将Goerli上面最后1个ZETA也跨过去了。

image-20231109205033393

还好问题不大,我们跨回来就是的。

所以,我选择了一次性跨2个ZETA回来,但是结果如下:

image-20231109205223052

这是变成了包裹代币吗???

在官方的文档中,我们找到了这样一句话:

send-zeta将本机 ZETA 发送到 ZetaChain 上的包装 ZETA 合约,批准连接器合约使用包装的 ZETA ,然后最终调用连接器的send方法将包装的 ZETA 发送到连接的链。

ZRC20

你可以理解为ERC20的扩展,将各种链上的主流资产全部当成ZRC20代币,比如GETH、tBNB等。

我们尝试将GETH充值到ZetaChain链上当ZRC20资产:

1
npx hardhat send-zrc20 --amount 0.01 --network goerli_testnet --destination zeta_testnet

无非就是将 send-zeta 换成了 send-zrc20 仅此而已,所以说这语法看着很舒服。

image-20231109211917048

我们成功的发送了0.01GETH到ZetaChain上,但是在这个命令行里面看不到代币。

我们得去ZetaSan浏览器里面看:

image-20231109212028775


虚线部分为补充内容。

过了一段时间,他上面才会显示出代币,例如这样:

image-20231109224657690


我们尝试将代币全部跨回去:

1
npx hardhat send-zrc20 --amount 0.01 --network zeta_testnet --destination goerli_testnet

又调转单词位置,优雅。

同样的,在跨回去的过程中,又遇到问题了。

An unexpected error occurred:

Error: cannot estimate gas; transaction may fail or may require manual gas limit

第二天,我想明白了,这不就是没有GAS费吗?

因为我们需要发送回去,所以在Goerli链上交易的GAS费也要我们承担,也就是说0.01Geth ZRC20代币是不可能全部跨回去的,我开始忘记了这一点。

所以,这次我跨链0.009个回去就成功了。

image-20231111002234230

我就说嘛,输出信息如下:

Transaction hash: 0x52dd9f6ce29a23a6bcc6e9848078a190d51837fd92fd368f689d59f023392570

image-20231111002610006

跨链取回ZRC20代币成功!

全链合约Hello

根据github文档操作,现在创建一个新的全链合约:

创建合约:

1
npx hardhat omnichain MyContract

创建完成后,会多出来一个文件夹和SOL合约文件:

image-20231109210646752

好了,现在我们看具体教程:

First Omnichain Contract

编译合约:

1
npx hardhat compile --force

image-20231109213451216

部署合约:

1
npx hardhat deploy --network zeta_testnet

image-20231109213606171

合约部署成功,显示信息摘录:

Successfully deployed contract on ZetaChain.
Contract address: 0xBbbbc34C0Ee6b48332EBfC6367B8c1d3D8FA17cb
Explorer: https://athens3.explorer.zetachain.com/address/0xBbbbc34C0Ee6b48332EBfC6367B8c1d3D8FA17cb

调试合约:

1
npx hardhat interact --contract 0xBbbbc34C0Ee6b48332EBfC6367B8c1d3D8FA17cb --amount 0.005 --network goerli_testnet

将上面的合同地址替换成你刚才部署的,修改要发送的GETH代币数量,我改成了0.005更具有辨别度。

image-20231109214345621

他显示我是成功了的。

Successfully broadcasted a token transfer transaction on goerli_testnet network.
Transaction hash: 0xb6bdcc893769fa90a1b7d5f481c594b1699e997502f9212569530cae3d416e51

我不确定,所以去浏览器看看。

在Goerli链上确实有这笔操作:

image-20231109214436275

但是ZetaScan上面没有,我又去看了看,这个教程作者的那笔交易。

发现他Goerli上面的时间是:Aug-01-2023 08:56:00 AM +UTC

然后Zeta的确定时间是:August 1st 2023, 4:57:28 PM

相隔接近8个小时,所以现在一时半会看不到估计也是正常的。

全链合约swap

我以为完了,结果才是第一部分。

我们就跳过抵押部分,直接来swap吧。

创建新合约:

1
npx hardhat omnichain Swap

我们将合约修改一下,直接拷贝下面的文件,内容太长请自行访问:

https://github.com/zeta-chain/example-contracts/blob/main/omnichain/swap/contracts/Swap.sol

然后再修改一下 tasks/interact.ts 文件,也去复制。

这一复制过来全红。

我准备删除文件,看到这个你就知道不小心删除文件有多痛苦了。(我忘记了我还有git)

image-20231109225203642

我决定了,重新建合约不再听他鬼话,先不修改部署一下。

把.env文件复制到新项目中去,还是使用刚才的账号哦。

部署合约:

1
npx hardhat deploy --network zeta_testnet

等等还是报错,我找下原因。

image-20231109225913818

他说找不到合约swap这个文件???怎么可能呢?

我想想看,哪里出问题了。

EVM定律:先编译,后运行。

艹,没编译,我看着教程来,估计教程作者忘记写了,这……

image-20231109230319899

果然如此,经验主义害死人。

控制台输出合约相关信息:

Successfully deployed contract on ZetaChain.
Contract address: 0x62D3aFd4E8A7D0b77983a13e11BF7F329730eA34
Explorer: https://athens3.explorer.zetachain.com/address/0x62D3aFd4E8A7D0b77983a13e11BF7F329730eA34

调用合约:

我们来尝试调用他,发送0.01个GETH兑换到MATIC链。

请自行修改相关信息,如合约地址,发送的代币数量,跨链的来源和去处。

1
npx hardhat interact --contract 0x62D3aFd4E8A7D0b77983a13e11BF7F329730eA34 --amount 0.01 --network goerli_testnet --recipient 0x4C521B3b696Dfa7e7c96391d4c820f7A4524A681 --destination mumbai_testnet

奶奶的,该作者又复制错指令了,npx少了一个n,我是说怎么看着奇奇怪怪的。

我上面已经修改好语句了,这不是误人子弟吗?

你可以使用cctx的指令来跟踪你的跨链交易信息:

1
npx hardhat cctx 0xb2f6273f2b7f8c46702e3c13dffc3c597289325621f0183b417f7dc4538d60f0

上面的这个指令都成功了。

image-20231109231727777

我们去链上查询一下:

首先是Goerli链,的确有扣币的交易:

image-20231109231953819

然后,Mumbai上面有收到打过来的币:

image-20231109232027044

从时间上面来看,这笔跨链交易花了6分钟,在10分钟以内还是比较快的。

交易ZETA->MATIC:

我们尝试一下其他的,比如zeta兑换mumbai:

1
npx hardhat interact --contract 0x62D3aFd4E8A7D0b77983a13e11BF7F329730eA34 --amount 1 --network zeta_testnet --recipient 0x4C521B3b696Dfa7e7c96391d4c820f7A4524A681 --destination mumbai_testnet

image-20231109233530732

控制台输出信息如下:

Successfully broadcasted a token transfer transaction on zeta_testnet network.
Transaction hash: 0x7083e512a857726d0b2b33c2a6fe49338cc322c260d9d9134bbcd98e70da7dee

我们跟踪一下:

1
npx hardhat cctx 0x7083e512a857726d0b2b33c2a6fe49338cc322c260d9d9134bbcd98e70da7dee

我看估计得等到明天才有结果。

交易ZETA->BNB:

趁早无聊,干脆尝试一下从ZetaChain到Bsc Testnet,毕竟文档上没有说这个。

而且生成的默认钱包也不显示bsc testnet,但是我还是想试试看。

1
npx hardhat interact --contract 0x62D3aFd4E8A7D0b77983a13e11BF7F329730eA34 --amount 1 --network zeta_testnet --recipient 0x4C521B3b696Dfa7e7c96391d4c820f7A4524A681 --destination bsc_testnet

image-20231110001519906

我又震惊了,成功了???

1
npx hardhat cctx 0x70c5766db9b9c31d7c762c97706b1f259f8bf4fb0f78bcd4f6a426d96a8506d1

还是把跟踪指令也复制一遍,估计又是跨链好长时间的那种。

第二天,还是未跨链成功……

交易MATIC->ZETA

我准备将mumbai上面的MTAIC交换为ZetaChain上面的ZETA,我想试试看这种交易能不能成功。

1
npx hardhat interact --contract 0x62D3aFd4E8A7D0b77983a13e11BF7F329730eA34 --amount 0.01 --network mumbai_testnet --recipient 0x4C521B3b696Dfa7e7c96391d4c820f7A4524A681 --destination zeta_testnet

理论上这个语法是没有毛病可以执行的。

image-20231111003948662

控制台输出信息如下:

Successfully broadcasted a token transfer transaction on mumbai_testnet network.
Transaction hash: ex7e63494da6680882bf7d895ebec2ca00b3da11d4fe238dd24d4ce1887f8aaa97

我们跟踪一下:

1
npx hardhat cctx ex7e63494da6680882bf7d895ebec2ca00b3da11d4fe238dd24d4ce1887f8aaa97

我就不该有期望这能成功的,估计和上面两个一样,这个合约只能跨链交易原生代币。

应该不包括ZETA,这沾边的都在漫长的等待。