技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2023 iThome 鐵人賽
DAY
9
0
Web 3
Web3 X 公共財
系列 第
9
篇
Day 09 - 前10天Solidity 學習紀錄
15th鐵人賽
法蘭克
2023-09-24 19:43:48
303 瀏覽
分享至
Day 1,2
What I read
Hydai
Day2 : 區塊練特性 行為受限: 產生隨機數 + 資料儲存(成本)
如何產生 有特定產生模式 + 異地完全一致 + 不能被預測
Day3 合約結構
Day5 value type
static
no undefined / null
value , reference , mapping
value
boolean 預設false
Integer int= int256, uint= uint256, intN M[8,256], uintN
address 20Bytes +payable
Enums 列舉 預設第一個元素 常用來
model choice
or
track of state
enum EnumName {elements1, 2}
EnumName X = EnumName.element1
Struct 用於表示一個複雜變數
Enum 表示一個單一變數的不同狀態或值
Day6 ref type
資料存放的位置 memory, storage, calldata(read-only,儲存函數參數)
執行結束 / 合約銷毀 超級貴! +local storage /
位置移動代價!
memory/storage
bytes
var.length
string
字串是參考! 巨大限制
Type[length]
memory|storage N
Type[]
+push(x) , +pop()
Struct K{ }
Day 7 Function 合約互動
function FnName [V] [SM] [returns (...)] {}
Visibility: public, private, external, interal
State Mutability: pure 不讀取/不寫入, view 只讀取, X
storage, balanceof, block, tx, msg (除了msg.sig, msg.data), 呼叫不是pure韓式,特定組合指令
X: storage, emit log, 建立合約, selfdestruct, call, 呼叫非pure非view, low-level calls, 特定組合語言
Day8 constructor 所有合約自帶建構子 constructor(){}
部屬的回傳值 = 合約的最終程式碼
建構子只會在合約部屬的那一刻被呼叫 用途
用來
改變
[變數的預設值]
所有的stroage變數再呼叫constructor之前已經被初始化
最終程式碼 不包含 建構子 及only建構子使用的internal functions
Day9 receive() external payable {}
一個合約只能有唯一一個 receive,不需要function,不允許傳入值,無法回傳任何值,必須要有external payable
發送一個 無calldata交易 到合約中被觸發
如果receive多了 會失敗
Storage, 建立合約,呼叫external function(太大),發ether(+2300)
Day10 send ether
member function of addresstype (non-payable系列成員)
balance
-> uint245
code -> bytes memory
codehash -> bytes32
low-level call系列: call, delegatecall, static call
if payable
+addr.transfer(uint256 amount) 轉給addr
失敗會revert
+addr.send(uint256 amount) -> bool
失敗回傳false -> 建議用send
全域變數 msg.sender
msg.sender -> address = 當前address
當前合約 this
address(this)
Day11
modifier M () {} _;
require(條件,"錯誤原因") if ture 繼續 ; false revert
Day12 Mapping type
mapping(KeyType => ValueType) Name
keyType 不支援 mapping, structs, array
value 任意
原理 ref
那些關於 Ethereum 的事
Solidity 書
Struct 用於表示一個複雜變數
Enum 表示一個單一變數的不同狀態或值
Day 3~5
Hydai
day 13 控制結構 if for while break continue
條件 = 必是布林值
day 14 Event at 區塊練 log at網頁
合約本身無法看見自己發出的事件 因為再區塊上 可以被監看區塊的人看到
indexed 有被放進Topics
4格 32bytes
Topics[0]
keccak(事件名稱 + "("+事件參數.map(canonical_type_of).join(",")+")")
Topics[1~3]存放 Indexed事件的參數
non-indexed 全部打包成ABI,存放在data
宣告 event EVENTNAME() 不醫定要有名稱
使用 emit ()
放入 event E(type indexed, )只有三個三格,若為reference type 會先被Hash
Day17~21 Interface 宣告function+event + ERC20
IERC20
抽象化function _XXX
Book
error handling assert用來檢測完全不該再合約裡出現的錯誤 require用來檢測使用者的輸入等
require() 檢驗簡單條件 合理的輸入/致行前必要簡單條件
assert()測試或Debug且用來檢測不變量(不該被改變的常數等)
revert() 確認複雜狀態
try/catch 確認外部執行函數和合約建立時(再一個合約裡面建立另外一個合約是)的錯誤
catch Error(string memory XX)
宣告過revert 或 require 異常處理被觸發時候執行
catch Panic(uint errorCode){}
Assert,除0,異常鎮獵取值,運算溢位執行
catch (bytes memory XXlowleveldataXX)
catch {}
try 根據外部涵是呼叫或創建合約行為來定義
Event
Inheritance polymorphism
c3 linearization
function overloading = function polymorphism
function overriding = contract polymorphism
Interface 定義標準,好處:彈性效率可擴充性模組化
不可以有實作部分,不能繼承
可視性只能是external
不可有constructor
不可有任何State variables
抽象合約 至少一個function沒有包含實作部分
template method
debug
與interface不同在於: interface只能是合約ABI能夠表示的範疇
Library 不是contract(很類似) 不具有自我摧毀
不可宣告state variables,不可傳送ether, 只會部屬一次
兩種library類型
deployed
embedded 當所有library函數都是interal 沒有自己合約地址 變成一部分
使用 using ... for
Day 6-7
Haidei
ERC721 + ERC165
Book
Vault
open zepplin uitiliy + openzeppelin ownable
ERC20 + ERC721
daily
Solidity by Example
雜項
清交DAO
- Uniswap v1->v2
- Remix 簡介
- Foundry + Etheranut 簡介
Uniswap 演進
Next
學習理解Foundry
了解Proxy contract
留言
追蹤
檢舉
上一篇
Day 08- hypercerts 與 Protocol Labs
下一篇
Day 10 - 回歸<Taka: 賦稅作為終局之戰>
系列文
Web3 X 公共財
共
30
篇
目錄
RSS系列文
訂閱系列文
2
人訂閱
26
Day 26 - RetroPFG / PCO
27
Day 27 - PCO -1
28
Day 28 - PCO-2: the space / thisartworkisalwaysonsale / fxhash ticket
29
Day 29 - solidity 學習資源整理
30
Day 30 - 完賽小心得 + 參賽願景
完整目錄
直播研討會
{{ item.subject }}
{{ item.channelVendor }}
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22200
篇
完賽人數
602
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
熟識南投軟體工程師推薦
如何練國考資訊題?
筆電無法使用usb開機重裝系統
CCNA相關問題詢問
電商在販售商品時,可以自行縮短保固期限嗎?
求救 有人會修改cookie權限嗎
python scrapy pipeline實作問題請教
防火牆互通問題
函數問題
桌面的使用者文件圖標壞掉
熱門回答
防火牆互通問題
筆電無法使用usb開機重裝系統
if函數中的>&<&=是否可以使用儲存格代替
開啟Microsoft Edge 瀏覽器無法開啟網頁,出現錯誤訊息
熟識南投軟體工程師推薦
熱門文章
每日一篇學習筆記 直到我做完專題 :( [Day1]
[翻譯]使用AI工具寫程式碼時如何避免「AI幻覺」?
每日一篇學習筆記 直到我做完專題 :( [Day2]
每日一篇學習筆記 直到我做完專題 :( [Day3]
每日一篇學習筆記 直到我做完專題 :( [Day4]
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}