Office Hour 3|Starknet開發實戰訓練營二期

TinTinLand
5 位粉絲
19 觀看·2024年12月24日
那大家晚上好,歡迎大家來參加我們今天STARNEC訓練營第三次的office hour的直播活動。
那office hour主要一個目的就是來解決大家一週的一個學習疑問的。
那助教也會給大家來分享一下相應的學習經驗,學習資料和工具。
那分享之後呢,我們也會有QA的環節,主講老師跟助教也都會在我們的直播間。
那大家如果有任何的問題都可以在我們的QA的環節直接開麥,跟老師跟助教來進行溝通。
那我們在正式的分享之前呢,也同樣的來跟大家提醒一下,一個是畢業學員的要求,一個是優秀學員的要求。
那第一個的話就,我們畢業學員是要求去完成我們全部六次的一個task。
然後我們現在課程進行到的階段是我們,即將我們進入到第四周的一個學習。
那我們也開始,今天早上的話也是更新到了第五課。
那大家在這個過程當中的話,也可以去儘快的去提交到我們目前已經提出來的,已經公佈出來的這個作業,去完成我們的作業。
那完成了作業,滿足了畢業學員的這個要求的話,是可以有畢業證書,也同時可以瓜分一個獎金池。
那優秀學員的話是,要去完成我們課程的視頻的學習,以及去提交到邦提的項目。
邦提的賽題目前也已經全部都要公佈了,那大家如果感興趣的話,其實在我們最後兩週的這個學習當中就可以去着手準備了。
那第二個就是課程的活動,目前是我們是進行到第四周,以及第五課的一個學習當中。
那在這個過程當中的話,就大家還是在一個理論學習的這個階段。
那在這個階段的話,我們是會有每週二的晚上會進行office hour來給大家去打一結貨。
那同時的話,也會有現金紅包的這個抽獎來給大家做這個鼓勵。
那在我們理論學習之後呢,就我們也會安排到,也就是在一月初,我們會安排到兩場的workshop的這個直播來幫助大家去完成邦提的這個賽題。
那目前邦提的實戰的這個賽題已經全部公佈出來了,那大家也可以根據自己擅長或者說自己感興趣的這個方向來去選擇來提前去做準備。
那項目提交之後呢,我們也會去進行demo day的項目的演示,以及我們最後的一個建議儀式。
那在這個期間的話,是希望大家可以積極地去參與到我們的這個邦提的項目的實踐當中去。
那最後的話,也給大家來說一下課程的激勵這一塊。
就是一個是我們每週去完成當中的一個task的作業,是可以參與到我們每週二的這個現金紅包的抽獎。
比如說我今天下午在邦提班底羣就已經發起了這個紅包的抽獎,那完成了我們task4的同學就可以去參與到。
那第2個就是我們全部的6次的一個作業,如果你全部完成的話,最終我們在統計畢業學員的時候是可以有一個現金獎池的一個瓜分的。
那第3個就是邦提的項目實踐的這個部分,一共我們是有2400的STRK的一個獎金池。
那這個的話也歡迎大家去積極地參與。
那最後就是剛剛提到的裏裏積分的一個年榜。
因爲現在已經是我們2024年的最後一週了,那年榜的統計的時間是截止到12月31號的。
那最後一週的話是希望大家可以積極地去參與到Zili的這個榜單的積分當中,積極去完成他們的任務。
那年榜的前十是可以瓜分到1600美金的一個獎金池的。
所以也希望大家可以積極地去參與。
那在我們本次的課程當中呢,Zili的這個積分的獲取,大家也可以看到右邊的我們所有的這個可以的獲取的途徑。
包括我們課程報名表,參加我們課程期間的這個活動,開儀式,office hour,workshop等等。
這些都是可以去提交我們的Zili的這個截圖去完成Zili上面的這個積分的。
所以大家也可以關注一下。
好的,那課程的這個介紹就介紹到這裏。
那接下來就是我們助教的基礎分享的時間了。
那我們本週的一個助教是吳根助教,那接下來的話就有請吳助教來給大家來回顧一下我們第四課的這個課程內容。
好的,那我們時間就交給助教。
Hello,同學們好。
我是吳根,是這節課的助教,然後呢,今天就,我是一個,我是做前端的,
然後也是對區塊鏈比較感興趣,然後就來學習學習。
然後呢,這就是今天就我來帶大家就是看一下這個第四課課程的這個內容過一遍。
好的,能聽到吧?
可以的,可以的。
首先,第四課內容它就相當於是Starknet的一個Hello World,
就是部署一個最簡單的一個智能合約到這個測試鏈上。
首先,剛開始的話,它是主要完成了五件事情,
先創建一個簡單的智能合約,就是它裏面有storage,
然後你的這個構造器constructor,
然後就是定義自己的這個,你自己定義你的你這個合約的外部接口函數,
然後把它暴露出去,讓別人來調用,
就是可以read,可以去write之類的。
然後呢,就是你自己定義一些事件,
然後向外界通報你這個合約裏面發生了哪些變化,
然後就是它,你這裏面發生變化,
你要向外界的節點,讓他們知道你的這些變化,
然後他們要記錄,要同意,然後要記錄在這個賬本上。
然後就是訪問web的智能合約,
給一個就是把這個qswitch,
這個要把這個智能合約用它來管理你,
它就是qswitch它是一個,就是如果它是激活狀態的話,
你這個合約,一般情況下你的合約的狀態是不允許變化的,
所以它一般是激活狀態,
然後當它是關閉的時候,false的時候,
就是你可以改變它的狀態,
就是這裏面就是一個increase counter,
這個函數就可以調用了,
要把它放在你的increase counter裏面,
然後就是open zeppelin的一個ownable,
它這個是用來保護你的這個,
相當於保護你的資產的吧,
就是用它來規定你的這個合約的所有者是誰,
只有你的這個合約的所有者,
纔可以調用你的這個increase函數,
然後呢,緊接着就是部署,
部署的時候還遇到一些問題,
我先從頭過一遍吧,
剛開始的話是配置環境,
我注意到就是有很多同學它是Windows系統,
然後這個它不是說你必須要搞一個Mac,
就是Windows系統它現在其實,
就是現在這個stacknet是第二期嘛,
其實年初的時候有一個stacknet第一期的那位老師,
他其實那個課程他用的就是Linux系統,
WSL,就是那個搞起來也沒有那麼的麻煩,
其實還是蠻方便的,
而且現在這個虛擬機也是免費的,
然後WSL其實網上有很多教程都非常方便,
我自己就是用的Linux搞的,
但是我在搞的時候遇到一個問題就是,
就是因爲大家都是,
GitHub在我們這裏是被強調的嘛,
你要用開代理,
但你開代理的時候你的Gate,
它這個問題非常常見,
就這個443問題,
當你在GitHub上去推,
或者去拉你一些項目的時候,
它基本上都會給你,
很多時候會給你報這個錯,
就是超時,連不上服務器,
這是因爲你的Gate的這個端口號,
它是要和你的這個代理的端口號是一致的,
在這裏可以看到,
一般都是7890或者10890這些東西啊,
這個改一下就行,
用這個命令改一下就行了,
但是我在搞的時候還遇到一個問題就是,
你改了端口號它還是不行啊,
你看這裏我是改了端口號的,
它還是給我說是連不到服務器,
這因爲你的防火牆的問題,
或者是你直接被牆掉了,連不上,
這個時候你就要走這個SSH端口,
但是又有一個問題就是,
因爲很多代理它是不支持這個22端口的,
因爲很多機場它是爲了防止友商的這種攻擊,
它是直接把22端口扔掉的,
這個時候它GitHub給了一種方案,
它官方給了一種方案是,
你可以在你的代理上面就是直接用SSH協議,
然後走這個43端口,
它這個就是你在你這個個人文件,
在你的文件系統上找到這個.ssh的文件,
然後把這個config改一下就行了,
它這個意思就是,
你的這個主機的這個,
你的目標是這個,
主要是這個SSH,GitHub.com,
然後它全部走這個43端口,
然後規定它的用戶是Git,
這個就是配置環境的過程,
就這五個配置這五個環境,
然後就是這個counter workshop,
然後這就是這裏面用到一些比較,
比較常見的一些聲明吧,
先是初始化你的項目,
然後在你的這個TOMO文件裏面去,
規定你的這些依賴,
還有這個target,
然後呢就是用這個stocknet contract去,
去定義一個這個module,
去聲明一個類,
這個類聲明出來之後,
它就相當於你在部署的時候,
它會生成一個這個合約的實例,
然後去部署上去,
然後呢就是在這個storage裏面,
去存儲你這些合約要用到的,
哪些狀態變量之類的,
像這裏就是最開始,
先是創建一個counter,
然後這個construct就是,
你這個合約的構造器,
就是部署的時候,
它會構造出你這個合約,
它在部署的時候,
僅運行一次,
然後緊接着,
我們創建完這個合約之後,
就是要寫自己的一些接口函數,
就是你自己的一些,
你先定義出你這裏面,
你要寫哪些接口,
在這個stocknet interface裏面,
去定義你的一些接口,
這裏的話我們是定了一個guide counter,
就是去得到你的這個數值,
然後就increase counter,
去增加它,
這就是你的這個接口函數,
然後在你的這個contractor裏面,
在你的這個構造器裏面,
要去,要這個ABI,
把你的這個邏輯實現出來,
這裏就是read,
然後這裏就是write,
就是增加它,
這裏要注意一點,
就是這兩個東西,
一個是這個at,
一個是這個write,
這兩個關鍵字,
這個它相當於是用一個快照傳遞,
就是它是隻有讀的權限,
就是你提供出來的這個接口,
當外部調用的時候,
它是隻有讀的權限,
但這個write,
它就是外部調用的時候,
它是把這個寫的權限給暴露出去了,
你別人可以用這個方法去寫,
這個是要謹慎的,
不要輕易暴露這個,
當然一般的話,
你要暴露它的話,
一般都會給一些限制條件,
比如說像這個ownable之類的,
然後就是定義的事件,
這個事件就是說,
你要向外界通報,
你這個合約裏面發生了哪些變化,
你的資產,
這裏面就是你發生了哪些transaction之類的,
你要給外界通報出去,
這裏就是你先定義一個,
在合約裏面,
先定義一個這個eventEnum,
然後呢,
它這個變體,
它就是counter increased,
就是你的這個數值已經發生了變化,
把這個定義出來,
定義出來之後,
你要把,
這裏是定義,
然後這裏呢,
就把它這個變體創建出來,
然後當它發生變化的時候,
你就,
它這個裏面,
它有一個self-emit這個函數,
但這裏我沒有寫出來,
你要先把它引入進來,
你要use這個emitter,
然後之後就是要把它,
當你這裏面發生變化的時候,
然後這個self-emit,
向外界通報你的事件,
然後呢,
接着就是,
我們要訪問這個外部智能合約,
這個qswitch這個合約,
然後它這裏面有一個isActive,
它就是用來管理你的這個increase counter,
這個函數的一個狀態的,
它是激活的還是非激活的,
激活狀態的話,
就是一個受保護的狀態,
它是不能夠去,
它狀態是不能夠改變的,
然後非激活狀態,
就是isActive,
它反饋的是一個false,
這裏,
它反饋的是一個false,
然後這個邏輯才能夠實現,
就相當於是用它來管理你的這個,
就是你的這個保護狀態是否激活,
它剛開始的話,
就是要先把這個elite,
把這個qswitch這個elite引入進來,
引入進來之後,
要把這個,
這個qswitch的這個合約地址的這個,
把它這個寫到你的storage裏面,
因爲它也是個變量,
所以要,
你之後要用到變量,
全部要在這裏面去聲明一遍,
然後在,
在這裏,
在你的這個構造器裏面,
要把這個變量寫上,
這是它的類型,
然後,
初始化,
write,
把這個qswitch把它初始化出來,
這時候你就有了,
然後呢,
然後要在你的這個,
這個接口裏面,
但這個是直接去複製,
它,
qswitch它的那個官方網頁裏面,
它那個github上面有這個,
它的接口,
直接複製過來就行了,
把這個接口定義複製過來,
複製過來之後,
你要導入,
導入它的這個派發器,
dispatcher,
這個dispatcher就相當於是,
你調用它之後,
它會給你返回一個對象,
這個對象裏面就包含了,
你這個qswitch的各種方法,
它裏面的各種參數,
就在這裏,
調用這個dispatcher,
然後返回一個對象,
然後這個對象,
它的isActive這個函數,
它如果返回的是非,
然後就執行,
就可以執行這個邏輯,
就是非的,
就是非激活狀態,
然後呢,
你這個counter這個更新的這個邏輯,
它就可以,
就允許你實現,
然後當你啓用了這個保護機制之後,
所以每一次,
如果有人要調用這個函數的話,
你就需要用一個assert這個紅,
就這個斷言,
去,
去看它是否有,
是否這個是一個非激活狀態,
或者激活狀態,
如果是非激活狀態,
那麼它就可以往下走,
就可以執行下面的邏輯,
那如果是一個激活狀態,
反覆的是一個是的話,
那麼它就是一個被保護的狀態,
這個就是accuse which is active,
它就不允許你去往下面走,
就不允許你去increase counter,
增加這個counter的值,
然後接着就是一個ownable,
ownable它就相當於,
保護並限制你的合約的所有者,
它先是初始化這個合約,
這個合約的所有者是誰,
然後呢,
只有合約者才能調用這個increase函數,
這個方法就是,
我先把它這個依賴加上去,
依賴加上去之後,
引入這個ownable這個組件,
然後接着就是,
這就是引入這個組件的過程,
然後用這個component的這個宏,
去聲明這個合約的內部的組件,
這個path,storage和event,
然後呢,
去寫它的實現,
然後呢,
將ownable的存儲和事件,
就你這裏聲明瞭它的存儲和事件,
把它的路徑,
添加到你自己合約的這個storage裏面,
你自己合約的這個substorage,
這是你ownable的這個存儲,
還有你這個,
這個是你ownable的這個事件,
寫到你的這個事件裏面,
然後我們的目的是,
要在我們的這個increase函數里面,
要調用ownable,
它有一個方法是assert,
assert only owner,
就只有owner它可以,
它可以去斷言,
它可以去,
去做這個事情,
這個就相當於是對你的increase counter起到一個保護作用,
就只有你的owner可以做這件事情,
然後在這個ownable組件裏面,
去這個初始化這個函數的這個所有者,
這個就是在你的構造器裏面,
把這個,
在這裏,
ownable的這個initializer,
把它寫上,
就是它就是,
在構造你這個合約的時候,
它會規定你這個合約,
它的所有者是誰,
就這個initializer,
這個是你傳進去的參數,
然後這裏就,
基本上就搞完了,
然後就是要部署合約,
把這個合約部署到這個stacknet測試網上,
然後我發現大家很,
我也遇到這個問題,
就是大家記得把這個私要公要,
和這個公共的RPC地址,
要配置到你的這個環境,
這個文件下,
DNA環境下,
然後就是大家很多人都遇到這個問題,
就是contract not found,
這就說明你的賬戶沒有激活,
需要在你部署的這個錢包裏面,
去轉一筆錢,
轉一筆token出去,
然後你這個錢包就相當於,
被認爲是已經激活了,
然後呢,
你就可以部署了,
就能部署成功了,
還有就是你的這個Sopalia,
這個你面上是有這個stack測試幣的,
但是還是,
因爲你在部署合約的時候,
它是需要消耗ETH,
所以你還需要轉一些ETH進去,
來支付這個Gas fee,
就你的這個裏面是有stack幣的,
但是你發現,
它這個是不行的,
還是需要轉一些ETH進去的,
然後就還有一個問題就是,
當我們在部署合約的時候,
因爲你已經配置了私鑰了,
所以在部署合約的時候,
它不會彈出錢包來確認,
所以你看不到它預估要消耗的費用,
這個就是,
如果你真的要在這個鏈上,
去部署合約的時候,
有時候可能你的這個邏輯寫的,
就是你還沒有優化它,
然後可能它要消耗的費用很高,
但是你看不到它要消耗多少費用,
然後你可能就直接發出去了,
這個是一個很不好的操作吧,
所以這個在stocknet的JS裏面,
這個應該是在下節課它會講到,
第五節課第六節會講到,
就是它有給出這些函數,
stocknet JS,
它會給你,
可以用這些函數來估算你的費用,
這個estimate fee,
它就是,
這個是估算網絡中調用合約的成本,
這是調用的成本,
然後這裏,
然後這個是估算在網絡中宣佈合同的成本,
就是,
當然它這個,
這個可能我待會是一個問題,
這個宣佈合同和在網絡中部署合約,
這個兩個有什麼區別嗎?
這個可能等會我想問一下,
然後之後就第四個,
就是在網絡中部署賬戶的成本,
OK,
我今天分享就到這兒吧。
好,
感謝我們的助教的分享,
那助教這邊也是帶大家一起回顧了,
我們上一週的一個學習的內容,
那接下來的話,
就是我們的Q&A的環節,
那除了助教之外的話,
我們Aston講師也在我們的直播間裏面,
那剛剛助教提出來的問題,
可以有請先請我們的講師,
可以給大家解答一下。
嗯,
那個,
可以再說一遍嗎?
因爲剛纔那個沒太聽清。
就是,
Hello,
講師您好,
就是他在我的這個stocknet.js,
他有一個估算成本的那一欄嘛,
他裏面有估算在網絡中宣佈合同的成本,
和部署合同的成本,
還有這個部署賬戶的成本,
他這個有什麼區別嗎?
就他給了好幾個函數。
是這樣,
就是這個,
因爲第二課應該有相關的內容,
就是stocknet的transaction有三種類型,
分別是declare,
invoke,
和deploy account。
哦,我知道了。
對,他其實是這個區別。
OK,OK,謝謝老師。
好的,那其他同學有關於我們上一週,
或者說我們前五課的學習內容,
大家有疑問的都可以提出來。
同學在問說,
爲價用Pragma,
還是Chainlink,
比較推薦哪一個?
我個人沒有做過相關的這個東西,
但用Pragma做過那個隨機數,
Oracle沒有做過,
所以我也不太清楚Pragma在這塊做的怎麼樣,
但Chainlink的話,
肯定是行業內是相對來說知名一些。
對,我也只能提供這些建議。
那我們下一個問題,
這個問題的話是代碼相關的,
可能得辛苦老師看一下評論區。
是生成賬戶的時候,
問一下這個命令的作用,
到底是生成加密賬戶密鑰,
還是生成賬戶?
這個密鑰對,Public Key和Private Key,
這個肯定是你的賬戶,
也是對應到Stacknet的智能合約的。
然後唯一的區別呢,
可能你需要去激活一下。
對,我通過你的問題應該是,
應該可以,就是賬戶,
它就是賬戶。
那這個同學如果還是有疑問,
或者說不太清楚的,
也可以歡迎開麥。
我們今天上午是更新了課程的第五課,
然後理論學習的話一共是六課的內容,
那大家對於我們前五課的內容,
有疑問的都歡迎提出來。
好,那我們下一個問題。
那測試的時候,
輸出只能通過MAN函數,
使用Print In嗎?
有沒有比較方便的?
測試,你說的MAN函數,
應該是Karo的原程序,對吧?
應該不是此的合約。
你如果是用Karo直接寫的話,
建議用Print In,
然後如果寫合約的話,
當然也可以用。
我記得現在應該是有一個
做測試的一個工具,
但是我忘記那個名字了。
我待會兒去搜一下,
發到羣裏吧,
可以參考一下。
可以的。
對,我覺得這個鄭鵬同學說的對的,
就是你如果去寫,
是去寫測試的話,
寫測試的用力的話,
你肯定是用斷言是最優解,
然後用那個forge去測試,
去做測試嗎?
可能我理解的你是想去做debug,
但我不確定你是說這個意思嗎?
那這位同學可以再詳細
描述一下你的問題,
想在終端裏輸出。
輸出的話,
那還是Print In吧,
合約也可以寫,
也可以寫Print In,
在部署之前都可以。
好的,這位同學又接着補充說,
但是test客的時候,
pree不顯示。
如果方便的話,
可以把那個代碼發到羣裏,
然後客下,
我待會幫你看一下吧。
或者這位同學現在也方便
分享屏幕嗎?
如果可以的話,
也可以現場看。
好的,那我這邊先結束一下。
好的,那如果說
同學們沒有再提問的話,
那QA的這個環節就到此結束。
那我這邊再跟大家
來強調一下,
Office Hour
是給大家來答疑解惑的,
那大家可以帶着問題
來參與到直播當中來。
那另外的話,
今天下午我已經在
潘金全那邊去發佈了
我們的紅包抽獎,
那已經提交了我們Test客4的同學
都可以參與到
我們的這個紅包抽獎當中來。
那如果說
還沒有提交的同學,
那大家只要在今天的
晚上24點之前去
提交我們的Test客4,
就可以參與到我們的紅包抽獎當中。
那沒有提交的同學
也抓緊時間。
那接下來的話,
就是我們第四周的一個學習,
第五課的內容在今天早上
也進行了更新,
大家記得去安排時間來
去學習以及提交作業。
好的,那我們今天的
Office Hour就到此結束,
也感謝我們的
助教跟老師的分享
跟解答,
那我們下週二再見。
再見。
