# 空投科学家 - ETH 跨链

By [June](https://paragraph.com/@june023) · 2022-06-27

---

奥德赛第一周的任务是将ETH资产从其他链转移到 Arbitrum one 上面。因为hop 有官方的[SDK](https://docs.hop.exchange/js-sdk/getting-started)，我们这次就用hop。因为官方文档都用的javascript，本着不再造轮子的想法，本文使用javascript。这里是[github链接](https://github.com/June911/SwapAndCrossChain)，自取。

1.  从交易所提USDC到polygon
    
    1.  成本：1u
        
    2.  教程可以看[这里](https://mirror.xyz/dashboard/edit/95W6kVB2bYmfsxusay13Jah_HNP6nBFZc5PnhKCGSRg)
        
2.  把USDC交易成ETH
    
    1.  1inch 是流动性聚集器，比较便宜
        
    2.  成本+滑点：2u
        
3.  通过HOP，从polygon转ETH到arbitrum
    

1inch 交易
--------

1inch是一个dex聚合器。简单来说，它把很多去中心化交易所的流动性聚集起来了，提供给交易者最优的交易路径。

我们先体验一下这个产品的使用流程。打开1inch[网站](https://app.1inch.io/)，发现交易有3步：

1.  连接钱包
    
2.  批准使用代币
    
3.  发送交易
    

因此写代码也是这3步。

*   首先是一些固定的信息。
    
    *   `swapParams` 是配置交易参数。[这里](https://docs.1inch.io/docs/aggregation-protocol/api/swap-params)讲的很详细了，我就不再赘述。强调一点，`amount`的值是由代币最小单位决定的。
        
        *   `1.00 DAI` set as `1000000000000000000`
            
        *   `51.03 USDC` set as `51030000`
            
    *   因为我们从交易所取的是USDC，而Arbitrum跨链需要ETH。所以我们要做的交易就是把USDC换成WETH。也就是，`fromTokenAddress` = USDC，`toTokenAddress` = WETH。
        
        *   只有以太坊上，才有真正的ETH，其他的都是WETH或者其他质押铸造出来的ETH。
            
    *   `walletAddress`是我们polygon发出交易的地址，也就是我们的钱包地址。
        

![初始化固定信息 ](https://storage.googleapis.com/papyrus_images/375759608691f56e1ffc02f8bbf7dab7ce9aef5ce8a02945e371948f5888ed83.png)

初始化固定信息

*   通过调用1inch的API，我们可以知道我们要交易的代币是否允许使用。 如果没有代币没有批准使用的话，我们就先批准使用。
    

![批准交易](https://storage.googleapis.com/papyrus_images/c6d6e1cb84d087d76ffde206ff19b8cb979552633c02b141372e943d7a838c79.png)

批准交易

*   成功获得批准后，就可以交易了。
    

![交易](https://storage.googleapis.com/papyrus_images/c6d6e1cb84d087d76ffde206ff19b8cb979552633c02b141372e943d7a838c79.png)

交易

其中，代码调用了 `buildTxForSwap` 和 `signAndSendTransaction` 两个函数，都是[官方](https://docs.1inch.io/docs/aggregation-protocol/guide/quick-start)提供的，作用就是调用1inch的api，私钥签名，发送交易信息。

* * *

如果代币需要批准，会有一个批准交易哈希，去[polygonscan](https://polygonscan.com/)上就可以看到具体的内容。下图可以看到，批准USDC的交易成功了。

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

而交易成功后也会返还一个哈希值。可以去看看交易哈希，看到status = success，就说明成功了。这个时候去看看钱包的余额，算算价格，应该就没啥大问题了。

HOP 跨链
------

我们在1inch上把USDC换成WETH后，下一步就是通过跨链协议把WETH从Polygon转到Arbitrum。核心思路也是3步

1.  连接钱包
    
2.  批准使用代币
    
3.  发送交易
    

其他的和上面的都差不多。整个项目的代码在[这儿](https://github.com/June911/SwapAndCrossChain)。我就不细讲了。值得注意的是，如果直接用[官方doc给的代码](https://docs.hop.exchange/js-sdk/getting-started)，会出现 `Transaction underpriced` 的错误。原因是我们的gas price给低了，因此需要人为的设置GAS price。

![跨链交易](https://storage.googleapis.com/papyrus_images/f360ea8e9e342a2d4f551d3fa32eb85378c9fa654856d3e85ec71eca11d52b2a.png)

跨链交易

我也遇到了下面这个错误。意思就是Arbitrum上的代币不够了。hop现在每4个小时加一次流动性，所以等等就好了。

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

有时候交易会被拒绝，重新试一次就好了。

我的eth 过了一个小时还没收到。。还在pending中。大家交易成功后，可以去这个[网站](https://explorer.hop.exchange/)查看hop的跨链信息。

一切顺利的话，大家就可以在[galaxy](https://galaxy.eco/arbitrum/campaign/GCCNzUtQiW)领取第一周的OTA了。我的OTA已经available了😊，你们的呢？

* * *

项目代码
----

[https://github.com/June911/SwapAndCrossChain](https://github.com/June911/SwapAndCrossChain)

参考链接
----

[https://docs.1inch.io/docs/aggregation-protocol/guide/quick-start](https://docs.1inch.io/docs/aggregation-protocol/guide/quick-start)

[https://docs.hop.exchange/](https://docs.hop.exchange/)

* * *

如果不会javascript，可以学习一下，我也是1个月前学的。推荐下面两个链接，加油！

[https://www.jiyik.com/w/javascript/javascript-intro](https://www.jiyik.com/w/javascript/javascript-intro)

[https://www.w3schools.com/js/default.asp](https://www.w3schools.com/js/default.asp)

下面是一些个人链接，欢迎大家关注。

[https://twitter.com/june023\_eth](https://twitter.com/june023_eth)

[https://github.com/June911](https://github.com/June911)

---

*Originally published on [June](https://paragraph.com/@june023/eth)*
