雖然這篇yarn介紹鄉民發文沒有被收入到精華區:在yarn介紹這個話題中,我們另外找到其它相關的精選爆讚文章
在 yarn介紹產品中有11篇Facebook貼文,粉絲數超過7萬的網紅Eric's English Lounge,也在其Facebook貼文中提到, 英文發音學習資源! 英文片語和完整句子的發音要如何搜尋? 同學有看到Chen Lily老師的IG貼文嗎? https://www.instagram.com/p/CQn3pmxsKaZ/ ★★★★★★★★★★★★ 今天Lily老師來介紹四大語音辭典! 📣 YARN: https:/...
同時也有3部Youtube影片,追蹤數超過2,810的網紅蔓蔓?蔓時尚 Slow Vashion,也在其Youtube影片中提到,「你有跟上今年Pantone代表色嗎?👾」 不知道大家有沒有發現,一到了某個季度,街上全部都是同一色系的衣服。但有多少人知道,這些五顏六色的衣服,是怎麼變五顏六色的? 快時尚帶來的污染是我們無法想像的,尤其是其中染整加工部分,是造成嚴重水污染的原因。大家快跟影片中精神分裂的蔓蔓一起來看,到底我們愛的...
「yarn介紹」的推薦目錄
- 關於yarn介紹 在 Debby_黛比 Instagram 的最佳解答
- 關於yarn介紹 在 Eric's English Lounge Facebook 的精選貼文
- 關於yarn介紹 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於yarn介紹 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於yarn介紹 在 蔓蔓?蔓時尚 Slow Vashion Youtube 的最佳解答
- 關於yarn介紹 在 Ching Lee's Art 畫畫、手繪、DIY手作、教學日常 Youtube 的最佳解答
- 關於yarn介紹 在 Ching Lee's Art 畫畫、手繪、DIY手作、教學日常 Youtube 的最讚貼文
yarn介紹 在 Debby_黛比 Instagram 的最佳解答
2021-07-20 06:35:38
我一直以為這套已經介紹過了😳 這套是我覺得非常有誠意的硬頁認知書 每一本有著如同『百科全書』般的厚度、紮實的內頁、圓弧形狀的形狀裁切 可以放心讓孩子盡情翻閱 很適合與1-4歲孩子進行親子共讀的書籍 這套『xx BLOCK』系列 截至目前又再推數字、恐龍、城市、建築工程、與農場等共六大主題。...
-
yarn介紹 在 蔓蔓?蔓時尚 Slow Vashion Youtube 的最佳解答
2020-10-10 20:30:01「你有跟上今年Pantone代表色嗎?👾」
不知道大家有沒有發現,一到了某個季度,街上全部都是同一色系的衣服。但有多少人知道,這些五顏六色的衣服,是怎麼變五顏六色的?
快時尚帶來的污染是我們無法想像的,尤其是其中染整加工部分,是造成嚴重水污染的原因。大家快跟影片中精神分裂的蔓蔓一起來看,到底我們愛的鮮豔顏色是怎麼來的~!💨
||||||||||||||||||||🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢
任意門🚪
0:00 不時尚的蔓蔓 vs. 時尚的快快
2:59 衣服的顏色是從哪來的?
3:34 人工合成與天然染料【知染生活】
🦾改善現況的方法
4:57 ❶ 製程減廢、使用環保染料【瑋璿】
5:27 ❷ 無水染色:超臨界流體染色技術【Nike、遠東新】
6:11 ❸ 「前染」技術:原抽色紗【三洋紡織】
6:54 ❹ 最簡單的方法:不要染色【FC無染棉、冶綠、 veg. & Things、大愛感恩科技】
8:39 ❺ 有機彩棉【ecoolla】
9:17 如何識別致力於減廢的大品牌?【bluesign®】
||||||||||||||||||||🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢
[1] 運動風、快時尚來襲!淺談台灣紡織產業今昔
https://dahetalk.com/2016/12/23/運動風、快時尚來襲!淺談台灣紡織產業今昔|大/
[2] 華麗櫥窗背後的醜陋真相:你不可不知的「時尚污染」
https://www.thenewslens.com/article/73104
[3] 染整廠偷排廢水 桃市環保局當場告發
https://news.pts.org.tw/article/432542
[4] 14萬噸重金屬污泥棄置大安溪 廢清大廠狠賺黑心錢6億
https://news.ltn.com.tw/news/life/breakingnews/3133351
[5] 鏡週刊 新聞內幕》染整廠工人過勞失智 揭台灣惡劣勞動環境
https://www.youtube.com/watch?v=d7FAqyh-MW4
[6] 孟加拉 成衣染整廠的惡劣環境
https://www.youtube.com/watch?v=fTTwNP8ATjk
[7] 3.8 Photosynthesis (Core)Rosamund Craig
https://slideplayer.com/slide/8764572/
[8] Dye WRITTEN BY Edward Noah Abrahart Dyes and Their Intermediates.
https://www.britannica.com/technology/dye/Dyeing-techniques
[9] 知染生活 https://www.facebook.com/知染生活-937465866338435/photos/pcb.3214689055282760/3214688761949456
[10] 行政院 行業製程減廢及污染防治技術-印染整理業介紹
http://ebooks.lib.ntu.edu.tw/1_file/moeaidb/012655/a03g015.pdf
[11] 瑋璿環保紡織助劑
http://www.welsum.com.tw/WELSUM/TA/TA_Products_100_Certified_Product.html#bluesign
[12] 天下雜誌629期
[13] 科學月刊第606期
[14] Nike eliminates water at new Taiwanese dyeing plant
https://www.chemistryworld.com/news/nike-eliminates-water-at-new-taiwanese-dyeing-plant/6867.article
[15] 色紗、後染或原抽色紗布?
https://www.eysan.com.tw/zh-hant/yarn-piece-or-solution-dyed-fabric/
[16] 環保新星就靠「他」 紡織業新藍海
https://news.tvbs.com.tw/world/791012
[17] 寶特瓶回收製衣,台灣第一家環保公益企業
https://www.managertoday.com.tw/articles/view/2684
[18] FC無染棉
https://shopee.tw/kelly1867
[19] Naturally Colored Cotton Could Regain Popularity as Companies Seek More Sustainable Solutions
https://sourcingjournal.com/topics/raw-materials/naturally-colored-cotton-regain-popularity-companies-seek-sustainable-solutions-td-72616/
[20] ecoolla
https://www.ecoolla.com/products/prod01000001
[21] bluesign® RSL (限制物質清單)
https://www.bluesign.com/_default_upload_bucket/bluesign-reference-list-total_august_2020_new_1.pdf
[22] 查詢品牌是不是bluesign®夥伴
https://www.supplychaindigital.com/procurement/nike-accelerates-sustainability-partnering-bluesign
||||||||||||||||||||🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢🁢
📷Instagram: @slow_vashion
🔗https://www.instagram.com/slow_vashion/
👩🏻Facebook: 蔓時尚 Slow Vashion
🔗https://www.facebook.com/slow.vashion/ -
yarn介紹 在 Ching Lee's Art 畫畫、手繪、DIY手作、教學日常 Youtube 的最佳解答
2017-12-05 14:03:11零難度 教學 | 萌萌 | 雪人 | 聖誕樹 | 聖誕 小卡片 | 吳竹水彩筆 | 開心Share | 文具 筆 | 親子遊戲 | 聖誕必備 | 簡筆畫 | 易學 | Ching Lee's Art
聖誕節系列:今日和大家 手繪 水彩 聖誕樹 和 雪人 。今次的用具是 吳竹水彩筆 而今天的水彩 聖誕樹 和 雪人 都是 簡筆畫 ,所以都是 零難度 教學 ,是一個聖誕節 必看的分享,簡單又容易,大家也可以用來 DIY 聖誕卡、 做 聖誕禮物,有時候一張心意卡,便能為您們帶來了這溫暖的聖誕節氣氛,很治癒,所以是未到 聖誕節 前的節目之一,畫張手繪 水彩 聖誕樹 雪人,就是這麼簡單,希望大家喜歡今日-手繪 水彩 聖誕樹 雪人 的分享,謝謝!!
==================================================
Ching Lee's 其他繪畫教學影片歡迎前往 :
◆【手帳設計、聖誕卡、水彩筆、自來水筆】❄聖誕節系列❄畫聖誕老人?? 水彩教學Christmas drawing,Santa Claus {Ching Lee's Art}
https://www.youtube.com/watch?v=A4_oX47iKtA&list=PLbwDa6EDx2iFlIURVZyBjsgM9gTEbY_rg&index=6
◆好玩 | 介紹 | 聖誕節 DIY | 手帳 | 文具 | 聖誕禮物 | 治癒 | 吳竹水彩筆Christmas Deep Drawing | 不是 | 開箱 | 水彩花環
https://www.youtube.com/watch?v=wDNpg-GDPJM&index=15&list=PLbwDa6EDx2iFlIURVZyBjsgM9gTEbY_rg
◆聖誕節 | 特色 | 手帳 圖案 | 隨手畫 | 由零開始學 畫畫 | DIY 聖誕卡 | Ching Lee’s Art
https://www.youtube.com/watch?v=MQ9cZ1yL3oY&list=PLbwDa6EDx2iFlIURVZyBjsgM9gTEbY_rg&index=24
++++++++++++++++++++++++++++++++++++++++++++++++++++
想睇多d有關我既繪畫教學及繪畫過程分享,可以去以下地方搵倒我喇~~
我的FACEBOOK連結
http://facebook.com/ching.lees
我的Instagram 連結
https://www.instagram.com/chingnet/
我的活動連結
http://hongkongfineart.com
我的YOUTUBE 頻道
https://goo.gl/ebwuWJ
++++++++++++++++++++++++++++++++++++++++++++++++++++
I will share my art tutorial videos and all about art , If you happy to see this ,please share and subscribe,Thank you for your support . =================================================================
這是我的YouTube channel(Ching Lee's Art ), 我將分享我的藝術視頻教程和所有有關藝術的內容,如果你喜歡我的頻道,請分享和訂閱,謝謝您的支持。
影片推薦|Other Related Videos
-DIY聖誕樹和雪人毛線燈/How to make christmas tree & snowman yarn lamp/クリスマス毛糸
https://www.youtube.com/watch?v=k4noIHHktFI
-DIY聖誕節手工薑餅屋/How to make Christmas ginger bread house/クリスマスジンジャーブレ
https://www.youtube.com/watch?v=PFN00PJatpA
--聖誕禮物手作-新手簡單毛帽DIY Christmas loom knit hat tutorial│碰果 手作
https://www.youtube.com/watch?v=VR0wOzHPY6A
◆Keyword
雪人,萌萌,好玩 ,介紹,聖誕節 DIY ,手帳,文具,治癒,吳竹水彩筆,聖誕樹,開箱 超容易,聖誕鹿,聖誕節系列,親子 挑戰,聖誕 手繪,必試, 聖誕節 ,超可愛,DIY 聖誕卡,聖誕禮物,Christmas Wreaths Drawing,Christmas Deep Drawing,如何畫,吳竹水彩筆,Drawing for kids,墨水,畫畫, visualart ,畫畫教學,手帳,手作生日禮物, 手作禮物, 手作卡片, 手作diy,畫, 教學, DIY,卡, 繪畫,手作 ,手繪 ,木顏色, Colourpencil,水筆 ,色鉛筆,手帳,手帳 , PENTEL, 水果, 課外活動, 香港, watercolour, painting tools, 創作, drawing for kids, drawing, SOFT PASTEL, 文具, 卡片, 手工, 熱縮片, 塗鴉, 勞作, 丙烯, 滴膠, 水晶膠, 禮物, 生日禮物, 自己做, 墨水,水彩筆,自來水筆,畫筆,人物素描,塑膠彩, doodle, doodle date,how to draw, 美術, Oil pastel, illustrator,水彩,插畫, Quick sketch,速寫, 親子,cute drawing , zentangle art ,禪繞畫, 描き方, 画画,速寫, GALAXY,星系,風景, Zentangle, colored pencils tutorial -
yarn介紹 在 Ching Lee's Art 畫畫、手繪、DIY手作、教學日常 Youtube 的最讚貼文
2017-11-25 09:00:01手繪 水彩 聖誕樹 | 聖誕節系列 | 有這麼簡單嗎 | 聖誕卡DIY | 3分鐘學會 【クリスマスツリー】水彩色鉛筆で描いてみた
|Ching Lee's Art
聖誕節系列:今日和大家 手繪 水彩 聖誕樹。又是一個聖誕節 必看的分享,又簡單又容易,大家也可以開始DIY 聖誕卡、 做 聖誕禮物,有時候一張心意卡,便能為您們帶來了這溫暖的聖誕節氣氛,很治癒,所以是未到 聖誕節 前的節目之一,畫張手繪 水彩 聖誕樹,就是這麼簡單,希望大家喜歡今日-手繪 水彩 聖誕樹的分享,謝謝!!
==================================================
Ching Lee's 其他繪畫教學影片歡迎前往 :
◆繪畫教學~ 粉彩如何畫公雞? How to draw a cock / rooster (Ching Lee's Art)
https://www.youtube.com/watch?v=i85_3M3Butw&list=PLbwDa6EDx2iG-1DEzHM7A4FQcUFaHKkhU&index=7
◆畫畫教學,ACRYLIC,塑膠彩,手繪長頸鹿,簡易畫花,How to draw giraffe(Ching Lee Art's)
https://www.youtube.com/watch?v=zWHjj4ycZXc&index=15&list=PLbwDa6EDx2iGjRCp2FLn_1wcTtnl1E_vm
◆如何畫木顏色/色鉛筆畫香港人美食:叉燒飯? how to draw barbecued pork rice with color pencil
https://www.youtube.com/watch?v=iL5UTlFKKkg&list=PLbwDa6EDx2iENxeEzOWAJY92iFP8TKzny&index=3
++++++++++++++++++++++++++++++++++++++++++++++++++++
想睇多d有關我既繪畫教學及繪畫過程分享,可以去以下地方搵倒我喇~~
我的FACEBOOK連結
http://facebook.com/ching.lees
我的Instagram 連結
https://www.instagram.com/chingnet/
我的活動連結
http://hongkongfineart.com
我的YOUTUBE 頻道
https://goo.gl/ebwuWJ
++++++++++++++++++++++++++++++++++++++++++++++++++++
I will share my art tutorial videos and all about art , If you happy to see this ,please share and subscribe,Thank you for your support . =================================================================
這是我的YouTube channel(Ching Lee's Art ), 我將分享我的藝術視頻教程和所有有關藝術的內容,如果你喜歡我的頻道,請分享和訂閱,謝謝您的支持。
影片推薦|Other Related Videos
-DIY聖誕樹和雪人毛線燈/How to make christmas tree & snowman yarn lamp/クリスマス毛糸
https://www.youtube.com/watch?v=k4noIHHktFI
-DIY聖誕節手工薑餅屋/How to make Christmas ginger bread house/クリスマスジンジャーブレ
https://www.youtube.com/watch?v=PFN00PJatpA
--聖誕禮物手作-新手簡單毛帽DIY Christmas loom knit hat tutorial│碰果 手作
https://www.youtube.com/watch?v=VR0wOzHPY6A
◆Keyword
好玩 ,介紹,聖誕節 DIY ,手帳,文具,治癒,吳竹水彩筆,聖誕樹,開箱 超容易,聖誕鹿,聖誕節系列,親子 挑戰,聖誕 手繪,必試, 聖誕節 ,超可愛,DIY 聖誕卡,聖誕禮物,Christmas Wreaths Drawing,Christmas Deep Drawing,如何畫,Drawing for kids,墨水,畫畫, visualart ,畫畫教學,手帳,手作生日禮物, 手作禮物, 手作卡片, 手作diy,畫, 教學, DIY,卡, 繪畫,手作 ,手繪 ,木顏色, Colourpencil,水筆 ,色鉛筆,手帳,手帳 , PENTEL, 水果, 課外活動, 香港, watercolour, painting tools, 創作, drawing for kids, drawing, SOFT PASTEL, 文具, 卡片, 手工, 熱縮片, 塗鴉, 勞作, 丙烯, 滴膠, 水晶膠, 禮物, 生日禮物, 自己做, 墨水,水彩筆,自來水筆,畫筆,人物素描,塑膠彩, doodle, doodle date,how to draw, 美術, Oil pastel, illustrator,水彩,插畫, Quick sketch,速寫, 親子,cute drawing , zentangle art ,禪繞畫, 描き方, 画画,速寫, GALAXY,星系,風景, Zentangle, colored pencils tutorial, painti
yarn介紹 在 Eric's English Lounge Facebook 的精選貼文
英文發音學習資源!
英文片語和完整句子的發音要如何搜尋?
同學有看到Chen Lily老師的IG貼文嗎?
https://www.instagram.com/p/CQn3pmxsKaZ/
★★★★★★★★★★★★
今天Lily老師來介紹四大語音辭典!
📣 YARN: https://getyarn.io/
可以直接以句子來搜尋,非常直觀
只要輸入句子,就可以找到一堆同一句話的短片
只是每個段落都只有 2-3 秒,沒有辦法看到前後文
另外就是要手動點每個影片,小小缺點,瑕不掩瑜啦
📣 Playphrase: https://www.playphrase.me/
跟YARN很像,不過更加「學習」導向
可以搜尋常用句子,它會自己輪播
不用一個個去點,非常具有洗腦功能
另外還可以儲存句子,檢索觀看歷史
不過每天有觀看上限喔!😢
想無上限看可以加入每月3美金的Patreon
📣 YouGlish: https://youglish.com/
應該很多人知道的網站,可以直接搜尋句子或單字
影片來源都是YouTube CC字幕
所以很多都是學術演講或者政府發布會....
純聽發音不錯,但內容就是無聊,哈
我的IG在這裡取材的話,都要看100則以上
才會找到有趣又前後文比較清楚的影片 =_=
只能說適合聽發音,不適合聽內容,呵呵
📣 YouTube: https://www.youtube.com/
近期取材大宗還是直接看 YouTube
其實很多用法都是談話型、生活型影片裡就有
我只是會特別去注意而已👀
需要各種英文流行片語的同學,快追蹤Lily老師的臉書和IG!
FB: https://www.facebook.com/chennlilyy
IG: https://www.instagram.com/chennlilyy/
★★★★★★★★★★★★
One more!
📣 eJOY https://ejoy-english.com/go
eJOY跟 Youglish有點像,但更強的是只要裝了google chrome extension後還能充當線上辭典&翻譯機(還支持不同語言),但無法像Youglish用美/英/澳腔來分(但能分主題) 。
📣 英文發音學習資源: http://bit.ly/2JM05UY
📣 聽力和口說資源: http://bit.ly/2LQDxo9
yarn介紹 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] Optimistic Rollup 就這樣用(2)
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC721 的儲值、轉移與提領
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 的 ERC721 範例,程式碼在這裡。
本演示大量參考了以下範例:Optimistic Rollup Example: ERC20。
本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
環境設置
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 尚未啟動完成,再等待一段時間即可。
ERC721 合約部署
Optimism 啟動成功並且完成整合測試後,接下來進行 ERC721 合約的部署。筆者已將合約及部署腳本放在 optimistic-rollup-example-erc721 這個專案中:
$ git clone git@github.com:ethereum-optimism/optimistic-rollup-example-erc721.git$ cd optimistic-rollup-example-erc721$ yarn install$ yarn compile
接下來我們需要部署以下合約:
ERC721,部署於 L1
L2DepositedEERC721,部署於 L2
OVM_L1ERC721Gateway,部署於 L1
OVM_L1ERC721Gateway 只部署在 L1 上,顧名思義它就是 L1 <=> L2 的「門戶」,提供 Deposit / Withdraw 兩個基本功能,使用者必須透過這個合約來進出 L2。
雖然 OVM_L1ERC20Gateway 是 Optimistic Rollup 官方提供的合約。但是開發者也可以依需求自行設計自己的「門戶」。
OVM_L1ERC20Gateway 目前沒有 Optimism 的官方實作,本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
接下來,我們直接用腳本進行部署:
$ node ./deploy.jsDeploying L1 ERC721...L1 ERC2721 Contract Address: 0xFD471836031dc5108809D173A067e8486B9047A3Deploying L2 ERC721...L2 ERC721 Contract Address: 0x09635F643e140090A9A8Dcd712eD6285858ceBefDeploying L1 ERC721 Gateway...L1 ERC721 Gateway Contract Address: 0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547ccInitializing L2 ERC721...
ERC721 鑄造、儲值、轉移與提領
鑄造(L1)
初始狀態如下,所有帳戶皆尚未持有任何代幣:
接下來,我們將鑄造 2 個代幣以進行接下來的演示。首先,進入 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]
取得 ERC721 及 OVM_L1ERC721Gateway 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat ETH Console
> let ERC721_abi = await artifacts.readArtifact("ExampleToken").then(c => c.abi)
> let ERC721 = new ethers.Contract("0xFD471836031dc5108809D173A067e8486B9047A3", ERC721_abi)
> let Gateway_abi = await artifacts.readArtifact("OVM_L1ERC721Gateway").then(c => c.abi)
> let Gateway = new ethers.Contract("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", Gateway_abi)
鑄造兩個 ERC721 代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).mintToken(deployer.address, "foo")
{ hash: "...", ...}
> await ERC721.connect(deployer).mintToken(deployer.address, "bar")
{ hash: "...", ...}
只有合約的 Owner(deployer) 可以進行鑄造的操作。
確認 Deployer 餘額:
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x02', _isBigNumber: true } // 2
確認代幣的 TokenID 與 Owner:
> await ERC721.connect(deployer).ownerOf(1)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
> await ERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
儲值(L1 => L2)
完成以上步驟後,目前的狀態如下:
接下來,授權 OVM_L1ERC721Gateway使用 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).approve("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", 2)
{ hash: "...", ...}
在 OVM_L1ERC721Gateway 合約呼叫 Deposit,儲值 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await Gateway.connect(deployer).deposit(2)
{ hash: "...", ...}
我們可以到 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]
取得 L2DepositedERC721 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat Optimism Console
> let L2ERC721_abi = await artifacts.readArtifact("OVM_L2DepositedERC721").then(c => c.abi)
> let L2DepositedERC721 = new ethers.Contract("0x09635F643e140090A9A8Dcd712eD6285858ceBef", L2ERC721_abi)
確認入金是否成功:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
ERC721 轉移(L2 <=> L2)
完成以上步驟後,目前的狀態如下:
接下來,我們在 L2 從 Deployer 轉移代幣給 User:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true } // 0
> await L2DepositedERC721.connect(deployer).transferFrom(depoyer.address, user.address, 2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
ERC721 提領(L2 => L1)
完成以上步驟後,目前的狀態如下:
接下來,我們用 User 帳戶提領資金,在 L2DepositedERC721 合約呼叫 Withdraw:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).withdraw(2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true }
最後,檢查在 L1 是否提領成功:
// In Hardhat ETH Console
> await ERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
由於挑戰期為 0 秒,因此提領幾乎無需等待時間,頂多只需數秒鐘
做完上述所有操作,最終狀態應該如下:
總結
本文演示了:
Optimistic Rollup 相關服務的本機部署
ERC721 L1 => L2 的儲值(Deposit)
ERC721 L2 帳戶之間轉移(Transfer)
ERC721 L2 => L1 的提領(Withdraw)
筆者未來將繼續擴充此系列的教學內容,例如支援其他標準的合約如 ERC1155,以及如何運行 Optimistic Rollup 生態系中最重要的驗證者(Verifier),敬請期待。
參考資料
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)
Optimistic Rollup Example: ERC20(Github)
Optimism (Github)
optimism-tutorial (Github)
l1-l2-deposit-withdrawal (Github)
Proof-of-concept ERC721 Bridge Implementation (Github)
Optimistic Rollup 就這樣用(2) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
yarn介紹 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌