timezone |
---|
Asia/Shanghai |
- 自我介绍 嗨~我是JL,第一次接觸程式,想接觸了解基礎知識和練習。
- 你认为你会完成本次残酷学习吗? 盡力而為。
剛剛開始練習01內容,雖然完全新手 不過也算是起了個頭,開始熟悉github,Remix等工具 並認知到Solidity最最基礎的東西 後續再接再勵!!
閱讀02課程內容,已出現很多很不熟悉的資訊, 所以就針對此次內容,一點一點地詢問AI工具, 然後比對教材內容,整體看完後, 在Remix上也是有跑出與教材相似的結果, 持續吸收積累,希望能漸漸熟悉相關邏輯,繼續加油~
在03內容裡, 學習了解了function,以及pure、view等等所代表的意涵, 感覺還需要持續消化內容, 鼓勵自己每天吸收看一些, 盡力搞清楚每個章節的課程內容了。 加油!!
瀏覽04內容, 按步驟一步一步操作, 得出的結果是一致的, 但自己覺得仍沒有很清晰了解每個步驟之間的意義, 再繼續吸收消化所看的內容了。
看05課程內容, 知道原來Solidity的數據有分不同的儲存位置, 並不是全部都會上到鏈上。 以及Solidity中,時間單位會是一個重要的概念, 又吸收新資訊,太好了。
06章節裡, 看到有,數組Array和結構體Struct等內容 目前不是很理解今天的段落, 應該就先硬記起來, 往後續章節看過學習後, 再來回顧複習好了。
07內容,下午寫得不見了, 再簡單寫一次, 知道了映射Mapping是哈希表 _KeyType只能用Solidity內置的值類型。
08課程, Solidity中,聲明但沒賦值的變數,都有初始值。 了解到各值類型初始值, 以及引用類型的初始值。
09章節, constant(常量)和immutable(不變數)。 為了提升安全性和省gas,在初始化後不能更改數值。 immutable變數可於聲明或構造函數時初始化 constant只能於聲明時初始化,之後就不能變更。
10課程裡, Solidity的控制流是能實現插入排序, 但很容易出現BUG, 如果將Python代碼直接改寫成Solidity會出現BUG, 因為常用的變量類型是uint,如果取到負數值就會引起錯誤。
11內容中, 構造函數,在不同版本中的語法是不一樣的, 在Solidity 0.4.22前是使用與合約名同名的函數作為構造函數 0.4.22之後用constructor語法。 修飾器(modifier)是Solidity獨有的語法, 主要使用場景是運行函數前的檢查,例如地址,變數,餘額等等。
12章節中, Solidity中的事件(event),是EVM上比較不消耗gas的數據存儲方式。 EVM用日誌Log來儲存Solidity的事件,每個日誌都包含主題topics和資料data。
13課程內, Solidity的繼承(inheritance),有簡單繼承,多重繼承, 以及修飾器(Modifier)和構造函數(Constructor)的繼承等多個種類, 主要目的是減少寫重複的代碼。 不同繼承的內容有些複雜,後續需要再回看消化。
14章節的內容, 瞭解到Solidity中的抽象合約(abstract)和介面(interface)
部分節錄如下
一一一
接口类似于抽象合约,但它不实现任何功能。接口的规则:
不能包含状态变量
不能包含构造函数
不能继承除接口外的其他合约
所有函数都必须是external且不能有函数体
继承接口的非抽象合约必须实现接口定义的所有功能
一一一
接口有兩個重要資訊
一、合約中每個函數的bytes4選擇器,以及函數名(每個參數類型)
二、接口id
使用接口,可以讓我們不用知道合約具體代碼實現,就能與合約互動。
15課程中, 了解到有三種拋出異常的方法:
Error是solidity 0.8.4版本後新加的, 是比較省GAS的方式,也會向user解釋操作失敗的原因, 同時還可在拋出異常的同時攜帶參數。
Require是solidity 0.8版本之前的常用方法,缺點就是gas隨著描述異常的字串長度增加。 目前很多主流合約還是用此方式。
Assert一般用於寫程式debug,它不能解釋拋出異常的原因。
三種方法的gas消耗量是Error < Assert < Require 未來Error的使用應會愈來愈多。
16講裡面, 說明到Solidity的函數可以重載(overloading),不允許修飾器(modifier)重載。
名字一樣的函數,輸入參數類型不同時,可以同時存在會被視為不同的函數。
17章節中, 庫合約是為了提升Solidity代碼的複用性和減少gas,而存在的一種特殊合約。
與一般合約有以下幾點差異:
-
不能存在狀態變量
-
不能夠繼承或被繼承
-
不能接收以太幣
-
不可以被銷毀
常用的庫合約有:
-
Strings:將uint256轉換為String
-
Address:判斷某地址是否為合約地址
-
Create2:更安全的使用Create2 EVM opcode
-
Arrays:跟數組相關的庫合約