Arbitrum Workshop|以太坊公開課

TinTinLand
5 位粉絲
2024年10月18日
☄ 本次課程是由ETHPanda、TinTinLand 聯手 Morph、DoDo和Arbitrum共同推出
💎 免費報名進入共學群:https://wj.qq.com/s2/15088813/6lmz/
📱歡迎添加Adam(ID:WinniWinni1)加入技術社區,瞭解更多課程內容。
Arbitrum Workshop:
00:00 活動開場&流程介紹
04:07 Arbitrum Orbit
12:46 Arbitrum Orbit: Retryable ticket
29:22 Arbitrum Stylus
38:36 Q&A
—————————————————————
🏠 關注渠道
1️⃣ Discord: https://discord.gg/kmPnTDSFu8
2️⃣ Twitter: https://twitter.com/OurTinTinLand
3️⃣ Medium: https://medium.com/@tintin.land2021
4️⃣ Bilibili: https://space.bilibili.com/1152852334
Hello 大家晚上好
歡迎各位準時加入直播間
我是今天的主持人Adam
來自聽聽鏈的社區
聽聽鏈是一個專注於Web3開發者社區的平臺
我們聚焦於推動區塊鏈技術的發展
爲開發者提供前沿的科技資訊
技術課程 研討會
黑客松創業大賽及行業招聘
我們致力於支持Web3開發者的成長
並賦能更多的人加入並參與到Web3的建設中來
歡迎大家加入鏈接全球的愛好者
開發者創業者的聽聽鏈的社區
共同定義並構建未來
那我們本次的邦提挑戰賽
是以太坊公開課的項目實操的比賽
那也是爲了幫助以太坊課程的報名學員
更好的學習課程的內容
並進行項目的應用落地
那我們本次的邦提一共設置了三大賽題
那第一個是Mov賽題
基於Mov去開發一個去中心化酒店預定的APP
那第二個是嘟嘟的公開的拍賣
那第三個也就是Arbitrum
然後每個賽題的會有450美金的獎金池
大家可以自行選擇感興趣的賽題來參與
那根據賽題的具體的題目要求來進行提交
那我們本次的邦提比賽
已經正式的開啓了報名
從9月5號開始
那感興趣的同學可以關注一下
我們重要的時間節點
那第一個就是報名時間
也就是我們的項目的提交的截止時間
是11月1號的24點
那項目提交之後呢
我們也將在11月5號進行demo day
參賽的同學也將對自己提交的項目
進行項目講解和demo的演示
那之後的話獲獎結果
也將在11月7號的課程的
剪影儀式上進行正式的公佈
那爲了幫助大家更好的來參與到我們的邦提
我們連續三天將舉行三場的workshop直播
來爲大家解析邦提比賽的三大賽道
那前兩天也分別是嘟嘟的專場和off專場
那今天的話我們就是
我們今天的第三場的workshop
也就是Abitu專場
那接下來的話我們就介紹一下
我們今天的Abitu workshop直播的活動
好的那首先的話
我們今天的活動主題是
那爲大家來解析到我們Abitu的賽題
那我們也邀請到了Offchain Labs的
集成工程師Jason老師來進行分享
那老師的話也將從以下的幾個方面來
進行給大家來分享直播
那第一個就是我們會簡單介紹一下
Retailable Ticket System
那第二個就是Abitu Stylus簡介
第三個在Stylus上開始學習Raster編程
第四個Stylus代碼指南
那大家在聽分享的過程當中
有關於Abitu賽題的任何的問題
也都可以提前發在我們的評論區內
那在分享的結束之後呢
我們也會有QA的環節
我們將按照問題提出的先後的順序
來進行一一的解答
好的那接下來的話
我們就有請Jason老師來開始今天的分享
Hello大家好
稍等一下我分享一下屏幕
可以看到屏幕對吧
嗯可以的
Ok然後我們開始今天的分享
之前我在課程裏面也介紹過自己
然後今天再介紹一次
我是Jason
然後是來自Offchain Labs的
Integration Engineer
就是集成工程師
然後我主要也在負責
國內的一些開發者社區
然後如果大家有對任何Layer 2
有關的問題
或者是有比較有想法的話
可以也歡迎來私信我和我交流
我也在這個課程羣裏面
然後歡迎大家聽講
Ok然後今天呢
我們的一個Topic的話
剛纔主持人也介紹到了
主要是分爲Orbit和Status
這兩個板塊
然後Orbit的話是我們
我們在Orbit上面
基於Orbit上
這個這一套Codebase
來做的一個Layer 3
或者是Layer 2的一個
類似於Application Chain的一個搭建
搭建設施
然後你可以通過Orbit來搭建
你自己的Orbit NAND
這個Orbit NAND可以是Layer 2
也可以是Layer 3
然後第二個板塊的話
就是我們會介紹Orbit Status
Status的話是通過支持
在Orbit上面運行WASM的
一個虛擬器
然後使得開發者可以部署
可以部署你們自己的一個
RUST或者是C++的
一個原的智能核源
然後有一個好處的話就是
用Status的部署的話
它不會像其他的一些
同時支持WASM
EVM的鏈一樣
這兩個虛擬器不互通
但在Orbit的話
這兩個虛擬器
它是互通的
也就是說你的RUST的核源
可以無縫的調用Solidity的核源
所以它們兩個的話
它們是不會給你任何一種
一種有互衡核
或者是一種有
比較割裂的一種感覺
而是一個可以無縫銜接的
一個生態系統
OK
那麼我們先來介紹一下Orbit
然後如果大家要
進行Orbit的一個賽題的話
然後可以有以下方式來打解Orbit
首先第一個方式的話
是UI部署
然後第二個方式的話
也可以通過我們的SDK部署
然後第三個方法的話
也就是最簡單的方法
是直接通過這個本地DevNet
來進行一個部署
部署於一個本地的一個網絡
然後前面兩個的話
都是部署在Supporia上面的
一個測試網
是直接部署到一個
公共測試網上面
OK
然後我們現在介紹一下
如何通過這個UI來部署
UI的話就直接通過
進入我們的這個網站
orbit.orbit.io進去
然後進去之後
它就會有一個簡單的一個
交互界面來告訴你
一些關於Orbit的一些信息
然後包括一些注意事項
比如說你可能需要在
Orbit Supporia上面
有多少個ETH
然後來支撐你的這些費用
比如說因爲你不屬於
這個鏈的話
你是需要來進行質押
來進行運行一個驗證者的
所以的話
它是需要你前置的
需要放一些ETH進去
當然這些都是赤字幣
你可以去這個水龍頭裏面
直接領取
OK
然後我們在這裏點擊next的話
就會來到這個界面
然後它會先讓你選擇
Zoap和Early Charge
然後爲了防禦
大家可以直接選擇Zoap
來進行你們的鏈的一個部署
然後這裏的話
去點擊next的話
就會來到這個界面
這裏的話
主要是你鏈的一些參數
比如說你的鏈ID
籤ID這些
然後你鏈的名字
你可以把它
把這個買Ubisoft AOC籤
改成你自己的一些什麼
什麼Panda籤啊
或者是什麼
任何的一些籤都是可以的
然後下面的話
就是關於一些
挑戰期的一個Blocks
就比如說因爲
大家如果瞭解過Ubisoft
可能是Ubisoft的
現在一個挑戰期是7天
然後你也可以通過
更改這個區塊數量
來減少這個挑戰期的
一個時間限制
然後就Stake Token
Stake Token就是你
自家的一個代幣
一般我們默認是ETH
然後我們在UI上面
還不支持改
更改這個Stake Token
然後後面的話
就是一些Chain Owner的
這些設置
還有這個Gate Token
Gate Token的話是可以
這個Gate Token是需要
是需要你們來
部署Early Charge
但是由於這個例子是Zoap
所以就不再繼續
進行一個展示
OK
然後你可以在這裏
點進去Deploy
Deploy之後
它就會把你的一些
主要的一些Contract
部署在Layer 1
或者是Layer 2上面
然後你就可以得到
這些配置信息
就是你念的一個
配置信息
或者是你可以把它
稱爲一些什麼
創始信息
這些都是沒有問題的
然後你得到
這些信息之後
直接把它拷貝下來
然後克隆一下
我們的這個
Ovid Setup Script
然後直接運行它
就OK
然後你的鏈就已經
搭建起來了
就主要就是這幾步
然後通過UI部署
其實也挺簡單
整個過程最多
就可能3到5分鐘的時間
就可以搞定
所以也不會很難
然後還有一個方式
就是通過代碼的方式
你可以自己定製一些
更加高級的一些選項
因爲在UI的話
我們主要是爲一些
剛剛入門的一些
測試人員準備的
所以的話就把一些
最基本的信息
然後如果你想要
對你的鏈
更加專業的一個部署的話
你可以使用這個Ovid
然後這裏面的話
就可以通過代碼的一些參數
來進行更改
這個鏈的一些參數
然後這個Ovid的
這個鏈接也在
這個第二部分有展示
OK
然後這個就是
當你使用Ovid SDK之後
然後我們也會
也提供了一些例子
就一些example
然後裏面
大家也可以通過
這些example來看一下
當然這些的話
都是會更加
更加高級一點的
一些對鏈的一些定製
所以的話
如果大家只是入門的話
可以瞭解一下
這個SDK
然後也可以通過
其他的方式來進行部署
然後就是第三個
第三個的話就是
最簡單的一個部署方法
它主要的話
是需要你把這個
我們的Nitro的這個庫
給它拷貝下來
給它clone下來
然後clone下來之後
然後進到我們的
這個Nitro test load
的這個
這個指紋件夾裏面
然後直接輸入這行
這行命令
就initial
然後還有這個layer3 load
它就會直接
幫你部署三個
三個節點
一個是layer1的
一個測試節點
然後這個是用press來做的
然後一個是layer2
也就是
基於這個layer1的
一個layer2
然後後面的話
還會部署一個layer3節點
然後這個就
這個layer3 load的話
就是你的這個orbit load
你運行這一步之後
它會自動的去Docker裏面
去拉起一些Docker鏡像
然後直接通過Docker鏡像
來進行運行
所以後續你只需要
等待這些Docker鏡像
全部下載好
然後等待這些節點
完成初始化
然後把這些需要部署的
部署好就ok了
這個部署的話
大概需要你
因爲這個部署的話
可能需要考慮到
你的網絡的速度
如果網絡比較快的話
可能10分鐘左右
就可以等它自動運行完成
然後你的鏈也可以
setup起來
如果網絡速慢的話
可能需要20到30分鐘左右
然後這個主要就是
取決於網絡的一個狀態
當你的鏈已經跑起來之後
你鏈跑起來
一個依據的話
你可以直接通過Docker PS
然後來查看一下
有沒有一個叫
Lightor或者一個Layer 3
load的一個container
跑起來
也就是一個容器跑起來
如果跑起來的話
你就直接可以查看
用Docker log這個命令來
查看他們的一個運行狀況
如果運行狀況良好的話
他就是已經跑起來了
當他跑起來之後
你可以得到一些鏈的信息
然後通過這一步子
然後這個PPT的話
我已經發給助教
然後他後面也會
把它發出來
你可以直接通過這一步
來進行一個
獲得鏈的一個
你的Layer 3 Chain的
一些信息
OK
然後這個就是搭建一個
基本的Orbit Chain的
一個流程
然後我們來說一下
這個Type Ticket
但其實
如果你想要
進行這個賽題的話
你可以不需要
自己搭建這個Orbit
你可以直接用
我們的一個測試網
就Optium Suporia的測試網
就OK
就可以
當然如果你自己搭建的話
那肯定是更好的
如果實在
可能覺得有些複雜的話
也可以直接
使用我們的
Suporia的這個測試網
就是直接從
因爲我們的所有鏈的話
都是支持
Type Ticket
不只是Orbit的
就普通的Layer 2也支持
所以你也可以
直接通過
以太坊Suporia
的這個
我們在上面
部署的這個
Type Ticket System
然後來通過
來將你的消息
跨鏈到這個
Optium Suporia
這條Layer 2鏈上面去
然後OK
我們現在來介紹
這個Retrieve Ticket
Retrieve Ticket的話
它其實就是
我們做的一個跨鏈
或者是跨層的
一個消息系統
然後它主要和
之前的一些跨鏈條
有什麼區別呢
然後之前的跨鏈條的話
他們其實就
簡單的發送一筆
Layer 1到Layer 2的交易
然後通過雲源機
來讀取讀取的話
然後直接在Layer 2裏面
釋放這筆交易
來讀取併發行
發解對應交易
這就OK了
這就是一個
普通的一個
跨鏈條需要做的事情
但是這樣會帶來一個問題
就比如說你可能
會因爲一些Gas的原因
然後你的交易執行失敗
執行失敗之後會導致
可能會導致你的資金
因爲執行失敗
導致你可能會有資金
丟失的一些風險
所以考慮到這一層因素的話
我們也做了一個
可重視票據
就如它的名字一樣可重視
就當你第一次失敗了之後
你可以再次在
後續來進行再次執行
這個有什麼好處呢
就比如說
在你這個AO1到AO2交易的時候
你設置的一個Gas是一機位
然後但是到L2之後
他們因爲由於網絡波動
所以然後Gas price突然急劇上升
然後導致你的這個Gas
原先設置的Gas price
已經不夠了
進而導致你的交易失敗
在這種情況下
Retrieve Ticket的話
可以在第一次失敗之後
然後把它重新
存入這個緩存區
然後等待下一次
當這個Gas price下降
回一定程度的時候
你再重新調用
然後來重新獲得你的這個
重新進行一個交易執行
也就是說他們
我們先我們的這個
可重視票據的一個執行的一個流程
就是先通過發起一筆
這個簡單的一個
可重視票據的一個交易
然後當L1收到這個交易之後
他會先扣除手續費
然後並充電票據
充電票據之後
他會先嚐試兌換票據
這個兌換票據
其實就是嘗試先執行這個票據
如果執行成功的話
那麼就可以直接把票據銷回來
然後就直接執行交易就完成
如果執行失敗之後
那麼票據不會銷回來
而是把它重新存入這個緩存區
然後再在緩存區裏面
收取一個緩存費用
然後等待你後面的一個執行
OK
然後更詳細的話
他其實就是這個樣子
首先發起一筆交易
然後
這因爲你發起一筆交易
交易裏面可能會有歐六
這個信息歐六的話
就是你可能會在這筆交易裏面
攜帶的一個資金的一個數量
如果有歐六的話
他就會
首先會把這些歐六的話
先存入
你們在L2的一些一個地址
一個from的一個地址
然後
然後再收取這個submission course
這個submission course的話
就是什麼
其實就是一個窗簾
上面票據的一個費用
因爲票據窗簾之後
它是需要存儲在網絡中的
而存儲在網絡的話
就會消耗一定網絡的存儲資源
所以的話會收取一定的費用
然後再收取這個submission course
之後就會繼續檢查這些
各種的一些條件
就比如說那個歐六
和你在L1裏面發起交易的時候
所攜帶的這個資金是否一致
或者是你在L1裏面
攜帶的資金是否大於
你在L2上面準備發送的資金
如果小於的話
那肯定就執行執行檢查失敗
然後就退還你所有的這些資金給你
然後交易執行失敗
如果檢查通過的話
那麼就成功創立這個票據
然後來在L2上面進行一個guess
衝制到對應的地址
然後並且執行票據
其實它簡化下來
就是說
你創建票據
你需要支付足夠的這個費用
來發送這個票據
然後來執行這個票據
同時的話
它也需要你輸入一些什麼地址
來防止這個交易執行失敗之後
你的錢可能不知道跑哪裏去的
一個比較side case
就有一個邊界情況
OK
然後對於這個recycler
其實剛剛講了很多
其實操作起來非常簡單
其實就是調用一個
其實就在這裏
就在一個合約裏面
簡單的調用一下
創建票據
就34行到43行
在這裏
你輸入一些信息
就是L2 target
L2上面進行交易的過程中
你的這個to的一個地址是什麼
然後你的這個的話
就是你volume的數量是多少
比如說如果你要發送資金的話
這個資金數量是多少
然後後面的話就是submission cost
就是你所能接受的
對於這個票據創建
所需要付出的開銷是多大
然後就是後面兩項的話
就是關於這個
如果票據創建失敗
這個地址的
這個資金的一個返還地址是什麼
然後後面這兩項的話
就是簡單的一個
電子的一個信息
就是你在L2上面交易裏面
你的你所接受最大get
然後你所接受的get price的一個
數額是多少
然後就是data
data就是我們在普通交易裏面的
一個data的一個值
就比如說data裏面
如果你要調用合約
這個data的話
就是你調用合約的一些參數
就舉個例子吧
這個data
比如說在這裏
我們這個data的話
他其實是想要調用這個
L2上面的一個叫做
set grating的一個函數
就比如說我們是要調用這個函數
那麼我們就直接
獲得這個函數的一個selector
然後同時把我們所grating的一個
一個信息放進去
這裏面大概因爲是直接
傳進來的
所以的話你可以說什麼
這些都是沒問題的
把這個encode起來
就是一個data
這個data其實就是你
如果想要調用函數
你就可以這樣
直接encode起來就沒有問題
OK
然後這個就是
recycle ticket的一個
調用的一個過程
然後我們等會會更詳細的
來解析一下這個代碼
OK
然後對於在使用
recycle ticket的過程中
可能會有一個需要
大家注意的事情
就是我們會對交易的發起者
引入一個地址轉換的一個功能
就比如說
當你發起交易之後
如果你的sender是合約的話
那麼我會把sender的這個地址
重新轉換一下
而不會在layer2上面顯示出
是一模一樣的一個sender地址
這個是爲什麼
如果大家在之前的課程中
講是有說過
這個合約地址是什麼生成
大家就會知道
首先合約的地址的話
它是當我們這裏說的是
這個creator
最基本的一個
creator contract的一個函數
就不是creator2
在這種最基本的一個
創建合約的一個過程中
這合約的地址的一個計算規則是
通過將這個部署者的一個地址
再加上部署者的一個lance值
他交易的一個lance值
來進行一個RAOP
RAOP編碼
得到編碼之後
然後對其進行hash
然後就得到了一個合約的地址
那麼也就是說
如果你用同一個地址
並且用同一個lance值
在不同的鏈上部署合約的話
你大概率是可能會
碰到在不同的鏈上
部署同樣合約地址的一個合約
儘管他們兩個的
合約的代碼完全不一樣
那麼他們有可能是
共享同一個合約地址
那麼在這種情況之中
如果考慮一個情況
就是發送跨鏈交易的時候
比如說我在A鏈
這裏是合約A
我們在A鏈裏面
發起一個通往合約B
所在的B鏈的一個交易
假如說這個合約B
有一個功能
就是說B鏈
這個合約B在合約C裏面的
一個存儲的資金
是100個以太坊
但是合約A
他其實沒有擁有這100個以太坊
而合約B確實是擁有這100個以太坊
這樣就會造成一個什麼情況
在發動交易的時候
這個合約A就可能
可以通過一個跨鏈交易
來僞造自己是合約B
然後從而竊取他在
這個B鏈裏面
合約B的一個應有的資產
這個是一個可能會發生的情況
所以在這種情況下
我們就需要
當交易的發行者
他的一個地址爲合約的時候
需要進行一個地址轉換
這樣的話
他就不會和合約B一樣了
這樣地址轉換之後的話
就不會發生一種
就我跨鏈來竊取
對方資產的一個
這種行爲
然後他具體的一個合約地址轉換的話
其實就是加一個offset
然後這個offset也非常的簡單
就是前面四個E
然後後面四個E
然後直接對地址進行一個轉換
OK
然後這個就是一個跨鏈的時候
你如果是使用這個合約來進行跨鏈的話
所需要注意的一個點
OK
然後他們這個就有一個情況
就是說
如果大家用智能錢包
或者是用這個
所謂的這個來發動交易的時候會怎麼辦
那麼我們在這裏的情況下
因爲他調用了L2合約
你需要其實是檢查這個合約
是從L2網裏面對應來的
所以我們在檢查的時候
就不是把MSG典生的和這個AOE target
來進行一個直接的比較
你也需要在這個MSG
你也需要在這個上面
就在檢查的時候
在L2檢查的時候
也需要來進行一個AOE的操作
來判斷他們相等
而不是直接的一個
對AOE target和MSG典生的一個地址
一個直接判斷
他需要一個進行一個簡單的轉換
嗯
OK
然後這個就是一個Receive Ticket的一個例子
然後我們也可以通過繼續來查看這個合約
我們的一個
他是怎麼做到的一個跨領合約的一個交互的
首先這個GreaterAO1的話
他其實就是部署在L1的一個合約
然後GreaterL2的話
他是一個部署在L2的一個合約
然後我們在這一步
這個Tutorial裏面的一個目的的話
就是通過這個GreaterL1
然後來調用他在L2上面的一個
對應的一個另外一個合約
叫做GreaterL2的一個合約
那這個合約的一個調用過程就是
首先的話就是一個簡單的一個構造器
構造器的話就設置一下
你L2的一個合約地址是多少
然後Inbox地址是我們Arbitron的一個
核心合約的一個地址
就Inbox的話
就是Arbitron發送L1到L2消息的一個
相當於是收件箱吧
這個是每個店他都有的
然後也會在你自己創建Orbit
或者是Orbit的時候
然後給到你這個地址
然後如果你是用我們的公共測試網的話
也可以在我們的那個官方文檔裏面
去找到對應的一個地址信息
在創建了之後
就有一些
這個的話就是
就更新一個L2的一個
對應地址的一個函數
這個函數沒有什麼好處
然後就下一步
就我們的主函數
我們剛剛也提到了
就是這一步就是創建那個合約票據
然後這一步的話
就是來組裝你所調用
你所想要調用對應合約的一個Data
首先的話
就是他合約的一個函數的一個簽名
然後其次的話
就是函數的一個參數
比如說這裏
他函數的簽名就是
SetGreeting的這個
他的一個簽名
然後其次的話
第二部分的話
就是你的這個Greeting信息
就在這裏
這Greeting信息的話
是你直接在裏面的話會
有的
OK
然後在創建之後的話
就簡單的一個
就結束了
你創建之後
Layer1收到合約之後就結束了
然後就簡單的對其進行一個
event的一個操作
然後返還你這個Ticket的ID
就沒有問題
然後這個SetGreeting的話
我們可以不用管這個
和我們在這個課程裏面
所提到的沒有太多關係
然後再看一下這個地方
Greeting Layer2
當我們的消息到達Layer2之後
因爲我們在這個Return of Ticket裏面
預設的是調用的是這個信息
然後Target的話也是這個合約
然後他就會進行一個調用
調用的話
OK
然後這就是一個健全的一個步驟
我們需要
我們所需要知道的是Layer1
我們的調用地址的話
也是和這個Layer1的一個
所發起的那個合約是一樣的
所以我們需要進行這一步操作
就是剛剛所說的一個
MSG點生的
然後再把Layer1 Target來進行一個
Alias的一個操作
操作完成之後
然後就直接調用這個SetGreeting就OK了
這一步的話
其實就是我們的一個
Script的一個信息就部署
然後進行一個調用的一個升級
然後這個的話
我把它發在這個羣裏面
這個對話框裏面
然後給大家也可以來參考這個
來進行一個實體的一個編寫
大家也可以直接模仿這個
因爲這個的話他不是升級
這個的話
其實他就是升級Layer2的
Layer2合約上面的一個
Greeting的一個狀態信息
你也可以加一些功能
比如說升級其他狀態信息
或者是加一些你想要的一些
跨鏈的一個合約的一個想法
這些都是沒問題
這只是其中的一個例子
你只需要就相當於模仿一下
這個合約怎麼寫的
然後加你自己的功能就OK了
所以這個應該也不是會
也沒有會很難
就比起我一開始說的那個題目來說
OK
然後我們進入到Stylus的環節
然後Stylus的話考慮到
因爲Stylus是
基本上都是用RUST來編寫合約
所以的話
我會默認選擇Stylus
這個賽題的話
大家都是知道Stylus
所有資料知道RUST怎麼寫的
所以我會直接跳過
RUST的一個基礎的一個部分
然後直接來切入到這個Stylus裏面去
首先的話Stylus的話
我剛剛也提到了
它是一個允許開發者
部署WASM代碼至區塊鏈的一個虛擬機
你可以部署任何的WASM合約
但是由於一些語言的話
它有一個比較重的一個狀態環境
比如說什麼Python、Java這些
所以的話這些東西
這些語言
它暫時是不支持
但是理論上你也可以
自行的開發一些庫來支持它
因爲他們都是WASM
所以的話他們都是
基本上都是
只要是WASM語言都是可以做的
然後目前我們官方自己寫的SDK的話
是支持了C++和RUST
這兩個語言
當然用的最多的話也是RUST
所以的話一般的話
我們的一些example的話
都是用RUST來寫的
OK然後我們這個example的話
我們這裏會主要用到這個
我不知道大家學習Solidity的時候
有沒有用過這個網站
就Solidity by example這個網站
這個by example的話
就是會說用這個Solidity代碼來編寫
一些簡單的一些applications
或者是一些簡單的
一些它的一些basic features
這些功能
什麼如果是在Solidity中怎麼寫
這些什麼
OK然後對於application的話
也有一些
比如說一代方錢包
或者是多錢錢包
這些這些Solidity代碼
然後我們在這裏
要講的話
就是這個用這個Stylus
也就是RUST來重新改寫
這個application的一個合約
當然這個的話
這個只是我們用example來舉的一個例子
你也可以去
比如說改寫uniswap
因爲V1的話
它的一個代碼複雜度
也不是很高
或者你也可以找一些
複雜度不是很高的一個
一些defs來進行一個更改
或者你也可以直接就找一些
在Solidity by example裏面的一些例子
當然在這個
其實這裏面已經有V2 swap
你可以直接用
我們的這個RUST來重新改寫
也是沒有問題的
OK然後這個就是
比如說multisig
就是多錢錢包的一個
在Solidity裏面實現過程
然後它在我們的
這個RUST裏面實現的話
它主要的一個流程的話
大概就是這些東西
首先是定義Solidity裏面的一些
疑問值這些信息
就用一個useful這些來定義
在這裏面的話
它都是在這裏面
它都是有Solidity的一些
這個定義方法
直接定義就OK了
所以也不需要你太多的一個
深入學習RUST
你只需要學習RUST的
基本的東西的話
也可以直接開發這個
Solaris核園
然後其次的話就是定義
定義變量
其實大家可以看到
這些定義變量的一個方法
都是和Solidity是一模一樣的
也是什麼address
然後你看這裏
這裏也不是通過的
RUST的方式來定義變量
而是直接通過Solidity的
一個方式來定義變量
這裏的話就是一個
Multisig的一個
合約的一個變量的一個集
然後這裏是我們
下面定義的
Transact Struct的一個Struct
OK
然後在這裏的話
如何區別普通的Struct和
合約的一個變量信息
主要就是通過看
它有沒有NG point的
這個東西
如果有的話
那麼它就是一個
合約裏面的一些
狀態信息
然後你也可以直接獲取
然後之後的話
就是定義這個126的信息
這些126的話
就比如說在這裏
然後我們也可以通過
這個直接來定型
進行一個定義
然後在後續裏面
去把它拋出
這裏
然後其實這些
合約的這個改寫
和Solidity
它的一個難度
並不是很高
如果你只需要
一些很簡單的
一些RUST的
一些功能就可以做到
比如說這個什麼的
一些變量的一個設置
這些
它其實都不會用到
RUST的一些
很深的一些東西去
只是用到
RUST的一些
很基礎的一些
語言的一些特性
OK
然後這個就是我們
對Multisign Wallet的
一個改寫
就通過對
Solidity的一個改寫來做的
然後如果
大家選擇這個賽選的話
也可以通過一些
比如說簡單的
這些VRSwap合約的
一些改寫來
來進行完成
這個對應的一個
Bounty
OK
然後這個用到
就是我們的
這個我也會再
把它發出來稍等一下
OK
然後這些的話
都是賽題
可能會用到的一些
比較有用的一些
庫和這些案例
然後大家也可以通過
就我剛發上
這三個鏈接的
這個案例
來進行一個模仿
或者是
加入一些你想要的
一些功能來
然後來完成這個賽題
這個的話就是
今天賽題的一個
大概的一個講解
然後我不知道
大家有沒有什麼問題
可以的
因爲我們
Sepulia的話
是支持這個
Stylus的
所以你可以直接
用Stylus的一個
RPC來做
然後如何使用
Cargo來
部署這個項目的話
稍等一下
我把這個
信息也發給大家
就比如說這個
首先的話
就是一個簡單的
一個例子的
一個獲得
獲得之後的話
然後你可以直接通過
編寫你自己的
這個合約
然後來通過
這個Cargo Stylus
我們有一個Stylus
這個CUI的一個工具
然後來進行一個
deploy
然後這個1的話
就是endpoint
就是如果你要
使用Sepulia的RPC的話
就是你用
Sepulia的RPC
然後這個project k的話
就是你部署者的
一個需要地址
然後通過這個語言
通過這個命令
就可以直接
部署你的
這個RUST的合約
然後在部署之後
他會給你一些
信息
就比如說
你的這個合約
即將部署到
哪個地址
就比如說
部署到這個
他這裏有兩個步驟
一個是把
代碼部署到
鏈上去
另外一個
另外一個交易的話
就是激活鏈上的
這個代碼
還有兩步
是因爲的話
是因爲這裏面
涉及到瓦爽主頁的話
還有一個激活的
一個步驟
就激活了之後的話
你的這個
一個代碼就可以
直接使用
然後這個就是
主要的一個
如何部署的一個信息
然後你也可以
直接在Stylus
辦一個Sample
裏面找到
不需要不需要
直接用Suporia
就OK
Suporia是支持的
OK
然後看
大家還有沒有
什麼其他的問題
然後對於
Stylus
這個
這個合約的調用的話
也和
你在
平時是怎麼調用
Solidity合約的話
你又可以怎麼調用
這個
Stylus合約
是Stylus合約
也是遵循的
Solidity的
這個4-byte
這個Select
這個方式
來進行的
一個編碼
好的
那我們感謝
介紹老師的
現在分享
那大家聽了
介紹老師這一塊
的分享的話
可能大家對於
我們本次Bounty的
這個RBQ賽道
也有了
更深一步的瞭解
那也歡迎
大家積極的
報名參與
我們的RBQ賽道
那掃描屏幕上的
二維碼
可以直接報名
那接下來的話
就是我們的
Q&A的答疑環節
大家想要了解的
問題的話
也可以發在評論區
那我們這邊
第一個問題
有同學在問
要怎麼
這個項目的話
可能是你用的
那個
Node的
那個
Version可能和
我們支持的
Version的
不太一樣
然後如果有
報復的話
你也可以直接加
我的微信號
然後把報復
發給我
幫你看一下
是什麼原因
導致的
報復
這個一般
就我們的
Tutorial裏面
出現報復
一般都是因爲
那個版本
不一致
呃
我們因爲
暫時是
不支持
這個Rust的話
是暫時是
不支持這個
Foundry的
所以的話
可能需要你
呃
通過一些
最基本的一些
測試方式來
就你直接
通過
自己編寫
一些
合約
來
通過編寫一些
這個
Script來進行
一個鏈上的
一個合約的
一個調用
來進行測試
然後但是
我們支持
這個Trace
這個Transaction
就是
Transaction的
Trace
你也可以通過
Trace來
呃
獲得一些
在測試的過程中
所需要的一些
信息
然後Trace
的話也是
也是在
cargo status
這個
這個命令
裏面
你可以
cargo status
剛剛
help
然後來
獲得一個
呃
如何Trace的
一個信息
但是Trace的話
其實
但是
所以說
由於現在
有很多API
的話
它是不支持
這個
就Endpoint
不支持
這個Trace
所以的話
可能需要
看一下你的
Endpoint
是否支持
這個Trace
這個功能
這裏我發了
一個CUI
Tools的一些
功能
就比如說
你要
驗證合約
或者是一些
其他的
就在一個Scan
上面
驗證合約
這些
這些功能
都是已經支持了
然後
Debug的話
我們也在這裏面
有那個
一些Debug的
一些用GDB
這種方式
來進行一個Debug
然後不知道
呃
是否對你有用
你也可以看一下
那我來
解答一下
剛剛
我們第一位同學
說Demo Day
的這個事情
Demo Day
是否是需要
所有提交Demo的
同學都要參加
還是說
有特殊情況
不能參加
怎麼辦
那這個的話
Demo Day的話
我們是建議
所有提交了
報名表的同學
都來參與
因爲Demo的
這個部分
也會是
我們評審的
一個
呃
維度之一
所以
建議大家
是來參加
那如果說
特殊情況
不能參加的話
那可能到時候
Demo
這一個維度的話
可能就
不會有分數
那所以
是建議大家
來參加的
好的
那大家還有
關於我們的
阿力熊這邊的
賽道的問題
關於邦迪的問題
也都可以積極的
來提問
那今天的話
是我們
呃
以太坊公開課
這個邦迪的
呃
直播的最後一場
然後大家可以
抓住這個機會
然後來
來給老師來
進行積極的
一個提問
喂
Jason老師
能聽到
可以聽到
呃
是這樣的
就是呃
我
前面一段
沒有聽到
就是
這個
這個用
用這個
呃
Stylus
這個去
做一個
Uniswap
V2
或者V1的
這個
這個流程
總結一下
我大概聽一下
呃
主要就是
因爲我剛發了
兩個例子吧
就兩個
兩個鏈接嘛
一個是那個
Solidity by example
和一個
叫做Stylus by example
的這兩個網站
然後在這裏面的話
我們有一些
呃
例子就把一些
Solidity的一些
合約轉換成
Stylus合約
就
的一些
呃
就怎麼轉換
你也可以通過
模仿這個
我們是怎麼轉換的
然後來
進行模仿
當然這個的話是
基本上你可以看
就直接通過
看我們
已經有的那幾個
Application的
一個那幾個
例子的話
就可以知道
大概怎麼轉換
其他一些
Define的一些
和因爲
那些東西
基本上都是
設計設計到了
所有一些
Solidity在裏面
會用到的
一些東西
嗯
對
然後大概就
這個樣子
然後
呃
你也可以看一下
就因爲
呃
其他的合約
就不
就不包括
或者是你自己
以前開發的
一些項目
你像要把它
轉換成
那個Stylus
也可以
然後這個
是沒有一個
固定的
一個選項
就看你自己
想要
做什麼都
OK
哦
就是把這個合約
呃
從Solidity
轉換成Rust
對對對
就就轉換
你之前自己寫的
也OK的
嗯
然後呢
就是
呃
對
然後轉換轉換
轉換的話
就就
然後能跑的話
然後就可以參加
這個Bounty
然後我們就可以
進行一個評價
評分
然後就看通過
你看你的
一個轉換的
一個程度
還有實現
程度
或者是裏面
是不是有一些
可能存在一些
bug
直接來進行
一個評分
哦
那這個是
呃
是
這個Stylus
以太坊
EVM上面的
一個編程
是吧
呃
Stylus的話
它不是EVM
它是Wasm的
一個編程
是Wasm的
一個編程
對對對
是使用Rust的
一個編程
因爲EVM的話
主要是Solidity
然後通過
這樣一個
就是
類似於EVM的
這個編譯
Wasm的編譯的話
然後再把它
部署到
這個option
上面是吧
嗯
對對對
嗯
然後再看它的
功能實現
是的是的
嗯
好的
好
謝謝
然後就關於
呃
這個有個新的
一個同學
呃
提出了一個
問題
就是
Retriever Ticket
有什麼
應用場景
呃
其實所有
Layer 1到
Layer 2的
一個跨鏈
基本上都是
用了
那個
Retriever Ticket
比如說
你的
ERC20代幣的
一個跨鏈
轉賬
然後
或者是
呃
一個
呃
比如說
EMS
因爲因爲
有些
呃
EMS之前
有在說
呃
把EMS
然後也支持
Layer 2
然後也會用到
這個Retriever Ticket
然後很多
這些跨鏈的
基本上
一些跨鏈條的話
都會使用
Retriever Ticket
來作爲
Layer 1到
Layer 2的
一個跨鏈的
一個
最基本的
一個
呃
底層
好的
感謝老師的
解答
那那我們的
QA的環節
就差不多
結束
那非常感謝
謝謝老師的
分享和回答
也非常非常
鼓勵大家來
積極的報名
參與到我們的
RBQ賽道
那如果
大家想要
協調組隊
或者在項目
推進過程當中
有技術問題
那也歡迎
掃碼添加
我們的小助手
Adam
那小助手也會
協助大家來解決
那我們的這個
邦提的報名二維碼
以及我們的
呃
Adam的小助手
這個二維碼
也都在我們的
屏幕上
那大家可以截圖
一下來保存
那同時的話
也歡迎大家加入
我們的以太坊的
公開課
參加邦提任務
瓜分1350美金的
一個獎金時
11月1號的24點
就是我們的項目
提交的截止的時間了
那大家可以
根據自己的項目
節奏來規劃時間
好的
那我們今天的活動
就到此結束
也非常感謝
Jason老師的分享
和大家的參與
那至此
我們的三場的
Webshop直播
就全部結束了
那大家可以在
我們的以太坊的
班級羣裏面
來觀看回放
瞭解我們的
三大的賽題
歡迎大家來積極的
參與我們的邦提
那我們就到時候
11月5號的時候
我們的demo day的時候
大家再見
好的
那大家拜拜
