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:
报告:黑客在2023年Q1的40次攻击中从窃取了约4亿美元:金色财经报道,TRM Labs在一份新报告中表示,黑客在2023年前三个月的40次攻击中从加密项目中窃取了约4亿美元。这比2022年第一季度下降了70%。黑客的平均规模也变小了,从2022年的3000万美元减少到2023年同期的1050万美元。黑客也越来越多地归还他们窃取的资金,从被利用的项目中获得“白帽”奖励。TRM Labs估计,黑客攻击受害者在2023年拿回了将近一半的被盗资金。
TRM Labs表示,一个可能的解释是监管机构越来越关注加密货币黑客攻击和一些备受瞩目的执法案件。首先,加密货币交易所正在加强他们的KYC/AML政策,这使得兑现被盗的加密货币变得更加困难。与此同时,Tornado Cash自2022年8月以来一直受到美国制裁,该协议自动将所有与Tornado相关的资金重新列入任何受监管交易所。[2023/5/23 15:19:53]
其他Shellscript的产生方式可以参考Foundrybook的ShellAutocompletion页面。
anvil
其实就和Ganache及?hardhatnode?一样:跑起一个节点。可以是全新的一个本地节点,也可以是背后连上ForkedState的节点。如果你平常都是习惯用来跑一个短暂的全新测试节点就直接下?anvil?即可。
如果你会想在一个ForkedState内实验或测试的话,多加上?--fork-url?和?--fork-block-number?的option。另外可以留意?--compute-units-per-second?这个option,它会控制每秒请求的计算量,避免取ForkedState太频繁导致遇到像是AlchemyRateLimit的问题。
美国银行:星巴克Odyssey已有成功早期迹象,二级交易总额超16万美元:金色财经报道,美国银行表示,星巴克的Odyssey计划已经看到成功的早期迹象,会员可以通过完成互动旅程(除了购买饮料)来赚取积分也可以将积分兑换成互动体验,包括参加独家活动和国际旅行,星巴克对Web3的探索方式“比行业之前的NFT尝试更全面”。 此外,星巴克还可以通过与二级销售相关的特许权使用费流永久产生增量收入,目前一些旅程邮票的售价已高达1,900美元,二级交易总额达到164,000美元。(The Block)[2023/3/1 12:34:59]
更详细的节点设置可以参考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,好读很多。
Chainlink拟为DeFi衍生品市场推出低延迟预言机解决方案:11月2日消息,据官方博客,预言机项目Chainlink宣布将为DeFi衍生品市场推出低延迟Oracle(预言机)解决方案,该解决方案的特点是架构设计的演变,精确地满足了衍生品dApp的独特要求,预计可测试版本将在今年年底前准备就绪。
该架构利用高速数据提供者与Chainlink去中心化Oracle网络相结合,向链下衍生dApp提供高频定价数据,同时仍提供链上验证。Chainlink表示该方案具有低延迟、缓解抢先交易风险、低Gas成本等优势。[2022/11/2 12:08:57]
接着是从Etherscan抓取合约资讯:
castetherscan-source:会从Etherscan抓取指定地址的合约,可以加上-doption建立一个新的资料夹来放抓下来的合约们。记得用--etherscan-api-key?附上EtherscanAPIkey
俄罗斯央行行长:准备讨论在外贸中使用加密货币的问题:9月16日消息,俄罗斯央行行长纳比乌琳娜表示,准备讨论在外贸中使用加密货币的问题。[2022/9/16 7:01:45]
注:如果想直接在浏览器开启VSCode环境来浏览、编辑合约的话,可以使用deth.net。还可以透过书签一键开启,非常方便,请参考这则twitter。
接着是encode/decodeABI的功能:
cast4b/4bd/4be:反查functionselector、calldata或是eventsignature。在手上只有一笔交易或一个event的rawdata时,可以透过这些工具来尝试找出它要执行什么函式或emit了什么eventcastcalldata:用functionsignature及参数组出calldata。在为多签检查或组calldata的时候很方便注:因为functionselector只有4bytes,如果多个functionsignature都是同一个functionselector的话,则反查会回传所有可能functionsignature
最后是一些转换或计算的小工具:
cast—-from-utf8/--to-ascii:在hex或字串之间转换castsig:计算functionselectorcastkeccak:计算keccakhashcastcompute-address:计算CREATE的地址
安全团队:NFT项目Wibin Wolves Discord服务器遭到攻击:6月4日消息,CertiK在推特上表示收到报告称NFT项目Wibin Wolves的Discord服务器遭到攻击,社区用户被踢,所有服务器邀请链接被关闭。Wibin Wolves官方将在24小时内在推特上宣布下一步行动。[2022/6/4 4:02:01]
更多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
标签:IONFoundryUNDNDRUnicly CryptoPunks CollectionPolkaFoundryPlaygroundzNDR币
Circle首席执行官JeremyAllaire在过去几个月里两次被其行业的快速变化所震惊。5月的Luna-UST崩溃让他目瞪口呆,“死亡螺旋发生得如此之快,价值破坏如此之剧烈.
1900/1/1 0:00:00Itisonlyamomentthatdeterminesaperson''slife,aswellashisentiredestiny.决定一个人的一生,以及整个命运的.
1900/1/1 0:00:00以太坊质押赛道随着2020年12月信标链的上线而出现并逐渐成熟,本文将会简单介绍质押赛道相关信息.
1900/1/1 0:00:0010月31日,在今年香港金融科技周上,香港特区政府发布了《有关香港虚拟资产发展的政策宣言》,阐述其在发展虚拟资产行业和生态系统而制定的政策立场和方针.
1900/1/1 0:00:00最近FTX暴雷之后,我明显感觉到圈内人更加焦虑了,可能有一波人已经直接选择了放弃,退圈保平安,但还是有一波人留了下来,可能为了继续撸毛回血,可能为了继续陪伴行业成长,看到下一个牛市到来.
1900/1/1 0:00:00首先是Terra的崩盘,然后是中心化加密贷款机构破产,现在,世界上最大的加密货币交易所之一FTX(几乎可以肯定)破产了.
1900/1/1 0:00:00