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:
穆迪:6月15日對美國的AAA評級至關重要:金色財經報道,穆迪表示,6月中旬美國支付國債利息對維持最高的AAA評級至關重要。6月15日,美國財政部應支付約20億美元的利息。美國財長耶倫上周日警告稱,如果國會不提高債務上限,“在能夠支付所有賬單的情況下,支撐到6月15日的可能性相當低”。“這對我們來說是一個非常重要的日子,”穆迪高級副總裁William Foster稱,雖然利息償付規模相對較小,但“如果沒有支付,那就是違約。我們將把美國評級下調一級,從AAA降至AA1。”Foster強調,穆迪預計國會和白宮將在財政部用盡其特殊會計措施以保持債務上限之前,就針對提高或暫停債務上限達成協議。[2023/5/26 10:40:57]
其他Shellscript的產生方式可以參考Foundrybook的ShellAutocompletion頁面。
anvil
其實就和Ganache及?hardhatnode?一樣:跑起一個節點。可以是全新的一個本地節點,也可以是背后連上ForkedState的節點。如果你平常都是習慣用來跑一個短暫的全新測試節點就直接下?anvil?即可。
如果你會想在一個ForkedState內實驗或測試的話,多加上?--fork-url?和?--fork-block-number?的option。另外可以留意?--compute-units-per-second?這個option,它會控制每秒請求的計算量,避免取ForkedState太頻繁導致遇到像是AlchemyRateLimit的問題。
觀點:Tether監管風險更低,USDT已成為業界最值得信賴的穩定幣:5月10日消息,隨著美國銀行業危機的擴大和監管機構對加密公司的打擊力度加深,加密領域的投資正轉向被認為相對安全的加密資產。Tether在穩定幣中表現最佳,自3月份以來,其市值飆升。AKJ全球經紀公司創始人、數字資產專家Anders Kvamme Jensen表示:“銀行業危機正在助長‘超比特化’——美元將變得毫無價值,這是不可避免的結局。”這促使人們紛紛轉向比特幣和以太坊等頂級加密貨幣。與此同時,像Tether(USDT)這樣的穩定幣,更多地被視為一種價值儲存手段,一種促進加密貨幣之間轉移的工具,也被視為衍生品交易的抵押品。數字資產數據提供商Kaiko的研究分析師Conor Ryder表示,Tether的溢價反映出人們對其錨定的信任,以及美國證券交易委員會(SEC)對其安全性的認知。[2023/5/10 14:54:08]
更詳細的節點設置可以參考Foundrybook的AnvilReference頁面。
cast
cast是用來取鏈上資料非常好用的工具。因為有很多功能,這里我只會列出我常用及覺得實用的功能。
注:要讀取鏈的狀態記得要在foundry.toml檔里附上endpointurl或透過?--rpc-url$URL?的方式。
首先是抓取交易資訊:
RippleX啟動第六批XRPL資助計劃,申請截止日期為6月18日:4月26日消息,Ripple 開發實驗室 RippleX 宣布啟動第六批 XRPL 資助計劃,開發者需要在 6 月 18 日之前提交申請,本次尋求資助的項目類型包括:金融證券、ReFi、DeFi(借貸、DEX/AMM 接口和集成、資產管理)、數據和指數、支付、電子商務、商戶工具和商戶集成、代幣化符合監管要求的現實世界資產 (RWA)、合規和安全、互操作行(跨鏈橋、跨鏈消息傳遞、互操作協議 / 技術)、開發者工具、保險、預言機等。[2023/4/26 14:28:53]
casttx/receipt:抓取交易或receipt資訊castrun:印出一筆已被收入的交易的executiontrace或進行livedebug,為了得到準確的交易前狀態,預設會模擬執行同一區塊里在該筆交易前面所有的交易,但這可能很耗時,如果只想看交易執行過程且不需要最精準的執行結果的話,可以加上--quickoption,它會跳過前面交易的模擬,直接把該筆交易當作區塊的第一筆交易來執行注:castrun--debug的debug介面可能沒有那么好讀,如果不需要看到執行過程中的memory/stack/storage等細節時可以直接用ethtx.info或Tenderly,好讀很多。
VGX短時突破0.79USDT后回落,24小時漲幅逾80%:1月31日消息,數據顯示,VGX(Voyager)突破0.79USDT,最高漲至0.795USDT,現回落至0.67USDT,24小時漲幅逾80%。[2023/1/31 11:37:27]
接著是從Etherscan抓取合約資訊:
castetherscan-source:會從Etherscan抓取指定地址的合約,可以加上-doption建立一個新的資料夾來放抓下來的合約們。記得用--etherscan-api-key?附上EtherscanAPIkey
注:如果想直接在瀏覽器開啟VSCode環境來瀏覽、編輯合約的話,可以使用deth.net。還可以透過書簽一鍵開啟,非常方便,請參考這則twitter。
接著是encode/decodeABI的功能:
cast4b/4bd/4be:反查functionselector、calldata或是eventsignature。在手上只有一筆交易或一個event的rawdata時,可以透過這些工具來嘗試找出它要執行什么函式或emit了什么eventcastcalldata:用functionsignature及參數組出calldata。在為多簽檢查或組calldata的時候很方便注:因為functionselector只有4bytes,如果多個functionsignature都是同一個functionselector的話,則反查會回傳所有可能functionsignature
安全團隊:Mutant Cats項目Discord賬戶可能已被攻擊:金色財經報道,據CertiK監測,Mutant Cats項目Discord賬戶可能已被攻擊。請社區用戶不要點擊其中的任何鏈接。[2022/9/23 7:16:17]
最后是一些轉換或計算的小工具:
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:IONFoundryUNDNDRZillion Aakar XOPolkaFoundryCompoundrndr幣為什么沒人說
自Uniswap?發明了AMM這一DEX的核心機制之后,DeFi發展日新月異,交易量也不斷攀升,從CEX中虎口奪食.
1900/1/1 0:00:00一、過去一周行業發生重要事件 1.產業 破產文件顯示Alameda及附屬公司負債約51億美元根據11月17日提交的破產法庭文件,截至9月30日.
1900/1/1 0:00:007月7日,加密社區驚訝的發現,加密交易所幣安的創始人趙長鵬與FTX創始人SamBankman-Fried居然在推特上互相嘲諷起來了。直接起因是CZ發推嘲諷SBF并質疑FTX可能沒錢了.
1900/1/1 0:00:00FTX事件引起了行業做市商的空前恐慌,不關乎盈虧,FTX里外部做市商的本金在此次覆滅,此次危機后,整體行業的市場流動性下降也因為一部分做市商停擺。做市商似乎對于大眾投資者還有一些神秘感.
1900/1/1 0:00:0011月5日,一個巨鯨地址向Binance轉移2300萬FTT。此后FTT的價格開始逐漸走低,由25.4美元跌至22.82美元,跌幅達10%.
1900/1/1 0:00:00葡萄牙里斯本--11月1日:趙長鵬,俗稱“CZ”,Binance的創始人兼CEOBinance首席執行官趙長鵬在Twitter上反對競爭對手FTX.
1900/1/1 0:00:00