timezone |
---|
Asia/Shanghai (UTC+8) |
-
Hi我是k66,這是我第一次參加殘酷共學,一起衝鴨🦆
-
你认为你会完成本次残酷学习吗?我會努力完成!
學習內容: Hello Web3
: 本堂課第一支程式
Solidity
: 用於EVM的程式語言Remix
: Solidity的IDE- Solidity程式架構:
1.註解Licence
、2.Solidity版本號
、3.contract相當於main
以下是實際寫碼+編譯過程:
1.遇到錯誤->請AI提示->原本要照AI(左下角有RemixAI)提供的程式碼做(螢光綠處)->但發現錯誤其實來自少一字母r於是選擇不照AI的建議而是修正typo 2.編譯成功後,出現這些檔案(紅括號處) 3.部屬合約前發現設定檔預設和教程有些不同(比如教程VM分支是merge但目前預設是坎昆) 4.順便查了除了坎昆,也支援L2的Optimism和Arbitrum
學習內容: 2.ValueTypes
- 三種類型:Value Type, Reference Type, Mapping Type
- 與C語言寫法不同的是int寫在public前,如
int public _int = -1;
- 常見Value type: bool, int, uint, uint256, address, address payable, bytes(可變), bytes1, bytes8, bytes32, enum
學習內容: 3.function
這集對我來說單看有點難理解(碧琪公主那我看不懂), 看這篇才懂
pure
、view
是為取代constant
(到v0.4.17才取代)。 此外internal
、external
蠻好懂。
學習內容: 4.Return
分
returns
和returns
,後者和其他程式語言類似,前者跟在函數名後面。 特別的寫法,解構式賦值:(, _bool2, ) = returnNamed();
學習內容: 5.Data Storage
引用類型:
array
,struct
數據位置(與一般程式不同):storage
,memory
,calldata
,storage
消耗gas較多,且合約裡默認是storage
,memory
和calldata
只存內存但不上鏈,calldate
較memory
不同的是其immutable
特性。 作用域:state variable
,local variable
,global variable
。 乙太單位:wei(1)
,gwei(1e9)
,ether(1e18)
時間: 可以規定一個操作須在指定時間內完成。
- 心得: 這章和gas和省空間(是否上鏈)息息相關,若未來寫合約時產生不必要的gas浪費,可回頭看這章找靈感。
學習內容: 6.Array and Struct
array
:T[k]
,T[]
,bytes
,bytes1
,bytes
比bytes1
省gas。push()
, ,push(x)
,pop()
struct先創建後賦值:
struct Student{
uint256 id;
uint256 score;
}
function initStu() external {
_stu = Student(3,90);
}
學習內容: 7.Mapping
- key-value寫法
mapping(uint => address) public i2addr;
- 心得: 這章有講到mapping規則和原理但我對其沒感覺,之後再回頭看。