timezone |
---|
Asia/Taipei |
- 自我介绍
My name is 0x3f3f3f3f3f3f i'm interesting in smart contract.
- 你认为你会完成本次残酷学习吗? i'll do my Best to complete this course.
- 學習了如何使用remixIDE,以及compile到deploy的流程
- 值變量裡面比較特別的是address有分成單純的address跟address payable 兩種
- 宣告函式需要使用可見性 以及狀態修飾符,狀態修飾符有一個特別的payable代表這是一個能給合約收錢的function
- 可見性中 private跟internal的差異是在於繼承的合約能不能使用
- 宣告返回值前面記得要加上returns; 命名式返回跟解構式賦值都是新學到的語法
今天沒有到solidity101上學東西,主要是完成了一份課堂上的作業,比較有收穫的是完成了一個 reentrancy attack的流程,我覺得收穫蠻多的具體了解了調用閃電貸的流程用solidity操作了一遍 ,然後學到用calldata以及solidity撰寫讓設計不完善的閃電貸項目轉移token權限 搞了很久一部分,最後答案也沒幾行,感覺是對語法不太熟悉導致對原理有誤解,進而有太多奇怪的想法 明天開始繼續基礎學習solidity101
- 對結構的初始化都要再函示裡面
- 初始化struct 的四種方法,第一種用storage來創造一個引用然後對她初始化,第二種直接引入在外面的函數變量,第三種跟第四種很像,差別是第四種用了一種叫做key value的方法
- 在mapping的結構裡面 不能使用struct來mapping,mapping沒有定義初值的話她會默認是各個型別的初始值,初始化mapping的時候都是storage也就是狀態變量
- 變量初值的部分bool默認是false其他都蠻正常的,delete可以讓變量變成初始值
- immutable constant都不能在初始化後改變值 差別在於 immutable可以在constructor裡面在初始化邊量比較靈活 另外能聲明成immutable的只有數值變量,像是byte string這種的不行
- event的用法有 在emmit裡面有加上index的也就是topic部分的之後可以直接檢索但是只能有最多三個,且每個最大256 bits多的都會被丟到剩下data的部分,event可以理解為他在做broadcast而不是把數據保存到鍊上,這樣做可以節省gas,topic除了包含三個index以外還有多一組哈希,這組哈希是用你emit的事件名稱哈希的例如emit transfer(xxx,xxx,xxx)就會用keccak256(”transfer(xxx,xxx,xxx)”)來處理
- 繼承的寫法蠻特別的要注意繼承的輩份關係由左到右由大到小,super可以用來調用最近的父合約,重載父合約的函數要用overrider關鍵字,然後如果父合約希望讓子合約重載他的函數他要加上virtual不然子合約是無法重載的,假如重載的函數在多個父輩都存在則要把父輩都打出來在override後面
- 知道了interface的用法以及要怎麼跟別人部署好的合約互動 如果是符合特定IERC可以直接import來用不用自己手打interface 如果不是那你可以去etherscan裡面看他的abi在按照他提供的內容打出他的interface
- 理解了異常的差別,之前只用過require 學了才知道require是gas消耗量最高的 然後error感覺跟require很像,只是把revert的部分分開來寫但是他的gas消耗量是最小的