比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > MANA > Info

Solidity 及EVM 開發工具介紹_NDR

Author:

Time:1900/1/1 0:00:00

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:

DASH正式完成減產,區塊獎勵降至2.56630257 DASH:金色財經報道,據Tokenview數據顯示,達世幣(DASH)已于區塊高度1,892,161完成減產。區塊獎勵由2.76371046 DASH減少到2.56630257 DASH。[2023/6/23 21:56:23]

其他Shellscript的產生方式可以參考Foundrybook的ShellAutocompletion頁面。

anvil

其實就和Ganache及?hardhatnode?一樣:跑起一個節點。可以是全新的一個本地節點,也可以是背后連上ForkedState的節點。如果你平常都是習慣用來跑一個短暫的全新測試節點就直接下?anvil?即可。

如果你會想在一個ForkedState內實驗或測試的話,多加上?--fork-url?和?--fork-block-number?的option。另外可以留意?--compute-units-per-second?這個option,它會控制每秒請求的計算量,避免取ForkedState太頻繁導致遇到像是AlchemyRateLimit的問題。

更詳細的節點設置可以參考Foundrybook的AnvilReference頁面。

派盾:Merlin攻擊者將31萬枚DAI兌換為USDC,并將大部分USDC橋接至BNBChain:6月20日消息,據派盾監測,Sync生態DEX Merlin攻擊者將31萬枚DAI兌換為USDC,并將2萬枚USDC轉移到新地址0x9934...aebb,他們還將25.5萬枚USDC橋接至BNBChain,橋接資金位于兩個地址分別為0x1b1893...76b3和0xd9c9...d430。[2023/6/20 21:49:00]

cast

cast是用來取鏈上資料非常好用的工具。因為有很多功能,這里我只會列出我常用及覺得實用的功能。

注:要讀取鏈的狀態記得要在foundry.toml檔里附上endpointurl或透過?--rpc-url$URL?的方式。

首先是抓取交易資訊:

casttx/receipt:抓取交易或receipt資訊castrun:印出一筆已被收入的交易的executiontrace或進行livedebug,為了得到準確的交易前狀態,預設會模擬執行同一區塊里在該筆交易前面所有的交易,但這可能很耗時,如果只想看交易執行過程且不需要最精準的執行結果的話,可以加上--quickoption,它會跳過前面交易的模擬,直接把該筆交易當作區塊的第一筆交易來執行注:castrun--debug的debug介面可能沒有那么好讀,如果不需要看到執行過程中的memory/stack/storage等細節時可以直接用ethtx.info或Tenderly,好讀很多。

DeFi借貸平臺Archimedes完成490萬美元種子輪融資,Hack VC領投:2月2日消息,DeFi借貸平臺Archimedes宣布完成490萬美元種子輪融資,Hack VC領投,Unassociated Venture、Psalion、Truffle Ventures、Cogitent Ventures、Haven VC和Palsar等參投。

Archimedes的去中心化金融借貸平臺將于本月推出。Archimedes提供了可以成倍增加用戶的原始收益機會,使用該平臺的杠桿的用戶將收到一個NFT,代表一個產生收益的穩定幣頭寸,該頭寸的杠桿率高達本金抵押品金額的10倍。[2023/2/2 11:42:34]

接著是從Etherscan抓取合約資訊:

castetherscan-source:會從Etherscan抓取指定地址的合約,可以加上-doption建立一個新的資料夾來放抓下來的合約們。記得用--etherscan-api-key?附上EtherscanAPIkey

吉利成立區塊鏈科技公司,注冊資本1億元:7月4日消息,企查查APP顯示,6月30日,無錫吉利區塊鏈科技有限公司成立,注冊資本1億元,經營范圍包含:區塊鏈技術相關軟件和服務;物聯網技術服務;組織文化藝術交流活動;數字文化創意內容應用服務等。企查查股權穿透顯示,該公司由浙江吉利數字科技有限公司、吉利國際(香港)有限公司間接共同持股。(金十)[2022/7/4 1:49:17]

注:如果想直接在瀏覽器開啟VSCode環境來瀏覽、編輯合約的話,可以使用deth.net。還可以透過書簽一鍵開啟,非常方便,請參考這則twitter。

接著是encode/decodeABI的功能:

cast4b/4bd/4be:反查functionselector、calldata或是eventsignature。在手上只有一筆交易或一個event的rawdata時,可以透過這些工具來嘗試找出它要執行什么函式或emit了什么eventcastcalldata:用functionsignature及參數組出calldata。在為多簽檢查或組calldata的時候很方便注:因為functionselector只有4bytes,如果多個functionsignature都是同一個functionselector的話,則反查會回傳所有可能functionsignature

Azuki系列NFT當前地板價為10.9ETH:金色財經消息,據NFTGo.io數據顯示,Azuki系列NFT總市值達3.91億美元,在所有NFT項目總市值排名中位列第12;其24小時交易額為82.57萬美元,增幅達124.43%。截止發稿時,該系列NFT當前地板價為10.9ETH。[2022/5/31 3:51:36]

最后是一些轉換或計算的小工具:

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:IONFoundryNDRUNDG RevolutionPolkaFoundryWNDR幣JSB Foundation

MANA
Michael Saylor 的比特幣「中場戰事」_加密貨幣

MichaelSaylor是比特幣的浪子。 比特幣愛好者崇拜他,因為他是他們中的一員,說話激進的像一個擁有比特幣信仰的“教會牧師”.

1900/1/1 0:00:00
香港發布虛擬資產發展政策宣言,發牌制度來了_NFT

來源|?零壹財經?排版?|王紀瓏琰10月31日,香港財庫局正式發布《有關香港虛擬資產發展的政策宣言》,闡明政府在虛擬資產行業和生態圈的政策立場和方針.

1900/1/1 0:00:00
Unipass創始人知縣:為什么AA錢包在Web3錢包中是更新的范式_WEB

10月27日,7upDAO開發者公會做了一場關于《探索Web3錢包的終局形態》的分享。受邀嘉賓為知縣,UniPass創始人,以下為演講內容精選:一、OriginalSin原罪:回顧MetaMas.

1900/1/1 0:00:00
深入研究 zkEVM 的五種類型的優缺點_ROL

自以太坊合并完成之后,以太坊社區已經將關注點轉移到如何開始擴展區塊鏈以實現更便宜的交易費用、更快的交易和更高的吞吐量,同時保持建立在這個區塊鏈之上的DeFi協議和其他dAPP的安全性.

1900/1/1 0:00:00
快評香港數字資產發展政策宣言_USD

香港特別行政區財經事務及庫務局于今日正式發布《有關香港虛擬資產發展的政策宣言》,就在香港發展蓬勃的虛擬資產行業和生態圈,闡明政府的政策立場和方針.

1900/1/1 0:00:00
Ethereum最新技術路線圖中的有趣事實和隱含密碼(Nov2022)_ROL

1/30V神最近更新了ETH路線圖,里面有些和給大家解讀下:一共分為六個階段,每個階段有若干里程碑.

1900/1/1 0:00:00
ads