Skip to content

Latest commit

 

History

History
174 lines (132 loc) · 5.2 KB

JLsgl.md

File metadata and controls

174 lines (132 loc) · 5.2 KB
timezone
Asia/Shanghai

JL

  1. 自我介绍 嗨~我是JL,第一次接觸程式,想接觸了解基礎知識和練習。
  2. 你认为你会完成本次残酷学习吗? 盡力而為。

Notes

2024.09.23

剛剛開始練習01內容,雖然完全新手 不過也算是起了個頭,開始熟悉github,Remix等工具 並認知到Solidity最最基礎的東西 後續再接再勵!!

2024.09.24

閱讀02課程內容,已出現很多很不熟悉的資訊, 所以就針對此次內容,一點一點地詢問AI工具, 然後比對教材內容,整體看完後, 在Remix上也是有跑出與教材相似的結果, 持續吸收積累,希望能漸漸熟悉相關邏輯,繼續加油~

2024.09.25

在03內容裡, 學習了解了function,以及pure、view等等所代表的意涵, 感覺還需要持續消化內容, 鼓勵自己每天吸收看一些, 盡力搞清楚每個章節的課程內容了。 加油!!

2024.09.26

瀏覽04內容, 按步驟一步一步操作, 得出的結果是一致的, 但自己覺得仍沒有很清晰了解每個步驟之間的意義, 再繼續吸收消化所看的內容了。

2024.09.27

看05課程內容, 知道原來Solidity的數據有分不同的儲存位置, 並不是全部都會上到鏈上。 以及Solidity中,時間單位會是一個重要的概念, 又吸收新資訊,太好了。

2024.09.28

06章節裡, 看到有,數組Array和結構體Struct等內容 目前不是很理解今天的段落, 應該就先硬記起來, 往後續章節看過學習後, 再來回顧複習好了。

2024.09.29

07內容,下午寫得不見了, 再簡單寫一次, 知道了映射Mapping是哈希表 _KeyType只能用Solidity內置的值類型。

2024.09.30

08課程, Solidity中,聲明但沒賦值的變數,都有初始值。 了解到各值類型初始值, 以及引用類型的初始值。

2024.10.02

09章節, constant(常量)和immutable(不變數)。 為了提升安全性和省gas,在初始化後不能更改數值。 immutable變數可於聲明或構造函數時初始化 constant只能於聲明時初始化,之後就不能變更。

2024.10.03

10課程裡, Solidity的控制流是能實現插入排序, 但很容易出現BUG, 如果將Python代碼直接改寫成Solidity會出現BUG, 因為常用的變量類型是uint,如果取到負數值就會引起錯誤。

2024.10.04

11內容中, 構造函數,在不同版本中的語法是不一樣的, 在Solidity 0.4.22前是使用與合約名同名的函數作為構造函數 0.4.22之後用constructor語法。 修飾器(modifier)是Solidity獨有的語法, 主要使用場景是運行函數前的檢查,例如地址,變數,餘額等等。

2024.10.05

12章節中, Solidity中的事件(event),是EVM上比較不消耗gas的數據存儲方式。 EVM用日誌Log來儲存Solidity的事件,每個日誌都包含主題topics和資料data。

2024.10.08

13課程內, Solidity的繼承(inheritance),有簡單繼承,多重繼承, 以及修飾器(Modifier)和構造函數(Constructor)的繼承等多個種類, 主要目的是減少寫重複的代碼。 不同繼承的內容有些複雜,後續需要再回看消化。

2024.10.10

14章節的內容, 瞭解到Solidity中的抽象合約(abstract)和介面(interface)

部分節錄如下

一一一

接口类似于抽象合约,但它不实现任何功能。接口的规则:

不能包含状态变量

不能包含构造函数

不能继承除接口外的其他合约

所有函数都必须是external且不能有函数体

继承接口的非抽象合约必须实现接口定义的所有功能

一一一

接口有兩個重要資訊

一、合約中每個函數的bytes4選擇器,以及函數名(每個參數類型)

二、接口id

使用接口,可以讓我們不用知道合約具體代碼實現,就能與合約互動。

2024.10.11

15課程中, 了解到有三種拋出異常的方法:

Error是solidity 0.8.4版本後新加的, 是比較省GAS的方式,也會向user解釋操作失敗的原因, 同時還可在拋出異常的同時攜帶參數。

Require是solidity 0.8版本之前的常用方法,缺點就是gas隨著描述異常的字串長度增加。 目前很多主流合約還是用此方式。

Assert一般用於寫程式debug,它不能解釋拋出異常的原因。

三種方法的gas消耗量是Error < Assert < Require 未來Error的使用應會愈來愈多。

2024.10.12

16講裡面, 說明到Solidity的函數可以重載(overloading),不允許修飾器(modifier)重載。

名字一樣的函數,輸入參數類型不同時,可以同時存在會被視為不同的函數。

2024.10.16

17章節中, 庫合約是為了提升Solidity代碼的複用性和減少gas,而存在的一種特殊合約。

與一般合約有以下幾點差異:

  1. 不能存在狀態變量

  2. 不能夠繼承或被繼承

  3. 不能接收以太幣

  4. 不可以被銷毀

常用的庫合約有:

  1. Strings:將uint256轉換為String

  2. Address:判斷某地址是否為合約地址

  3. Create2:更安全的使用Create2 EVM opcode

  4. Arrays:跟數組相關的庫合約