2022.04.08

Ethereum – Polygon ブリッジでETH 移転

こんにちは。次世代システム研究室のT.M です。

はじめに

NFT などのブロックチェーンサービスにおいて、Ethereum の代わりにPolygon で実行しているサービスが増えてきました。これは、Polygon はEthereum と互換性がありながら、手数料が低いという特徴があるためです。Polygon の利用例は今後も増えていくと考えられ、Ethereum とPolygon という異なるブロックチェーン間でやりとりをするブリッジが重要となってきています。本稿ではETH とPolygon のブリッジを利用する方法について説明します。

ブリッジとは

Ethereum にあるETH やERC20 などのトークンをPolygon に移転、また、その反対方向への移転させるシステムをブリッジと呼びます。Ethereum にあるトークンを凍結させ、Polygon で同数だけ発行することで実現させています。

Polygon にはPlasma とPoS の2種類のブリッジがあります。Plasma はETH、 ERC20、ERC721 しかブリッジすることができませんが、PoS はERC1155 などのそれ以外にもブリッジすることができます。Ethereum でトークンを預けるのに必要な時間は、Plasma、PoS で変わりませんが、Ethereum にトークンを引き出すのに必要な時間は、PoS の方がPlasma より長くなります。

ブリッジ

Ethereum のETH をPolygon のERC20 トークンであるWETH にブリッジします。今回は、Ethereum のテストネットであるgoerli 、Polygon のテストネットであるmumbai を利用します。また、ブリッジとして、公式で勧められているPoS ブリッジを利用します。

デポジット

ETH をPolygon のWETH に変換をするデポジットの方法について説明します。

Wallet

PolygonWallet を利用する方法を説明します。

https://wallet-dev.polygon.technology/にログインします。


ETH をDeposit します。


https://goerli.etherscan.io/tx/0x4851ffb4d4b9dcb1e1e5b7e0aa3fb9d18bf563c52eb44d6e64182f62321cd36のトランザクションが実行されます。

数分経つと、Polygon でWETH を受け取ることができます。

コード

以下のコードでETH をPolygon のWETH に移転することができます。
import Matic from '@maticnetwork/maticjs'
import MaticWeb3 from '@maticnetwork/maticjs-web3'
import HDWalletProvider from "@truffle/hdwallet-provider"

const mnemonic = '**** **** ****';

// install web3 plugin
Matic.use(MaticWeb3.Web3ClientPlugin)

const posClient = new Matic.POSClient();

await posClient.init({
    network: 'testnet',  // 'testnet' or 'mainnet'
    version: 'mumbai', // 'mumbai' or 'v1'
    parent: {
      provider: new HDWalletProvider(mnemonic, 'https://goerli.infura.io/v3/*****'),
      defaultConfig: {
            from: '0xE87aC96D48498302F5f46C069D9ce509FA3BAC46'
      }
    },
    child: {
      provider: new HDWalletProvider(mnemonic, 'https://polygon-mumbai.infura.io/v3/*****'),
      defaultConfig: {
            from: '0xE87aC96D48498302F5f46C069D9ce509FA3BAC46'
      }
    }
});

const result = await posClient.depositEther('0.00001', '0xE87aC96D48498302F5f46C069D9ce509FA3BAC46');
const txHash = await result.getTransactionHash();
const txReceipt = await result.getReceipt();
console.log(txReceipt);
PolygonWallet で発行したトランザクションと同じトランザクションが発行され、Polygon でWETH を受け取ることができます。

ウィズドロー

WETH をBurn して、ロックされていたETH を戻す方法について説明します。

Wallet

Withdraw を行い、ETH を取り出します。


Withdraw のトランザクションを実行するためには手数料としてMATIC が必要であり、また、ロックされていたETH を解放するために手数料としてETH も必要です。

コード

WETH をBurn します。WETH のアドレスでerc20ChildToken を作成します。
const erc20ChildToken = posClient.erc20('0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa');
const result = await erc20ChildToken.withdrawStart(0.000000004);
const txHash = await result.getTransactionHash();
const txReceipt = await result.getReceipt();
console.log(txReceipt);
ETH を受け取ります。ETH の場合、第一引数をnull でerc20ParentToken を作成します。また、withdrawExit では、Burn をしたトランザクションハッシュを引数として渡します。
const erc20ParentToken = posClient.erc20(null, true);
const result = await ercParent20Token.withdrawExit(${BurningTxHash});
const txHash = await result.getTransactionHash();
const txReceipt = await result.getReceipt();
console.log(txReceipt);

まとめ

Ethereum とPolygon のブリッジを利用することで、ETH とWETH を交換しました。Wallet を利用した方法、コードでの実装方法を説明しました。ETH だけではなく、ERC20 やERC721 もブリッジで交換することができるので、次回試したいと考えています。

次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。

皆さんのご応募をお待ちしています。

Pocket

関連記事