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:
鏈上分析師:以太坊上的FDUSD總供應量達到2.65億枚:金色財經報道,據21Shares母公司21co鏈上分析師Tom Wan披露數據顯示,FDUSD在過去7天里供應量增加91%,以太坊上的總供應量為2.65億枚。
幣安的采用推動了FDUSD的增長,幣安擁有以太坊上99.1%的FDUSD供應量。過去24小時交易量為2400萬美元,USDT-FDUSD的交易量為1300萬美元。[2023/8/9 21:34:26]
其他Shellscript的產生方式可以參考Foundrybook的ShellAutocompletion頁面。
anvil
其實就和Ganache及?hardhatnode?一樣:跑起一個節點。可以是全新的一個本地節點,也可以是背后連上ForkedState的節點。如果你平常都是習慣用來跑一個短暫的全新測試節點就直接下?anvil?即可。
如果你會想在一個ForkedState內實驗或測試的話,多加上?--fork-url?和?--fork-block-number?的option。另外可以留意?--compute-units-per-second?這個option,它會控制每秒請求的計算量,避免取ForkedState太頻繁導致遇到像是AlchemyRateLimit的問題。
美總統候選人Kennedy:將免除BTC兌換美元的資本利得稅:金色財經報道,Watcher.Guru發推稱,美國總統候選人Robert F. Kennedy Jr.表示,他將免除BTC兌換美元的資本利得稅。[2023/7/19 11:04:03]
更詳細的節點設置可以參考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,好讀很多。
美國總統候選人Vivek Ramaswamy宣布接受比特幣競選捐款:金色財經報道,Vivek Ramaswamy成為美國第二位正式接受BTC捐贈的2024年選舉的總統候選人,據悉,在Vivek Ramaswamy宣講舞臺上閃現了一個二維碼,掃描后會將用戶重定向到一個支付網關,該網關提供各種捐贈支付選項,包括 BTC 和聰 (sats)幣的支付選項。此外,符合條件的美國公民和永久居民最多可為該活動捐款 6,600 美元,這筆款項不能作為慈善捐款用于聯邦所得稅的扣除。捐贈者將獲得NFT。
此前消息,美國民主黨總統候選人小羅伯特·肯尼迪在參加比特幣 2023 大會時宣布接受比特幣捐款,成為美國歷史上首位接受比特幣競選捐款的總統候選人。[2023/5/21 15:17:14]
接著是從Etherscan抓取合約資訊:
castetherscan-source:會從Etherscan抓取指定地址的合約,可以加上-doption建立一個新的資料夾來放抓下來的合約們。記得用--etherscan-api-key?附上EtherscanAPIkey
NEAR生態去中心化交易所Jumbo完成350萬美元融資,Pantera Capital等參投:11月16日消息,基于NEAR開發的去中心化交易所Jumbo完成350萬美元的新一輪融資,Pantera Capital、Huobi Ventures、D21 Ventures、BigBrain Holdings、Dweb3 Capital、Fundamental Labs、MetaWeb等參投。據悉,Jumbo是一個一站式DEX,注重UI/UX的優化,旨在成為最用戶友好的交易所。[2022/11/16 13:11:13]
注:如果想直接在瀏覽器開啟VSCode環境來瀏覽、編輯合約的話,可以使用deth.net。還可以透過書簽一鍵開啟,非常方便,請參考這則twitter。
接著是encode/decodeABI的功能:
cast4b/4bd/4be:反查functionselector、calldata或是eventsignature。在手上只有一筆交易或一個event的rawdata時,可以透過這些工具來嘗試找出它要執行什么函式或emit了什么eventcastcalldata:用functionsignature及參數組出calldata。在為多簽檢查或組calldata的時候很方便注:因為functionselector只有4bytes,如果多個functionsignature都是同一個functionselector的話,則反查會回傳所有可能functionsignature
Web3開發人員:stETH-ETH與UST-LUNA沒太多可比性:6月10日消息,Web3開發人員foobar發推稱,為什么還有人認為stETH-ETH與UST-LUNA有很大的可比性?建議重返中學,讀讀《雞皮疙瘩》,培養個興趣愛好,比如在公園里坐坐。Crypto不適合你。
官方數據顯示,Curve上stETH / ETH流動性池的偏離情況仍在加劇,截至發稿時,池內共有205861 ETH(24.71%)和627402 stETH(75.29%),二者占比跌破“三七”關口。[2022/6/10 4:16:24]
最后是一些轉換或計算的小工具:
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:IONETHUNDNDRINCEPTION價格tether幣怎么買befundOne Hundred Million Inu
11月8日下午3:00點,七彩研究院與Lifeform以主題《匠心巨作Lifeform-專注于超寫實3DAvatar》在七彩研究院直播間進行干貨分享.
1900/1/1 0:00:00ETHGlobal是全球最大的以太坊社區之一,在世界各地舉辦黑客馬拉松比賽,通過以太坊基金會以及其他贊助商的支持讓具有創新性、顛覆性的項目能夠快速創建.
1900/1/1 0:00:00不可能三角 省時間省錢省認知應該怎么擼特別有時間:關注無數擼毛大V,所有作業一個不落下,刷到天昏地暗特別有認知:精選項目.
1900/1/1 0:00:00沒有開發者愿意因幾行代碼而遭受牢獄之災,但這卻發生在AlexeyPertsev身上。作為TornadoCash的重要貢獻者,AlexeyPertsev被美國政府懷疑通過以太坊DappTornad.
1900/1/1 0:00:00零知識技術是一種推動技術,不僅將改變Web3,還將改變其他行業。作為一種足夠通用的技術,ZK可以擁有多種用例,而我們正處于弄清楚該技術可以實現的所有用例的早期階段.
1900/1/1 0:00:00FTX在推特上發表了聲明,稱已在美國執行破產程序,同時曾經登上《財富》雜志封面的前FTX首席執行官SamBankman-Fried宣布辭職.
1900/1/1 0:00:00