Solidity及EVM開發工具介紹
這篇文章將介紹Ethereum開發者的一些實用工具:Foundry除了測試之外的功能及VSCode的SolidityVisualDeveloper插件
Photoby?DanCristianP?dure??on?UnsplashFoundry
Foundry除了提供合約開發、測試和部署,其實還有許多其他實用的功能。
安裝Foundry
如果是Linux或macOS,先安裝foundryup,接著直接用?foundryup?指令就可以安裝。未來要升級foundry也只需要執行?foundryup?就好,非常簡單直覺。
//Installfoundryup
curl-Lhttps://foundry.paradigm.xyz|bash
//InstallorupdateFoundry
foundryup
詳細可以參考Foundrybook的Installation頁面。
AutoCompletion
Foundry安裝完后會有forge、cast及?anvil?三個指令,每個指令也都有許多option,這時有AutoCompletion會非常省事。例如產生bash用的AutoCompletionscript:
俄羅斯下議院通過數字盧布法案:金色財經報道,7月11日,俄羅斯下議院通過了數字盧布法案。現在該文件面臨參議院的確認,然后由總統簽署。該法案的最后一次修訂草案于6月底,規定了平臺、參與者和用戶的法律定義,以及CBDC生態系統的一般準則。
在當前框架下,俄羅斯中央銀行(CBR)將成為數字盧布基礎設施的主要運營商。它還對所有存儲的資產承擔責任。CBR稱,CBDC的主要目標是作為一種支付和轉賬方式。因此,其用戶將無法開設儲蓄賬戶。支付和轉賬對個人客戶是免費的,而企業客戶則需要支付0.3%的費用。[2023/7/12 10:50:18]
其他Shellscript的產生方式可以參考Foundrybook的ShellAutocompletion頁面。
anvil
其實就和Ganache及?hardhatnode?一樣:跑起一個節點。可以是全新的一個本地節點,也可以是背后連上ForkedState的節點。如果你平常都是習慣用來跑一個短暫的全新測試節點就直接下?anvil?即可。
如果你會想在一個ForkedState內實驗或測試的話,多加上?--fork-url?和?--fork-block-number?的option。另外可以留意?--compute-units-per-second?這個option,它會控制每秒請求的計算量,避免取ForkedState太頻繁導致遇到像是AlchemyRateLimit的問題。
CZ:CBDC不會對加密貨幣構成威脅:金色財經報道,加密貨幣交易所 Binance 的首席執行官CZ在里斯本舉行的網絡峰會上就CBDC及其在加密行業中的作用發表了講話。CZ表示,CBDC不會對他的公司或加密行業構成威脅。?CBDC將驗證區塊鏈技術并在那些對該技術有擔憂的人之間建立信任,政府采用區塊鏈將被視為一件好事。[2022/11/3 12:13:56]
更詳細的節點設置可以參考Foundrybook的AnvilReference頁面。
cast
cast是用來取鏈上資料非常好用的工具。因為有很多功能,這里我只會列出我常用及覺得實用的功能。
注:要讀取鏈的狀態記得要在foundry.toml檔里附上endpointurl或透過?--rpc-url$URL?的方式。
首先是抓取交易資訊:
casttx/receipt:抓取交易或receipt資訊castrun:印出一筆已被收入的交易的executiontrace或進行livedebug,為了得到準確的交易前狀態,預設會模擬執行同一區塊里在該筆交易前面所有的交易,但這可能很耗時,如果只想看交易執行過程且不需要最精準的執行結果的話,可以加上--quickoption,它會跳過前面交易的模擬,直接把該筆交易當作區塊的第一筆交易來執行注:castrun--debug的debug介面可能沒有那么好讀,如果不需要看到執行過程中的memory/stack/storage等細節時可以直接用ethtx.info或Tenderly,好讀很多。
馬斯克對銀行表示計劃在周五完成收購推特交易:10月26日消息,據外媒報道,知情人士透露,馬斯克周一在與融資行的視頻會議上承諾在周五結束前完成對推特(TWTR.N)的收購交易。消息人士稱,這些為交易提供總計130億美元債務融資的銀行已經完成了最終信貸協議的起草,目前已到了簽署文件階段。知情人士稱,在電話會議上,馬斯克還承諾交易完成后將幫助銀行向基金經理推介債券。摩根士丹利和推特對報道不予置評,而馬斯克的代表暫時未回復置評請求。(金十)[2022/10/26 16:38:44]
接著是從Etherscan抓取合約資訊:
castetherscan-source:會從Etherscan抓取指定地址的合約,可以加上-doption建立一個新的資料夾來放抓下來的合約們。記得用--etherscan-api-key?附上EtherscanAPIkey
注:如果想直接在瀏覽器開啟VSCode環境來瀏覽、編輯合約的話,可以使用deth.net。還可以透過書簽一鍵開啟,非常方便,請參考這則twitter。
Compound Treasury 推出面向機構的借貸服務:9月14日消息,Compound Treasury 推出面向機構的借貸服務,經過認證的機構可以選擇使用數字資產作為抵押品從 Compound Treasury 處獲得貸款。目前 Compound Treasury 支持機構抵押比特幣、以太坊以及部分 ERC-20 代幣作為抵押品,以 6% 的年化利率借出美元或 USDC。Compound 表示,借款將不設置固定的還款時間表,只要客戶保持超額抵押,就可以靈活地進行借貸和還款。該產品流動性將由 Compound Treasury 提供的機構級資管服務的客戶和 Compound 協議提供支持。[2022/9/14 13:30:07]
接著是encode/decodeABI的功能:
cast4b/4bd/4be:反查functionselector、calldata或是eventsignature。在手上只有一筆交易或一個event的rawdata時,可以透過這些工具來嘗試找出它要執行什么函式或emit了什么eventcastcalldata:用functionsignature及參數組出calldata。在為多簽檢查或組calldata的時候很方便注:因為functionselector只有4bytes,如果多個functionsignature都是同一個functionselector的話,則反查會回傳所有可能functionsignature
Aptos生態訂單簿協議Econia已上線v2版本:8月9日消息,Aptos生態訂單簿協議Econia已上線v2版本,引入獨立訂單簿兌換功能,要求用戶注冊特定市場的交易賬戶,選擇性地委托托管人、存入抵押品,并使用其抵押品在相應的市場進行交易。此外v2版本現在允許用戶直接根據賬面結算市場訂單,無需支付任何費用。(Medium)[2022/8/9 12:12:11]
最后是一些轉換或計算的小工具:
cast—-from-utf8/--to-ascii:在hex或字串之間轉換castsig:計算functionselectorcastkeccak:計算keccakhashcastcompute-address:計算CREATE的地址
更多cast功能可以參考Foundrybook的castCommands頁面。你可以從中按照你的需求找到對你有幫助的常用指令。
forgeinspect
forge的inspect指令則是用來挖出一個合約更進階的資訊。它不是去拉鏈上的資料,而是作用在本地端的檔案,所以如果你需要分析其他合約,你需要先把它下載下來。
forgeinspectMyContract...
注:在分析前?forge?會先編譯合約,會花一些時間。
首先是列出合約基本資料的功能:
forgeinspectMyContractabi/bytecode/deployedBytecode:列出?MyContract的ABI/編譯完的bytecode/實際部署到鏈上后的bytecode,方便exportABI或是比對部署在鏈上的bytecodeforgeinspectMyContractmethods/gas:列出?MyContract的function列表/每個function的預估gas消耗。用?cast4b/4bd?其實就能反查特定functionselector,這個功能比較像是能看到一個合約完整的function資訊forgeinspectMyContractstorage:列出?MyContract的storage,包含每個變數的storageslot和offset。但呈現的資料比較丑一點,可以改用slither來分析合約storage或讀取合約變數的值,它還可以拉鏈上的合約來分析,不需要先下載合約下來。接下來是比較進階的使用:irOptimized,主要是你想再優化你合約的gas消耗時可以采用的方式。
forgeinspectMyContractirOptimized
它會呈現你的合約編譯成Yul后的長相。Yul就像assembly,它介于Solidity和EVMopcode之間,它可以讓你看到你寫的Solidityfunction背后實際上還做了哪些事情,如此你就可以開始刪去一些不需要的檢查。
這個工具是從這兩則twitter發現到的,這邊直接引用里面的范例和圖片來搭配說明。以一個簡單的將?number?變數遞增的?Counter?合約為例,里面有一個?setNumber?函式用來設置?number?的值及一個?increment?函式用來把?number?加1。右邊則是執行?forgeinspectCounterirOptimized?后所輸出Yul版本的?Counter?合約:
source:?https://twitter.com/w1nt3r_eth/status/1579486967963693057
可以看到一個簡單的Solidity合約編譯完后變得復雜許多。接下來以?increment?函式為例:
source:?https://twitter.com/w1nt3r_eth/status/1579486967963693057
可以發現一個?number++?里面其實包含了很多檢查,例如notpayable和overflow。但其實我們知道它只會以一次加?1?的方式遞增所以幾乎不可能會overflow,然后如果這個函式是可以接受ether的話,那就可以再省掉notpayable的檢查:
source:?https://twitter.com/w1nt3r_eth/status/1579486967963693057
可以發現省去了許多執行步驟。
比起原地把Solidity程式碼替換成assembly程式碼這種比較冒險的優化方式,這是一個新的管道讓你能重新完整地檢視你的合約,并且可以看出修改前后的對比。但要注意還是以安全為優先,不要為了省一點的gas而拿掉你沒有把握的程式碼或檢查。
其他forgeinspect功能可以參考Foundrybook的forgeinspect頁面。
VSCode
最后是介紹一個在review合約時很實用的VSCode插件:SolidityVisualDeveloper
注:以下介紹會是個人使用心得,所以會有特色或功能是沒有介紹到的。可以自己下載來試用看看,看能不能發現適合你的用途的功能。
SolidityVisualDeveloper-VisualStudioMarketplace
Tags:UNDIONNDRFoundryThunder BrawlLevolutionpndr幣還有希望嗎PolkaFoundry
謀求上市,社交應用Soul把注押在元宇宙上。從3D捏臉到最近發布的NAWA引擎,赴美折戟轉戰港股的Soul拼命套上元宇宙的外衣,但這件外衣既沒法遮住下滑的口碑,也掩蓋不了連續的虧損.
1900/1/1 0:00:00數據是必然為分析而存在的,而分析最終還是為人服務,當前最大的熱點就是FTT和BNB的博弈,那就從數據層面看看是否有什么提示.
1900/1/1 0:00:00從歷史上看,我們看到所有空間的邪惡領袖都是以黑暗三角人格中的1或3個特征崛起的,導致了災難性的后果。社交媒體日益增長的影響力幫助他們更具欺騙性和操縱性.
1900/1/1 0:00:00DeFi的影響力正在慢慢滲透到真實世界資產,金融業正處于轉型邊緣。隨著越來越多的資產被代幣化,傳統的資本市場也在向加密世界融合.
1900/1/1 0:00:00今年早些時候,當FTX首席執行官SamBankman-Fried救助了一系列陷入困境的加密貨幣公司時,這位30歲的億萬富翁被譽為下一個摩根大通.
1900/1/1 0:00:002022年9月15日,以太坊將迎來它繼2013年底初版白皮書發表、2015年7月主網上線之后的又一個歷史時刻:“合并”。以太坊的共識機制將從工作量證明轉為權益證明.
1900/1/1 0:00:00