【升級過後的 ETH2.0 代表著什麼?】
除了今年備受矚目的以太坊柏林升級以及 EIP-1559 提案之外,以太坊 2.0 的重大升級也是許多人一直以來引頸期盼的重點👀
究竟 ETH 2.0 升級代表著什麼呢?整體區塊鏈產業又有可能會有什麼樣的影響,讓幣研來告訴你
#cryptonewbie #cryptoanalysis #eth2.0
🟡 以太坊2.0的改進主要有以下重點
- 以太坊支援 Solidity 以外的程式語言做開發
- 透過分片技術大大提高交易速率
- 共識機制由工作量證明(PoW 轉為 PoS)
今年以太坊的柏林、倫敦以及預計十月分登場的上海硬分叉都是為了讓以太坊能夠進入2.0階段的預備措施,最終以太坊會進入代號「寧靜」(Serenity)的發展階段
以太坊2.0 的升級過程不是慢慢推進更新而成的,而是先把以太坊 2.0 的信標鏈建構好,再將以太坊1.0、2.0 合併而成
🟡 以太坊從 1.0 升級到 2.0 主要會經歷三大階段:
1. 信標鏈主網(Beacon Chain):於 2020 年 12 月 1 日上線
2. 對接(The merge):2021 年底
3. 分片鏈(Shard chains)2022 年
🟡 以太坊2.0 能夠解決什麼問題
- 進一步解決先前規模性的問題(scalability),提升整體運作效能
- 降低礦工門檻,只要質押32 ETH 就能夠成為驗證節點,使整體區塊鏈網路更加去中心化
- 同時提升安全性,因為驗證者違規將有可能失去抵押的以太幣
目前抵押於2.0智能合約的以太幣超過750萬枚,佔以太幣總流通量6.5%以上
雖然我們不能確定以太坊2.0 什麼時候才能升級完成,除了技術開發之外,也需要透過經濟手段迫使礦工逐漸轉往 PoS 模式,但是不管是在鏈上的運作效率以及整體的通縮手段上都有非常大的轉變,日後的推進必然也會是整體幣圈的焦點
-------------------------------------------------------------
🥳Avalanche 香港交流群上線了!🥳
想知道AVAX最新空投幣、AMA等市場動態及最新優惠?立刻加入 Avalanche 香港交流群,與一眾用家互相討論見解,Desmond也會不定期在這裡優先分享DeFi生態的項目分析,不想錯過的話就按這裡加入
👉🏻https://bit.ly/3hksa7z
【Bybit 獨家開戶優惠🎉】
新用戶幣研獨家優惠,只要充值1000USDT即可獲取高達125 USD體驗金(優惠碼【21515】)
註冊及入金教學👉🏻:https://bit.ly/3DPMY0e
「每日幣研|幣市分析&最新優惠」TG Channel 🔍
想了解更多加密貨幣最新市場資訊及優惠的話,歡迎追蹤我們「每日幣研|幣市分析&最新優惠」TG Channel,我們會在群內發佈幣圈第一手消息及分享投資小技巧!馬上加入頻道和我們一起發掘幣圈隱藏商機吧!
立即加入頻道👉🏻:https://bit.ly/2YzVK2p
「solidity教學」的推薦目錄:
- 關於solidity教學 在 每日幣研 Facebook 的精選貼文
- 關於solidity教學 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於solidity教學 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於solidity教學 在 [閒聊] 跟著CryptoZombies 學智能合約Solidity - 看板DigiCurrency 的評價
- 關於solidity教學 在 【Ethereum 智能合約開發筆記】:編譯和部署合約的第一種姿勢 的評價
- 關於solidity教學 在 [專欄新文章] Web3 Java 開發:用... - Taipei Ethereum Meetup 的評價
- 關於solidity教學 在 零基礎邁向區塊鏈工程師:Solidity 智能合約- 線上教學課程 的評價
- 關於solidity教學 在 Polygon (Matic) 從零開始發行自己的虛擬貨幣(Token) 的評價
solidity教學 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] Gas Efficient Card Drawing in Solidity
✍️ Ping Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Assign random numbers as the index of newly minted NFTs
Scenario
The fun of generative art NFT projects depends on randomness. The industry standard is “blind box”, where both the images’ serial number and the NFTs’ index are predetermined but will be shifted randomly when the selling period ends. (They call it “reveal”) This approach effectively solves the randomness issue. However, it also requires buyers to wait until the campaign terminates. What if buyers want to know the exact card right away? We’ll need a reliable onchain card drawing solution.
The creator of Astrogator🐊 isn’t a fan of blind boxes; instead, it thinks unpacking cards right after purchase is more interesting.
Spec
When initializing this NFT contract, the creator will determine the total supply of it. And there will be an iterable function that is randomly picking a number from the remaining pool. The number must be in range and must not collide with any existing ones.
Our top priority is accessibility/gas efficiency. Given that gas cost on Ethereum is damn high nowadays, we need an elegant algorithm to control gas expanse at an acceptable range.
Achieving robust randomness isn’t the primary goal here. We assume there’s no strong financial incentive to cheat, so the RNG isn’t specified. Implementers can bring their own source of randomness that they think is good enough.
Implementation
Overview
The implementation is pretty short and straightforward. Imagine there’s an array that contains all remaining(unsold) cards. When drawIndex() is called, it generates a (uniform) random seed to draw a card from the array, shortens the array, and returns the selected card.
Algorithm
Drawing X cards from a deck with the same X amount of cards is equal to shuffling the deck and dealing them sequentially. It’s not a surprise that our algorithm is similar to random shuffling, and the only difference is turning that classic algo into an interactive version.
A typical random shuffle looks like this: for an array with N elements, you randomly pick a number i in (0,N), swap array[0] and array[i], then choose another number i in (1,N), swap array[1] and array[i], and so on. Eventually, you’ll get a mathematically random array in O(N) time.
So, the concept of our random card dealing is the same. When a user mints a new card, the smart contract picks a number in the array as NFT index, then grabs a number from the tail to fill the vacancy, in order to keep the array continuous.
Tweak
Furthermore, as long as the space of the NFT index is known, we don’t need to declare/initialize an array(which is super gas-intensive). Instead, assume there’s such an array that the n-th element is n, we don’t actually initialize it (so it is an array only contains “0”) until the rule is broken.
For the convenience of explanation, let’s call that mapping cache. If cache[i] is empty, it should be interpreted as i instead of 0. On the other hand, when a number is chosen and used, we’ll need to fill it up with another unused number. An intuitive method is to pick a number from the end of the array, since the length of the array is going to decrease by 1.
By doing so, the gas cost in the worst-case scenario is bound to be constant.
Performance and limitation
Comparing with the normal ascending index NFT minting, our random NFT implementation requires two extra SSTORE and one extra SLOAD, which cost 12600 ~ 27600 (5000+20000+2600) excess gas per token minted.
Theoretically, any instantly generated onchain random number is vulnerable. We can restrict contract interaction to mitigate risk. The mitigation is far from perfect, but it is the tradeoff that we have to accept.
ping.eth
Gas Efficient Card Drawing in Solidity was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
solidity教學 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
solidity教學 在 【Ethereum 智能合約開發筆記】:編譯和部署合約的第一種姿勢 的推薦與評價
教練,我”只”想學Solidity 這篇也是用Remix 和MetaMask 部署合約到測試網路,已經瞭解這篇應該可以直接end。本篇是較詳細描述使用Remix 的步驟及使用上可能碰到的問題 ... ... <看更多>
solidity教學 在 [專欄新文章] Web3 Java 開發:用... - Taipei Ethereum Meetup 的推薦與評價
web3j solidity generate ExampleContract.bin ExampleContract.abi -p ... code 主要是參考官方規格書、一超優質Youtube Solidity 教學系列,以及為了debug 找了許多 ... ... <看更多>
solidity教學 在 [閒聊] 跟著CryptoZombies 學智能合約Solidity - 看板DigiCurrency 的推薦與評價
最近發現 CryptoZombies 這個互動式教學網站,手把手教你寫智能合約。網站有提供簡體中文,登入後就能同步進度,且不須裝任何軟體。
https://cryptozombies.io/
每個課程又分成多個章節,每個章節不超過5行程式碼,反而是解釋以及出題佔了大部分,很適合平日午休玩個一兩章。
就像玩遊戲要一關一關破,有時還會卡關去偷看答案,解完頗有成就感。
對於有任意程式語言基礎的應該沒甚麼太大的問題,完全新手可能完成第一個課程之後就會開始卡。
另外這個教學是 Loom Network 的產品之一,你可以到下面的網站點選 Products 看其他產品。
https://loomx.io/
他們網站找不到白皮書,因為他們認為實際產品比較重要!
Loom Network 是 Ethereum 的側鏈,目標是想成為 Ethereum 上的 EOS ,有興趣的可以看一下他們的 SDK 。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.118.103
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1535459552.A.2C7.html
... <看更多>