📜 [專欄新文章] Solidity Data Collision
✍️ Wias Liaw
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
這是一篇關於 Proxy Contract 和 delegatecall 的注意事項。
Delegatecall
當 A 合約對 B 合約執行 delegatecall 時,B 合約的函式會被執行,但是對 storage 的操作都會作用在 A 合約上。舉例如下:
但是假如多加了一個 other 欄位在 _value 之前,執行合約之後反而是 other 欄位被更改了。
Storage Layout
了解上面的合約之前要先了解 Solidity 怎麼儲存 State Variables。Solidity Storage 以 Slot 為單位,每個 Slot 可以儲存 32 bytes 的資訊,一個 Contract 擁有 2**256 個 Slot。上述可以寫成一個映射關係 mapping(uint256 => bytes32) slots。
Solidity 會從 Slot Index 為零開始分配給 State Variable。
除了 mapping 和 dynamically-sized array,其他的 State Variable 會從 index 為零的 slot 開始被分配。
沒有宣告確切大小的 Array 會以 Slot Index 計算出一個雜湊值並將其作為 Slot Index。透過計算 keccak256(slot) 可以得知 _arr[0] 被存在哪裡,如果要取得 _arr[1] 則將計算出來的雜湊加上 Array 的 index 即可。
Mapping 則是以 Slot Index 和 Key 計算出一個雜湊值並將其作為 Slot Index。透過計算 keccak256(key, slot) 可以得到 mapping(key => value) 被存在哪。
Storage Collision
回到 DelegateExample_v2 的合約,對 B 來說, add 最後儲存加法的 Slot Index 為零,所以使用 A 的 Storage 執行 B 的函式結果自然會儲存在 A 的 other 裡,其 Slot Index 為 0。
這個問題也發生在 Proxy Contract,Layout 如下,當有需要更改 _owner 的操作,就會順帶把 _implementation 也更改了。
|Proxy |Implementation ||--------------------------|-------------------------||address _implementation |address _owner | <= collision|... |mapping _balances || |uint256 _supply || |... |
OpenZeppelin 處理的手法也很簡單,就是將 _implementation 換地方擺。以特定字串的雜湊值作為 Slot Index,儲存 Implementation 的地址。
|Proxy |Implementation ||--------------------------|-------------------------||... |address _owner ||... |mapping _balances ||... |uint256 _supply ||... |... ||address _implementation | | <= specified|... | |
openzeppelin-contracts/ERC1967Upgrade.sol at 83644fdb6a9f75a652d2fe2d96cb26073a14f6f8 · OpenZeppelin/openzeppelin-contracts
hardhat-storage-layout
如何知道合約的 Storage Layout 呢?這邊推薦一個 Hardhat Plugin,按照文件就能得到合約的 Storage Layout。
Ethereum development environment for professionals by Nomic Labs
Reference
Understanding Ethereum Smart Contract Storage
Collisions of Solidity Storage Layouts
Proxy Upgrade Pattern - OpenZeppelin Docs
Solidity Data Collision was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有7部Youtube影片,追蹤數超過0的網紅GORI DUNK,也在其Youtube影片中提到,オクト攻略まとめ:https://www.youtube.com/playlist?list=PLAD2v5Am1ng_o3xueo-_RKBIQp3T3RjIQ オクト ラスボス+エンディング:https://youtu.be/9sOWmiENYjc (ネタバレ注意)オクト 真のラスボス:http...
「1 bytes」的推薦目錄:
- 關於1 bytes 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於1 bytes 在 Oppa Sharing 【歐爸·旅游·分享站】 Facebook 的精選貼文
- 關於1 bytes 在 เกมถูกบอกด้วย v.2 Facebook 的最佳貼文
- 關於1 bytes 在 GORI DUNK Youtube 的最佳解答
- 關於1 bytes 在 GORI DUNK Youtube 的精選貼文
- 關於1 bytes 在 むむーむむー ちろむむむ Youtube 的精選貼文
- 關於1 bytes 在 Values less than -1 bytes are not supported querying nodes 的評價
- 關於1 bytes 在 API stopped working with struct.error: unpack requires a buffer ... 的評價
- 關於1 bytes 在 IndianOil SERVO Masters Golf 2021: Round 1 Bytes - YouTube 的評價
1 bytes 在 Oppa Sharing 【歐爸·旅游·分享站】 Facebook 的精選貼文
来来来!! 领取50%折扣券购买Flash Drive 32gb,到手价RM8.30+运费RM2(西马地区)
•
#跟着步骤买
1. 领取50%折扣券 (领取PC Bytes)
🈹️ https://voucher.page/SMO50OFF
(产品下方也可以领取)
2. 加入购物车
🛒 https://myshopping.page/FlashDrive32gb
•
#TodayGotSales #LazadaMY
1 bytes 在 เกมถูกบอกด้วย v.2 Facebook 的最佳貼文
เกมค่าย Piranha Bytes กำลังลดราคาสูงสุด 80% ในเว็บ Steam เหลือราคาดังนี้
.
ELEX ลด 80% เหลือ 179.80 บาท
.
Risen ลด 75% เหลือ 54.75 บาท
Risen 2: Dark Waters ลด 75% เหลือ 54.75 บาท
Risen 2: Dark Waters Gold Edition ลด 75% เหลือ 92.25 บาท
Risen 3 - Titan Lords ลด 75% เหลือ 78.75 บาท
Risen 3 - Complete Edition ลด 75% เหลือ 92.25 บาท
Risen Franchise Pack ลด 81% เหลือ 256.32 บาท
.
Gothic 1 ลด 75% เหลือ 54.75 บาท
Gothic II: Gold Edition ลด 75% เหลือ 54.75 บาท
Gothic® 3 ลด 75% เหลือ 54.75 บาท
Gothic Universe Edition ลด 80% เหลือ 73.80 บาท
.
Piranha Bytes & friends ลด 83% เหลือ 500.69 บาท
Arcania + Gothic Pack ลด 80% เหลือ 179.80 บาท
.
รายละเอียดเพิ่มเติมดูที่หน้าร้านค้า
https://store.steampowered.com/search/?developer=Piranha%20Bytes
.
ดีลนี้หมดเวลาในวันที่ 10 ส.ค.
.
เกมแนะนำ ก็คงเป็น ELEX กับ Risen 3 ส่วน Gothic เกมอาจจะดีจริงในยุคของมัน แต่เอามาเล่นตอนนี้ก็คงลำบาก เพราะเกมเก่ามากแล้ว ต้องหาม็อดมาลงวุ่นวายอยู่
-------------------------------
🦈 PingBooster VPN ลดค่า Ping ซึ่งเป็นสาเหตุของอาการ Lag ของเกม สมัครสมาชิกพร้อมโค้ด Sheapgamer ลด 15% => http://bit.ly/2wAh1Y5
-------------------------------
Battlefield V (Origin) แจกฟรีสำหรับสมาชิก Prime Gaming ดูวิธีรับที่นี่ - https://bit.ly/3yrB3mk
1 bytes 在 GORI DUNK Youtube 的最佳解答
オクト攻略まとめ:https://www.youtube.com/playlist?list=PLAD2v5Am1ng_o3xueo-_RKBIQp3T3RjIQ
オクト ラスボス+エンディング:https://youtu.be/9sOWmiENYjc
(ネタバレ注意)オクト 真のラスボス:https://youtu.be/zFXUduD0XvE
オクト・エキスパンションまとめ:https://www.youtube.com/playlist?list=PLAD2v5Am1ng_1hW-hWqH6uc9ZRvLN_17T
00:00 蛸壺や はかなき夢を 夏の月
00:19 車内BGM ver.1
01:27 キミの姿を 思い出そう
02:04 車内BGM ver.2
03:19
05:21 デンワのテーマ
06:46 深海メトロ
07:17 車内BGM ver.3
09:01 駅のホーム
09:58 (Vocal off)
11:47 ステージクリア
11:56 車内BGM ver.4
12:34 テンタクルズのテーマ
12:55 ヒメラップ vs アタリメラップ
13:20 テンタクルズのテーマ②
14:11 車内BGM ver.5(シオカラ節 ブレンド)
16:05 フルスロットル・テンタクル(デモ版)
16:47 お前らひざまずけ『※$%@れたヤツは ※$@して寝ろ』
17:27 8ボール ミッション
19:31 時間制限 ミッション
21:22 ギミック ミッション
22:55 ジェットパック
25:02 ターゲット ミッション
26:58 スイッチ ミッション
28:22 潜入 ミッション(Vocal ON)
30:08 護衛 ミッション
32:13 タイミング系 ミッション
34:33 頭脳系ミッション
36:12 制約ミッション
38:09 乗り継ぎミッション
40:37 アレ
41:09 自撮りのテーマ
41:21 デンワのテーマ(short .ver)
41:45 約束の地
42:52 3号登場
43:03 ナスティ・マジェスティ/ テンタクルズ
45:26 ミッドナイト・ボルテージ / テンタクルズ
47:42 Splattack!(Octo)/ Dedf1sh
49:43 地上
50:41 テンタクルズ合流
52:38 『とれとれぴちぴち ユー&アイ 当たってくだけて大作戦』
54:12 巨大な敵からナワバリを守れ!
54:55 フライ・オクト・フライ
~フルスロットル・テンタクル(Octo)/ テンタクルズ
58:01 フルパワーのセンパイキャノン👈ここすき
59:15 エンディング
59:38 フレンド・フロム・ファラウェイ(はるかかなたのおともだち)
1 bytes 在 GORI DUNK Youtube 的精選貼文
#スプラトゥーン #スプラトゥーン2 #オクトエキスパンション #OctoExpansion
オクト攻略まとめ:https://www.youtube.com/playlist?list=PLAD2v5Am1ng_o3xueo-_RKBIQp3T3RjIQ
オクト ラスボス+エンディング:https://youtu.be/9sOWmiENYjc
(ネタバレ注意)オクト 真のラスボス:https://youtu.be/zFXUduD0XvE
オクト・エキスパンションまとめ:https://www.youtube.com/playlist?list=PLAD2v5Am1ng_1hW-hWqH6uc9ZRvLN_17T
00:00 蛸壺や はかなき夢を 夏の月
00:19 車内BGM ver.1
01:27 キミの姿を 思い出そう
02:04 車内BGM ver.2
03:19
05:21 デンワのテーマ
06:46 深海メトロ
07:17 車内BGM ver.3
09:01 駅のホーム
09:58 (Vocal off)
11:47 ステージクリア
11:56 車内BGM ver.4
12:34 テンタクルズのテーマ
12:55 ヒメラップ vs アタリメラップ
13:20 テンタクルズのテーマ②
14:11 車内BGM ver.5(シオカラ節 ブレンド)
16:05 フルスロットル・テンタクル(デモ版)
16:47 お前らひざまずけ『※$%@れたヤツは ※$@して寝ろ』
17:27 8ボール ミッション
19:31 時間制限 ミッション
21:22 ギミック ミッション
22:55 ジェットパック
25:02 ターゲット ミッション
26:58 スイッチ ミッション
28:22 潜入 ミッション(Vocal ON)
30:08 護衛 ミッション
32:13 タイミング系 ミッション
34:33 頭脳系ミッション
36:12 制約ミッション
38:09 乗り継ぎミッション
40:37 アレ
41:09 自撮りのテーマ
41:21 デンワのテーマ(short .ver)
41:45 約束の地
42:52 3号登場
43:03 ナスティ・マジェスティ/ テンタクルズ
45:26 ミッドナイト・ボルテージ / テンタクルズ
47:42 Splattack!(Octo)/ Dedf1sh
49:43 地上
50:41 テンタクルズ合流
52:38 『とれとれぴちぴち ユー&アイ 当たってくだけて大作戦』
54:12 巨大な敵からナワバリを守れ!
54:55 フライ・オクト・フライ
~フルスロットル・テンタクル(Octo)/ テンタクルズ
58:01 フルパワーのセンパイキャノン👈ここすき
59:15 エンディング
59:38 フレンド・フロム・ファラウェイ(はるかかなたのおともだち)
1 bytes 在 むむーむむー ちろむむむ Youtube 的精選貼文
おそろしい
【チロムのtwitter】
https://twitter.com/chiromu_yukkuri
【チロムの再生リスト】
パズドラのランキングダンジョン https://www.youtube.com/playlist?list=PLFTBsxPfk5axd1q7XDR1eQp6Ul396EObw
スマブラ https://www.youtube.com/playlist?list=PLFTBsxPfk5ax6ywL3krslqrq_-QsX0h84
茶番 https://www.youtube.com/playlist?list=PLFTBsxPfk5axJLNlqX8JOQFrO9MskMv2G
○○の恐ろしさ https://www.youtube.com/playlist?list=PLFTBsxPfk5ayZslI4-iTRSMKF8nqsTAv1
荒野行動実況 https://www.youtube.com/playlist?list=PLFTBsxPfk5axznTxFukisNplynnxKezJg
【音源提供】
魔王魂 http://maoudamashii.jokersounds.com/
効果音ラボ http://soundeffect-lab.info/
ポケットサウンド http://pocket-se.info/
Music-note.jp http://www.music-note.jp/index.html
無料効果音で遊ぼう! http://taira-komori.jpn.org/welcome.html
効果音辞典 https://sounddictionary.info/battle-1/
MusMus http://musmus.main.jp/chiptune.html
甘茶の音楽工房 http://amachamusic.chagasi.com/index.html
【画像提供】
ニコニ・コモンズ https://commons.nicovideo.jp/
イラストAC https://www.ac-illust.com/
いらすとや http://www.irasutoya.com/
※動画によって使われていない場合もあります
#ゆっくり
#ゆっくり茶番
#バイト
1 bytes 在 API stopped working with struct.error: unpack requires a buffer ... 的推薦與評價
error: unpack requires a buffer of 1 bytes #27. Open. alekthebear opened this issue on Jun ... ... <看更多>
1 bytes 在 Values less than -1 bytes are not supported querying nodes 的推薦與評價
... <看更多>