[爆卦]Opcode operand是什麼?優點缺點精華區懶人包

雖然這篇Opcode operand鄉民發文沒有被收入到精華區:在Opcode operand這個話題中,我們另外找到其它相關的精選爆讚文章

在 opcode產品中有8篇Facebook貼文,粉絲數超過3,460的網紅Taipei Ethereum Meetup,也在其Facebook貼文中提到, 📜 [專欄新文章] EIP-1014 產生可控的智能合約地址 ✍️ 飛天的狸貓 📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium 先前在 Solidity Taiwan 讀書會 群中看到一個...

 同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...

  • opcode 在 Taipei Ethereum Meetup Facebook 的最讚貼文

    2021-04-24 00:57:11
    有 9 人按讚

    📜 [專欄新文章] EIP-1014 產生可控的智能合約地址

    ✍️ 飛天的狸貓

    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    先前在 Solidity Taiwan 讀書會 群中看到一個討論,裡面應該是一個套利機器人,打開他的合約會發現 Contract 標記著 Reinit,大致上意思是在相同地址上曾經 Self Destruct 後又佈署新的 Byte Code。這其中就用到了 Vitalik 提出的 EIP-1014,來達成在固定的地址上佈署。

    合約地址是怎麼產生的

    如果對於以太坊智能合約佈署不陌生,應該會知道合約地址是依據佈署者的地址和他的 Nonce 來決定的。假如地址 0xa1 在 Nonce 為 1 的交易中建立了合約,合約地址是 0x01,則當他到了其他鏈而再次使用 Nonce 1 建立合約時,就也會得到相同的合約地址 0x01。

    而在以太坊中,Nonce 是嚴格遞增的,這主要是為了避免雙花攻擊,因此很顯然的,再次佈署到同一個地址是不可行的。而在 EIP-1014 以前,在合約中建立的子合約也是透過這個方式達成。

    EIP-1014 做了什麼

    前面說到合約中可以建立子合約,通常使用的指令是 create,這個指令便會根據主合約的地址與合約本身的 Nonce 來算出子合約的地址。在 EIP-1014 中,提出了另外一個指令 create2,接受的參數是一個 salt 和 init code(建立合約的 Byte Code)。這個指令會透過 keccak256 雜湊,混和參數和主合約的地址來算出子合約地址。

    可以留意到,salt 和 init code 都是可控的,主合約地址是固定的,因此就讓子合約地址是可控制的(當然不是說想要產生在哪裡就在哪裡)。在 create 中,Nonce 是漸次增加的,所以無法重複,並且若要控制到特定 Nonce 需要發起多筆交易。

    但是當再次佈署到相同地址時,EIP-684 說明若該地址 Nonce 不為零或者存在 Byte Code 時將直接拋出錯誤,因此若要佈署到同一個位置,就必須利用 Self Destruct 來抹去 Nonce 和 Byte Code。

    為什麼要 EIP-1014

    EIP-1014 在起初是基於 State Channel 的需求,主要是因為某些狀況下可能還沒有要和合約做互動,但需要先知道合約地址。因此只要是需要先知道地址,但沒有要立即使用的合約就十分適合通過這個指令來建立。

    例如對於交易所來說,替所有要入金的人建立私鑰有管理上的問題,若透過智能合約則相對有彈性,但卻不是所有申請地址的人都真的會入金,此時就適合利用這個指令先行取得地址,當真的有入金時再佈署合約。

    如何使用 EIP-1014

    除了直接寫 Opcode 以外,Solidity 0.6.2 加入了利用 create2 建立合約的語法。使用方式是 new Contract{salt: someByte}(...args),其中 new Contract(...args) 就是傳統的佈署方式,而 someByte 是一個 bytes32。

    資安疑慮

    回到開頭,Etherscan 之所以會標記 Reinit 則是因為可能有資安的疑慮。回顧地址產生的過程,兩個參數都沒有限制條件,因此碰撞的可能也是存在的。如果不肖人士先佈署一個正常的合約,接著通過 Self Destruct 刪除後再佈署假的合約,就可能讓沒注意到的使用者上當。

    但或許因為碰撞的機會太低,所以並不太構成問題。而若真的要從使用者的角度防範,可以通過檢查合約有沒有 Self Destruct、Delegate Call、Call Code 指令(如果沒有的話無法刪除合約,再次 create2 時就會被 revert)來避免。

    2021/4/23 補充

    後來看了幾個討論,也想了一下,資安的疑慮應該遠不只上面這麼簡單。
    例如一個宣稱鎖定 ERC-20 代幣的合約,雖然使用者可以檢閱程式碼,並確認其中解鎖 function unlock() 必須在 uint256 block 之後才能執行,並且 block 是無法變更的,但攻擊者可能透過上述方法來消除 block 狀態,進而提前執行 unlock。

    參考資料

    https://consensys.net/diligence/blog/2019/02/smart-contract-security-newsletter-16-create2-faq/

    https://www.chainnews.com/zh-hant/articles/803272341363.htm

    如有錯誤敬請指正,原文載於:https://limaois.me/archives/265

    EIP-1014 產生可控的智能合約地址 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • opcode 在 Taipei Ethereum Meetup Facebook 的最佳解答

    2021-02-15 19:57:23
    有 8 人按讚

    📜 [專欄新文章] EIP2929, EIP2930 簡介
    ✍️ Anton Cheng
    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    Opcode 加油Proposal,會不會讓以太坊變更貴呢

    昨天在同事的推薦下發現了這個YouTube系列:Peep an EIP,也聽了Vitalik和Martin介紹EIP2929 + 2930的這一期。這兩個EIP都已經被列入下一次的硬分岔(Berlin Hardfork),所以我就來寫個學習筆記。先打個預防針,本人對EVM可以說是非常不熟,但也希望藉著這個機會逼自己學習,如果有錯誤的話也希望懂的更多的各路大神可以不吝賜教。

    Berlin without hardfork. (By Claudio Schwarz on Unsplash)

    EIP2929: Gas cost increases for state access opcodes

    乍看之下這是一個極為恐怖的Proposal。在Gas已經高到爆炸的2021年,理論上不應該再通過這種「加油」類的方案。不過不用緊張,其實這個EIP真正改變的是第一次access的價格,如果一筆交易內要執行一樣Opcode動作輛次,那麼gas cost 將降低為100。

    Increases gas cost for SLOAD, *CALL, BALANCE, EXT* and SELFEDESTRUCT when used for the first time in a transaction.

    大家都知道,合約最終會被Compile成一堆Opcode,這些Opcode也是用來計算最終交易手續費的依據:理論上越是花時間的的Opcode,應該要收越高的手續費。

    但是一直以來,state access opcode 太便宜都是一個已知的問題:在2016年的上海DOS攻擊中,其中幾個攻擊的手法就是透過惡意交易大量讀取帳戶資訊、大量的創造合約再銷毀,或是不斷用 EXTCODESIZE 來讀合約大小等等,讓Client必須花大量的IO資源處理交易(需要讀寫disk的動作特別慢),最終使Client程式Crash或是延長出塊時間。儘管大部分的弱點已經透過EIP150中大量提升gas cost獲得改善(還有其後的EIP1884),但在EIP2929中,也引用的這篇Paper的數據:現在replay所有以太坊上的交易,當時那些惡意交易中的worst case還會需要~80秒才能完成。這跟以太坊所定義的13秒出塊時間有著很大的差距,也代表這個潛在的攻擊是可行的。

    透過增加這些opcode所需要的gas cost,可以降低每個區塊最大可能的讀取數。以下是偷抄Vitalik PPT 的數據:(12,500,000 為gas limit上限)

    Pre-EIP 2929:

    BALANCE spam: 12,500,000 / (400 cost + 320 address size + 50 boilerplate) = 16,233 accesses per block

    CALL spam: 12,500,000 / (700 + 320 + 50) = 11,682 accesses per block

    SLOAD spam: 12,500,000 gas / (800 + 25 boilerplate) = 15,151 accesses per block (but of a smaller tree)

    Post-EIP 2929:

    BALANCE spam: 12,500,000 / (2,600 + 320 + 50) = 4,280 accesses per block

    CALL spam: 12,500,000 / (2,600 + 320 + 50) = 4,280 accesses per block

    SLOAD spam: 12,500,000 / (2,100 + 25) = 5,882 accesses per block

    說實在的這個數據的解釋也很廢話,就是把Opcode變得用貴,能Spam的數量越少。平均來說Gas cost 變高3倍,所以之前worst case的80秒執行時間可以被下降到大概 ~27秒。

    SSTORE changes

    在實作層,EVM會維繫一個本筆交易讀取過所有交易的 Set。每次有尚未讀取過的slot時,就會先收取一筆 CLOD_SLOAD_COST (2100) ,然後把這個slot加入這個set中,下次讀寫就會比較便宜。

    對於已經讀取過的Slot,再次寫入的Opcode SSTORE 之gas cost為會降低為

    5000 — COLD_SLOAD_COST (2100) = 2900

    簡單的說,單純只操作一次 SSTORE 的總gas 會維持一樣在 5000 。但如果這個slot是之前有讀過的,則寫入的gas cost就會降低。近一步來說,一個 x += 100 ,其實會變得更便宜:

    Pre-EIP-2929: 800 SLOAD + 5000 SSTORE = 5800
    Post-EIP-2929: 2100 SLOAD + 2900 warm SSTORE = 5000

    其他Side effects

    這個改動除了降低了最高能夠spam的次數以外,也降低了以太坊想要做到stateless client,理論上最大的witness 大小。其實這裡的原理跟前面很類似,下圖的表格比較的是目前使用hexary tree所需要的witness大小:若12.5M的區塊全部塞滿該Opcode的witness,理論上最大會佔多少空間。在EIP2929之後由於gas cost增加,就壓縮了最大可能的witness size.

    這裡單純只比較增加gas cost後,對於max witness size的影響。影片中有提到其他許多方法旨在減少Witness bytes,包括使用binary tree而不是hexary tree,以及用Code Merklization等等。這些其他方法也能夠降低最後的Max Witness size,但跟這個EIP沒有直接相關。不過可以注意的一點是,這些其他在witness size上面的優化跟 gas cost 所帶來的優化的效果是可以相乘的,例如 SLOAD,更改gas price已經能夠讓max size 縮小2.6倍,若是改用Binary tree可以將 Witness bytes降低到 288 bytes,就會是再3~倍的優化。

    對用戶的影響

    依照Martin Swende 給出的數據,這個EIP對於一般交易的影響僅有提高0.3~0.4%。理由很簡單,雖然第一次access storage變貴了,但是後面幾次讀寫就會變得便宜。大部分應用的程式邏輯都是類似的幾個變數進行讀寫,因此可能有不少的動作反而會變得更便宜。一個最簡單的例子就是ERC20 Transfer,兩個餘額的 +=和 -= 都會變便宜,所以總共的花費也是變便宜的。

    這其中也會對於Solidity的開發pattern有著一定程度的影響,我目前想到的影響可能有兩個:

    由於多次的storage access變便宜,永遠cache state variables不再是一個最佳策略。以前我們會盡量想辦法減少寫入state storage的次數,現在可能會基於coding style考量減少一些的memory cache。

    之前寫合約都會盡量避免external call,甚至會寫一些一次把所有 variable都回傳回來的笨函示,來避免多次的external calls。這有一部分原因是因為每次external call都會需要使用到 EXTCODESIZE 這個Opcode所以很貴。但如果 EXT 系列的Opcode也變得越call越便宜,那麼這個一次全部call 回來cache 住的pattern也可能改變。

    以上兩個想法都還沒有經過實證,如果之後看到更有證據的分析的話,也會來這裡分享。

    EIP2930: Optional access lists

    EIP2929可能會影響一些鏈上的合約,因為有些合約有hardcode external call的gas 上限。對於這方面的問題,EIP2930提出一個新的交易類型,讓交易中多帶一個access list,即所有這筆交易即將讀寫的storage slot,並且先幫忙付掉第一次讀寫的gas,而真正交易讀寫該storage時,只會被要求付100 gas。

    這不但可以避免這次EIP2929帶來的副作用,也可以被使用在其他因為gas price 改變的硬分岔升級而壞掉的合約,例如在EIP1184 增加 SLOAD gas price 時影響到的 Aragon 和Kyber 等等。儘管當時升級前各大專案都有幫助用戶提出migration 方案,但如果有人曾經卡錢在裡面,也可以Follow一下這次柏林Hardfork。

    小結

    新的一年就用一篇簡單的文章來開頭。最近發現自己以前的學習習慣有點亂無章法,所以新年整理了reading list,逼自己做筆記,順便發想一些想要寫的主題。今年的期許就是學更多Ethereum底層一點的知識,當然還有上層一點Defi的知識。也歡迎大家分享一下自己都是怎麼follow這麼多東西的><

    EIP2929, EIP2930 簡介 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • opcode 在 Taipei Ethereum Meetup Facebook 的最佳貼文

    2019-11-22 17:14:06
    有 7 人按讚

    📜 [專欄新文章] TEM 區塊鏈基礎教育第三階段 — 跨出工程師只會寫 Code 的既有框架
    ✍️ Phini Yang
    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    TEM 區塊鏈基礎教育第三階段 — 跨出工程師只會寫 Code 的既有框架

    本課程著重在進入區塊鏈產業所需具備的基礎知識。

    區塊鏈技術是橫跨多領域所組成,並又接著在各領域知識的基礎上創新。從網路結構的外觀來看,系統以眾多節點以點對點架構組成,相異於主流日常生活使用網路服務的主從式架構。節點間對資料取得共識的機制也須追溯到分散式系統的研究。

    在以太坊以來,客製化虛擬機以進行運算也成顯學,這塊又屬於編譯器的領域知識。不論在共識層或應用層,系統倚賴密碼學的工具。最後利用區塊鏈簿記上的資產進行獎勵或懲罰來讓系統參與者作出行動,需要經濟學上的工具。

    即使在五年之前進入區塊鏈圈,要能夠一次把這所有的領域接觸過也非容易。這次課程取得在各自領域專精的講者,把每個領域重要的概念提過,並點出與區塊鏈關聯的重點。

    目標並非讓學習者能夠完全掌握所有的領域,而是

    降低日後自行學習的障礙,知道可以從哪裡開始看

    知道哪些領域有學習者自己領域能夠切入合作的缺口

    知道各種領域的瓶頸及前沿研究是什麼。

    課程的安排除了前述眾領域的介紹,最後有一門「客戶端原始碼分析」,全節點便是整個抽象共識機制的具體軟體實作,有了前面的基礎,看到程式碼會比較知道背後設計的原因。

    為什麼從以太坊開始學?

    以太坊鏈上的 Dapp ,不論是在數量或是應用的範圍上,皆遙遙領先其他主鏈。各大主流區塊鏈應用的衍生,也是以以太坊為基礎發展而成。 以太坊目前仍是區塊鏈中最具開源文化的生態系之一,技術支援也是所有公鏈中最完整的,有著最豐富的研究者社群與概念創新。

    課程時數與費用

    課程將分成三階段,每階段授課 12 小時,形式包含講課與實作。
    每一階段 12 小時收費 $4,800 元,早鳥票 $3,600,三人團報價 $3,000/1 人。
    課程人數最多 30 人為主,最低開班人數 10 人。

    🎁 立馬去購票 🎁

    https://www.accupass.com/event/1911150750032715966110

    ❓有任何問題,請聯繫 Phini Yang (Mail)

    以下為每堂課程詳細介紹,以供學員理解:

    1. 經濟學原理 — 賽局理論/供需 By 梁智程, 以太坊基金會

    為什麼要學習這項課程?

    區塊鏈無論是底層協議,或是去中心化應用,系統經常需要設計誘因,並假設系統的多數參與者會依據誘因,做出對自己最有利的行動,利用那樣的行動維持系統運作。

    要討論、分析、設計誘因,經濟學上已有累積已久的語言與工具。因此我們常會在區塊鏈的文章中看到從古典的供給與需求[1]、共有財的悲劇[2] 、或是較現代的賽局理論、機制設計、拍賣等術語。

    這些觀念可能對無經濟學背景的開發者較難掌握。我會試圖在有限時間之內,介紹主要常用的經濟學概念,並點出有運用到這些概念的相關區塊鏈文獻。我們也會介紹到因為區塊鏈特殊的環境,所產生新的機制設計的挑戰以及機會。

    這項技術可運用在哪?

    要設計區塊鏈相關系統,通常需要理解經濟學相關知識。

    課程大綱

    1⃣ 經濟學原理
    - 供給與需求
    - 外部性與公共財
    - 區塊鏈範例:區塊鏈運算資源

    2⃣ 賽局
    基本定義:玩家、報酬、策略、均衡
    非合作賽局 vs 合作賽局

    3⃣ 機制設計
    - VCG 最佳機制設計
    - 區塊鏈範例
    第二價拍賣的手續費 [3]
    賄賂攻擊 [4]、反機制 [5] 與全知識證明 [6]
    - 激進市場範例
    平方投票

    2. 虛擬機 EVM By 戴宏穎 (海帶), Second State

    為什麼要學習這項課程?

    虛擬機就像是肝臟,雖然是人體中沈默的器官,但沒有這個元件,整個系統就會失去作用。

    對於使用者而言,不論是在 Ethereum 上轉 Ether 、部署合約、或者呼叫合約,基本上都不會注意到有虛擬機的存在。可這個無感的存在卻是合約能夠執行的核心關鍵。如果今天沒有虛擬機,那 Ethereum 就無法撰寫 smart contract 、無法執行 DApp (迷戀貓、去中心化交易所等應用)。

    這項技術可運用在哪?

    除了是設計有執行合約能力的區塊鏈系統中必備的元件外,理解虛擬機也能幫助我們在裡頭進行效能的最佳化與增加新的特殊功能(產生隨機數、進行 hash 運算等)。

    課程大綱

    1⃣ 深入淺出 EVM
    - 虛擬機概論
    - EVM 核心元件
    - 理解 EVM 內部的運作過程

    2⃣ 實作
    - 增加一個新的 opcode magic
    - 增加產生隨機數的 opcode rand (EVM 的隨機該怎麼做)

    3⃣ Eth 2.0
    - Ewasm Virtual Machine

    3. 共識機制—PBFT/PoS/Casper FFG By 邱駿, UnityChain

    為什麼要學習這項課程?

    PBFT(Practical Byzantine Fault Tolerance)誕生至今已逾 20 年。它的發明源於分散式系統中一個著名的共識難題:拜占庭將軍問題(Byzantine Generals Problem)。PBFT 並不是一個針對全開放環境的共識協定 — 事實上在區塊鏈出現之前,並未出現任何一個針對開放環境的拜占庭容錯共識。區塊鏈的橫空出世啟發了研究人員再度審視 PBFT 這個經典。

    PBFT 具有一些與區塊鏈截然不同的特性,這提供了改進區塊鏈一些有用的思路,例如以PBFT為基礎建立的權益證明(Proof-of-stake)模型。儘管在區塊鏈蓬勃發展的今日,PBFT這個經典仍然蘊含許多值得研究人員反覆推敲的巧思,其後續也衍生出非常多新協定,例如 Tendermint / HotStuff / Harmony FBFT 等等。

    以太坊對權益證明(Proof-of-Stake, PoS)的研究最早可追朔至 2014 年。從此之後,以太坊研究員們便一直朝「實現基於 PoS 的共識協定」此一目標前進。PoS 共識的設計是一個跨領域且相當複雜的問題,其包含計算機科學 / 經濟學 / 密碼學等面向。以太坊擁有區塊鏈生態系中最跨領域的團隊,對 PoS 的研究可以說是相當透徹。

    課程大綱

    1⃣ 什麼是共識?
    - 什麼是狀態機?
    - 為什麼需要共識?
    - 為什麼共識這麼難?
    - 正確的共識:安全性(Safety)與活躍性(Liveness)
    - 共識一定可以達成嗎?

    2⃣ PBFT 共識協定
    - 協定概論
    - 安全性與活躍性分析
    - 特性分析

    3⃣ PoS 共識協定
    - 什麼是砍押金/砍押金條件?
    - PBFT 最小砍押金條件
    - 為什麼 PoS 這麼難設計?

    4⃣ Casper FFG
    - 協定
    - 特性分析
    - 改進 PBFT
    - 與 Eth 2.0 整合

    4. 密碼學原理 — 橢圓曲線/零知識證明 By 吳偉誠 (Kimi), UnityChain

    為什麼要學習這項課程?

    隱私在現今世界越來越受重視,但是區塊鏈上任何的交易都是公開透明的,要如何在使用區塊鏈的同時又享有隱私,零知識證明是目前最好的解決方案。

    這項技術可運用在哪?

    零知識證明除了使用在隱私外,也能有效率的驗證資料,進而提高交易速度。

    課程大綱

    1⃣ 橢圓曲線簡介

    2⃣ Shamir’s Secret Sharing 介紹與應用

    3⃣ 零知識證明
    - 零知識證明簡介
    - zk-SNARKs
    - 零知識技術的應用與比較

    4⃣ 手把手實作
    - circom 語法及指令

    5. 點對點 p2p 系統 By 賈脈瑄, 以太坊基金會

    為什麼要學習這項課程?

    區塊鏈本身基於點對點(Peer-to-Peer, 簡稱 P2P)網路。大家都知道共識層的重要,但常常沒意識到網路層的安全也很重要。

    P2P 網路的術語及概念本身也很分散,經常散落在網路各處難以系統化的學習。不同的使用情景造就了不同的設計,近年區塊鏈興起,也帶起了和區塊鏈有關的 P2P 系統研究。這門課會帶過 P2P 系統中常用及重要的設計與理由,並介紹區塊鏈系統們怎麼應用這項技術。

    這項技術可運用在哪?

    實作去中心化網路,譬如區塊鏈網路。不同區塊鏈可以設計特化且有效率的 P2P network。

    課程大綱

    1⃣ P2P networking 基礎
    - 歷史背景
    - Overlay
    - Requirements for p2p networks
    - Unstructured networks
    - Structured networks: DHT
    - Gossiping

    2⃣ 區塊鏈的 P2P networking
    - Difference from the classical p2p networks
    - Cases study
    ・Ethereum or Bitcoin
    ・Ethereum 2.0
    - Library: libp2p

    6. 客戶端(Geth)原始碼分析 By Miya Chen, AMIS

    為什麼要學習這項課程?

    Ethereum 擁有非常活躍的開發生態系,以 go-ethereum 為例,透過分析原始碼更加了解 Ethereum 協議運作過程。

    這項技術可運用在哪?

    根據自身需求客製化模組邏輯,例如:修改 miner 打包 transaction 的順序。

    新增 RPC API,例如:subscribe API。

    記錄額外的 blockchain 資料,例如:每一個 block 其所有 account balance 和 storage 的差值。

    課程大綱

    1⃣ Geth 架構介紹

    2⃣ 理解 tx pool 運作過程

    3⃣ Event subscription 的實作

    4⃣ 手把手實作: 客製化 tx pool

    課程時數與費用

    課程將分成三階段,每階段授課 12 小時,形式包含講課與實作。
    每一階段 12 小時收費 $4,800 元,早鳥票 $3,600,三人團報價 $3,000/1 人。
    課程人數最多 30 人為主,最低開班人數 10 人。

    🎁 立馬去購票 🎁

    https://www.accupass.com/event/1911150750032715966110

    ❓有任何問題,請聯繫 Phini Yang (Mail)

    TEM 區塊鏈基礎教育第三階段 — 跨出工程師只會寫 Code 的既有框架 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • opcode 在 コバにゃんチャンネル Youtube 的最佳貼文

    2021-10-01 13:19:08

  • opcode 在 大象中醫 Youtube 的最讚貼文

    2021-10-01 13:10:45

  • opcode 在 大象中醫 Youtube 的最佳貼文

    2021-10-01 13:09:56