📜 [專欄新文章] Optimistic Rollup 就這樣用(1)
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC20 的入金、轉帳與出金
TL;DR
本文會跳過 Optimistic Rollup 的介紹而直接實際演示,關於 Optimistic Rollup 的概念與設計原理我將在日後另撰文說明,有興趣的讀者可以先參考下列三篇文章(由淺入深):1. OVM Deep Dive 2. (Almost) Everything you need to know about Optimistic Rollup 3. How does Optimism’s Rollup really work?
本文將演示一個 Optimism Rollup 範例,程式碼在這裡。
本演示大量參考了以下這兩個官方範例:optimism-tutorial、l1-l2-deposit-withdrawal。
環境設置
Git
Node.js
Yarn
Docker
Docker-compose
筆者沒有碰到環境相容問題,但是建議都升到最新版本, Node.js 使用 v16.1.0 或以上版本
Optimism 服務啟動
有關 Optimisim 的所有服務,都包裝在 Optimism 這個超大專案當中了,直接使用原始碼進行組建:
$ git clone git@github.com:ethereum-optimism/optimism.git$ cd optimism$ yarn$ yarn build
組建完成後,就可以在本機啟動服務了:
$ cd ops$ docker-compose build$ docker-compose up
這個指令會啟動數個服務,包括:
L1 Ethereum Node (EVM)
L2 Ethereum Node (OVM)
Batch Submitter
Data Transport Layer
Deployer
Relayer
Verifier
Deployer 服務中的一個參數要特別注意: FRAUD_PROOF_WINDOW_SECONDS,這個就是 Optimistic Rollup 的挑戰期,代表使用者出金(Withdraw)需等候的時長。在本篇演示中預設為 0 秒。
如果有需要重啟,記得把整個 Docker Volume 也清乾淨,例如: docker-compose down -v
Optimism 整合測試
在繼續接下來的演示之前,我們需要先確認 Optimism 是否有順利啟動,特別是 Relayer 是否運作正常,因此我們需要先進行整合測試:
$ cd optimism/integration-tests$ yarn build:integration$ yarn test:integration
確保 L1 <--> L2 Communication 相關測試通過後再繼續執行接下來的演示內容。
啟動服務及部署合約需要花費一些時間,運行一段時間(約 120 秒)之後再執行測試,如果測試結果全部皆為 Fail,可能是 Optimism 尚未啟動完成,再等待一段時間即可。
ERC20 合約部署
Optimism 啟動成功並且完成整合測試後,接下來進行 ERC20 合約的部署。筆者已將合約及部署腳本放在 optimistic-rollup-example-erc20 這個專案中:
$ git clone git@github.com:ethereum-optimism/optimistic-rollup-example-erc20.git$ cd optimistic-rollup-example-erc20$ yarn install$ yarn compile
接下來我們需要部署以下合約:
ERC20,部署於 L1
L2DepositedEERC20,部署於 L2
OVM_L1ERC20Gateway,部署於 L1
其中,ERC20 與 L2DepositedERC20 是由上面的範例專案編譯的,可以直接在範例專案中直接取得 ABI;而 OVM_L1ERC20Gateway 則是由 Optimism 編譯的,屬於 Optimistic Rollup 協定的一部分,無法直接在範例專案中取得 ABI。
因此在部署以上三個合約前,我們需先手動將 OVM_L1ERC20Gateway 編譯後的生成品 (Artifacts)——即 ABI,複製到此專案中:
$ cp -r ~/projects/optimism/packages/contracts/artifacts/contracts/optimistic-ethereum/OVM/bridge/tokens/OVM_L1ERC20Gateway.sol ~/projects/optimistic-rollup-example-erc20/artifacts/contracts/
OVM_L1ERC20Gateway 只部署在 L1 上,顧名思義它就是 L1 <=> L2 的「門戶」,提供 Deposit / Withdraw 兩個基本功能,使用者必須透過這個合約來進出 L2。
雖然 OVM_L1ERC20Gateway 是 Optimistic Rollup 官方提供的合約。但是開發者也可以依需求自行設計自己的「門戶」。
接下來,我們直接用腳本進行部署:
$ node ./deploy.jsDeploying L1 ERC20...Deploying L1 ERC20...L1 ERC20 Contract Address: 0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20fDeploying L2 ERC20...L2 ERC20 Contract Address: 0x67d269191c92Caf3cD7723F116c85e6E9bf55933Deploying L1 ERC20 Gateway...L1 ERC20 Gateway Contract Address: 0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07Initializing L2 ERC20...
ERC20 入金、轉帳與出金
ERC20 入金(L1 => L2)
目前餘額:
在合約部署完成後,Deployer 是目前唯一有資金的帳戶,接下來我們就進行入金(Deposit),將 Deployer 的資金從 L1 搬到 L2。
首先,進入 ETH(L1) 的 Console:
$ npx hardhat console --network ethWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat ETH Console
> let accounts = await ethers.getSigners()> let deployer = accounts[0]> let user = accounts[1]
取得 ERC20 及 OVM_L1ERC20Gateway 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat ETH Console
> let ERC20_abi = await artifacts.readArtifact("ERC20").then(c => c.abi)> let ERC20 = new ethers.Contract("0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20f", ERC20_abi)> let Gateway_abi = await artifacts.readArtifact("OVM_L1ERC20Gateway").then(c => c.abi)> let Gateway = new ethers.Contract("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", Gateway_abi)
先授權 OVM_L1ERC20Gateway 花費 ERC20:
// In Hardhat ETH Console
> await ERC20.connect(deployer).approve("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", 10000)> await ERC20.connect(user).approve("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", 10000)
注意:Deployer 及 User 都需要對 OVM_L1ERC20Gateway 進行授權,否則在接下來的出金步驟時 Relayer 會出錯
接著,在 OVM_L1ERC20Gateway 合約呼叫 Deposit:
// In Hardhat ETH Console
> await Gateway.connect(deployer).deposit(1000)
我們可以到 Optimism (L2) 的 Console 確認入金是否成功:
$ npx hardhat console --network optimismWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat Optimism Console
> let accounts = await ethers.getSigners()> let deployer = accounts[0]> let user = accounts[1]
取得 L2DepositedERC20 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat Optimism Console
> let L2ERC20_abi = await artifacts.readArtifact("L2DepositedERC20").then(c => c.abi)> let L2DepositedERC20 = new ethers.Contract("0x67d269191c92Caf3cD7723F116c85e6E9bf55933", L2ERC20_abi)
確認入金是否成功:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(deployer).balanceOf(deployer.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
ERC20 轉帳(L2 <=> L2)
完成以上步驟後,目前的餘額如下:
接下來,我們在 L2 從 Deployer 轉移一部分資金給 User:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x00', _isBigNumber: true } // 0> await L2DepositedERC20.connect(deployer).transfer(user.address, 1000){ hash: "..." ...}> await L2DepositedERC20.connect(wallet_1).balanceOf(user.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
ERC20 出金(L2 => L1)
完成以上步驟後,目前的餘額如下:
接下來,我們用 User 帳戶提領資金,在 L2DepositedERC20 合約呼叫 Withdraw:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(user).withdraw(1000){ hash: "..." ...}> await L2DepositedERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x00', _isBigNumber: true }
最後,檢查在 L1 是否提領成功:
// In Hardhat ETH Console
> await ERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
由於挑戰期為 0 秒,因此提領幾乎無需等待時間,頂多只需數秒鐘
做完上述所有操作,餘額應該如下:
總結
本文演示了:
Optimistic Rollup 相關服務的本機部署
ERC20 L1 => L2 的入金(Deposit)
ERC20 L2 帳戶之間轉帳(Transfer)
ERC20 L2 => L1 的出金(Withdraw)
筆者未來將繼續擴充此系列的教學內容,例如 ERC721 / ERC1155 的使用方式,敬請期待。
參考資料
OVM Deep Dive
(Almost) Everything you need to know about Optimistic Rollup
How does Optimism’s Rollup really work?
Optimistic Rollup Official Documentation
Ethers Documentation (v5)
Optimism (Github)
optimism-tutorial (Github)
l1-l2-deposit-withdrawal (Github)
Optimistic Rollup 就這樣用(1) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有12部Youtube影片,追蹤數超過1萬的網紅translation,也在其Youtube影片中提到,[BGM] [PC-9801] [OPN] 魔導物語A・R・S [Madou Monogatari: ARS] #コンパイルが発売した、オリジナル版となる98用ダンジョンRPGで、シナリオとしては『魔導物語1-2-3』以来の完全新作となり、1-2-3より過去の話。脚本はうゑみぞ氏が担当。 2や3...
「compile r」的推薦目錄:
- 關於compile r 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於compile r 在 若熙娘娘 DJ Rara Facebook 的最佳貼文
- 關於compile r 在 translation Youtube 的最佳貼文
- 關於compile r 在 電撃オンライン Youtube 的最讚貼文
- 關於compile r 在 prasertcbs Youtube 的最讚貼文
- 關於compile r 在 Could someone explain what "compiling" in R is, and why it ... 的評價
- 關於compile r 在 pksensi/compile.R at master · nanhung/pksensi · GitHub 的評價
- 關於compile r 在 Compile pdf in R Studio fails - TeX - LaTeX Stack Exchange 的評價
- 關於compile r 在 Download, Compile and Link OpenBLAS Library with R 的評價
- 關於compile r 在 CompilerGym: Making compiler optimizations accessible to all 的評價
- 關於compile r 在 Compile R - YouTube 的評價
compile r 在 若熙娘娘 DJ Rara Facebook 的最佳貼文
到時候再來發影片來告訴大家編髮時發生的故事🙈
太美了 這夕陽🌇
還有做了 #henna #hair #compile #sunset #bali #bar #shisha
Line👉🏻 https://line.me/R/ti/p/%40nie8403b
IG👉🏻 https://www.instagram.com/rara0626orose/
compile r 在 translation Youtube 的最佳貼文
[BGM] [PC-9801] [OPN] 魔導物語A・R・S [Madou Monogatari: ARS]
#コンパイルが発売した、オリジナル版となる98用ダンジョンRPGで、シナリオとしては『魔導物語1-2-3』以来の完全新作となり、1-2-3より過去の話。脚本はうゑみぞ氏が担当。
2や3ではまだ謎の多かったルルーとシェゾだが、本作で、ルルーは格闘技の使い手である事が表記、サタンの出会いに関して描かれた。シェゾもなにゆえ闇の魔導師になったかが明かされた。
これは二人の人物像を明確に位置付け、以降のシリーズの方向性やイメージを決定づけた。
BGMはGGアレスタ2(GG/'93年)や、魔導物語II アルル16歳(GG/'90年)等のBA.M氏と、今未PONさんによる共同作曲。
作曲:南智紀氏、大矢知恵(今未PON)さん
Manufacturer: 1993.12.10 Compile
computer: PC-9801 series
Hardware: YM2203
composer: tomonori minami, Chie Ooya
-----------------------------------------------------------------------
00:00 01.オープニング
01:46 02.タイトル
02:21 03.アルル編 プロローグ1 森へのお使い
04:17 04.アルル編 プロローグ2 カーバンクル道場
07:24 05.アルル編 プロローグ3 道に迷う
11:12 06.Fiend Empire
12:29 07.Item
12:32 08.Fanfare
12:40 09.Enemy Encounter
12:45 10.Oncoming Enemy Attack! [Battle]
14:40 11.Win
14:44 12.Special Fanfare
14:50 13.Lose
14:57 14.アルル編 Oddity of Shenanigans
16:50 15.Fun Time at the Shop~!
19:16 16.洞窟
21:22 17.Friendly Entities
22:09 18.アルル編 Deep Forest Corridors
25:35 19.アルル編 Reunited with Family [Ending]
26:10 20.アルル編 Stories of Summer Vacation [Credits]
29:23 21.アルル編 Unknown 1
29:41 22.アルル編 Unknown 2
29:46 23.Low on Magic Power
30:17 24.Seeping Poison
31:34 25.Low on Physical Strength
32:18 26.ルルー編 Awakening into a Mystery [Rulue Intro]
33:53 27.ルルー編 Welcome to the Count's Castle
35:27 28.ルルー編 The Elegant & Graceful Rulue~
37:30 29.ルルー編 Interloping the Castle
39:32 30.ルルー編 Peaceful Inhabitants
41:13 31.ルルー編 Rulue wakes up
41:19 32.ルルー編 Twas but a dream
42:45 33.ルルー編 Total Beatdown of The Count
44:25 34.ルルー/シェゾ編 The Gorgeous Man who Defile the God [Final Battle]
45:30 35.ルルー編 My Heart goes out to you, Satan-sama [Credits]
47:16 36.ルルー編 Unknown 1
48:14 37.シェゾ編 Reluctancy in a Field Trip [Intro]
50:03 38.シェゾ編 Voices from Another World
51:45 39.シェゾ編 Temporal Temple
53:42 40.シェゾ編 Strange Ambience
59:13 41.シェゾ編 Serenic Life Among Many
01:01:01 42.シェゾ編 Fanfare
01:01:07 43.シェゾ編 With this Dark Power...
01:03:45 44.シェゾ編 Sword of Darkness
01:06:34 45.シェゾ編 After School Detention [Ending]
01:09:10 46.シェゾ編 The Beginnings of the Dark Wizard ~Revised~ [Credits]
-----------------------------------------------------------------------
compile r 在 電撃オンライン Youtube 的最讚貼文
※MCの高槻かなこさんはお休みです。
予めご了承ください。
電撃プレイステーション編集部が贈る、最新PSタイトル実況番組「電撃PS Live」がリニューアル!
第5回目の放送では、石田晴香さんをMCに迎え、本日発売された『Conan Outcasts(コナン アウトキャスト)』プレイ!
そして、電撃パワープッシュ!!!!では『勇者ネプテューヌ 世界よ宇宙よ刮目せよ!! アルティメットRPG宣言!!』の情報をお届け!
最後は、EQリーグでも活躍する石田晴香さんと『スーパーボンバーマン R』をプレイしていきます。
■タイムテーブル
19時30分~
オープニング
19時40分頃~
『Conan Outcasts(コナン アウトキャスト)』
20時50分頃~
電撃PS前評判TOP10【2018年8月】
21時00分頃~
電撃パワープッシュ!!!!
『勇者ネプテューヌ 世界よ宇宙よ刮目せよ!! アルティメットRPG宣言!!』
21時30分頃~
『スーパーボンバーマン R』
■放送開始時間
2018年8月23日19時30分開始
■出演 ※敬称略
石田晴香(タレント)
電撃PSスタッフ
■『Conan Outcasts(コナン アウトキャスト)』
https://www.spike-chunsoft.co.jp/conan/top.html
■『勇者ネプテューヌ 世界よ宇宙よ刮目せよ!! アルティメットRPG宣言!!』公式サイト
http://www.compileheart.com/neptune/yu-shanep/
■『スーパーボンバーマン R』公式サイト
https://www.konami.com/games/bomberman/r/jp/ja/
■電撃屋公式サイト
https://dengekiya.com/shop/default.aspx
■チャンネル登録ボタンより登録をお願いします!
https://goo.gl/7nlGR0
※番組の内容は変更される場合があります。
© 2018 and developed by Funcom Oslo A/S (“Funcom”). All rights reserved © 2018 Conan Properties International LLC (“CPI”). CONAN, CONAN THE BARBARIAN, HYBORIA and/or ROBERT E. HOWARD and related logos, characters, names, and distinctive likenesses thereof are trademarks or registered trademarks of CPI and/or Robert E. Howard LLC. All Rights Reserved. Funcom and Funcom Logo ™ & © Funcom Oslo A/S. Licensed to and published in Japan by Spike Chunsoft Co., Ltd. Conan Exiles uses the Unreal® Engine. Unreal® is a trademark or registered trademark of Epic Games, Inc. in the United States of America and elsewhere. Unreal® Engine, Copyright 1998 – 2018, Epic Games, Inc. All rights reserved.
©2018 IDEA FACTORY / COMPILE HEART / Artisan Studios
©Konami Digital Entertainment
compile r 在 prasertcbs Youtube 的最讚貼文
สอนวิธีการเขียนโปรแกรมเบื้องต้น โดยใช้ MinGW g++ compile และ CLion (IDE)
การแสดงผลลัพธ์ออกจากจอภาพ
การใส่ comment ในโค้ด
การบวก ลบ คูณ หาร
การแปลงน้ำหนักจากหน่วยกิโลกรัมเป็นปอนด์
ผู้สนใจสามารถดาวน์โหลด CLion IDE ได้ที่ https://www.jetbrains.com/clion/download/
ดาวน์โหลด MinGW C++ compiler ได้ที่ http://www.mingw.org/
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► https://www.youtube.com/subscription_center?add_user=prasertcbs
playlist สอนภาษา C++ ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEfZwqM2KyCBcPTVsc6cU_i
playlist สอนภาษา C เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GHHgz0S1tSyIl7vkG0y105z
playlist สอนภาษา C# ► https://www.youtube.com/playlist?list=PLoTScYm9O0GE4trr-XPozJRwaY7V9hx8K
playlist สอนภาษา Java ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF26yW0zVc2rzjkygafsILN
playlist สอนภาษา Python ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH4YQs9t4tf2RIYolHt_YwW
playlist สอนภาษาไพธอน Python OOP ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEIZzlTKPUiOqkewkWmwadW
playlist สอน Python 3 GUI ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFB1Y3cCmb9aPD5xRB1T11y
playlist สอนภาษา PHP เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH_6LARFxozL_viEsXV2wgO
playlist สอนภาษา R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVICp
compile r 在 pksensi/compile.R at master · nanhung/pksensi · GitHub 的推薦與評價
Model Compiler. #'. #' The \code{compile_model} is used to compile the model code that is written under C or \pkg{GNU MCSim} format and. ... <看更多>
compile r 在 Compile pdf in R Studio fails - TeX - LaTeX Stack Exchange 的推薦與評價
I am trying to use the "compile pdf" in knitr (R Studio) to compile a basic .rnw file: \documentclass{article} \begin{document} ... ... <看更多>
compile r 在 Could someone explain what "compiling" in R is, and why it ... 的推薦與評價
... <看更多>
相關內容