火星链 火星链
Ctrl+D收藏火星链
首页 > FTT > 正文

PUSH:解构智能合约

作者:

时间:1900/1/1 0:00:00

第一部分·前言

想象一下,你正在驾驶着1969年的MustangMach在美国西部的公路上快速行驶,阳光照耀在华丽的镀金轮辋上,整条道路只有你和沙漠,一望无际的地平线见证着你和落日的追逐......心旷神怡间,突然一身巨响,你335马力的快马被滚滚的白烟吞没,瞬间变成了蒸汽机车,于是你被迫停在路边。你打算看看出现了什么问题,当你翻开前车盖,发现自己完全看不懂。你根本就不知道这该死的机器是怎么工作的,于是你拿起手机准备求救,发现附近没有信号......

上面描述的情形是不是和你正在做的DApp开发很像?在开发Dapp的过程中,在类比中,豪车是你的智能合约,轮辋和改造过的地方是那些经过深思熟虑的小细节。而一旦出现问题,你就需要在智能合约EVM字节码中寻找答案,大部分情况下你都完全不知道发生了什么。如果你是Dapp的开发者,并且遇到过上面的尴尬状况的话,那么以后再也不用担心了!因为,本系列文章的目的就是解构一个简单的Solidity合约,查看其字节码,并将其分解为可识别的结构,直至最低级别。我们将打开Solidity这台跑车的引擎盖。在本系列的最后,您在查看或调试EVM字节码时应该感觉很舒服。本系列的重点是揭开Solidity编译器生成的EVM字节码的神秘面纱,它真的比它看起来简单得多。以下是我们解构时要使用到的智能合约代码:pragmasolidity^0

Binance Labs宣布向Helio Protocol投资1000万美元:金色财经报道,Binance风险投资部门Binance Labs宣布向Helio Protocol投资1000万美元,以帮助扩大该协议向成为流动性质押平台的持续转型。尽管Helio目前建立在权益证明网络BNB Chain上,但这笔新资金预计将帮助该平台扩展到其他链。

Binance Labs发言人表示,Helio的目标是在以太坊上推出,随后在Arbitrum和Zksync等著名的L2网络上推出。[2023/8/11 16:19:27]

functiontotalSupply()publicviewreturns(uint256){returntotalSupply_;}functiontransfer(address_to,uint256_value)publicreturns(bool){require(_to!=address(0));require(_value<=balances);balances=balances-_value;balances=balances+_value;returntrue;}functionbalanceOf(address_owner)publicviewreturns(uint256){returnbalances;}}注意:此合约容易受到溢出攻击,我们只是为了说明问题,所以力求简洁。

区块链协会要求调查加密公司Prometheum:金色财经报道,美国加密货币行业的游说团体区块链协会致信美国SEC监察长办公室,要求对加密公司Prometheum进行调查。在7月12日的一封信中,区块链协会要求SEC监察长Deborah Jeffrey调查金融业监管局(Financial Industry Regulatory Authority)批准Prometheum的特殊目的经纪交易商许可证(SPBD)。该组织还对该公司联席CEO Aaron Kaplan 6月在美国众议院金融服务委员会作证时获得席位的方式提出质疑。

该组织表示,鉴于适用于加密公司的美国证券法的不确定性,Prometheum能够在2023年5月获得SPBD许可证这一事实“令人担忧”。根据区块链协会的说法,Prometheum在2021年4月改变了其呼吁SEC明确监管的公开立场,声称“存在明确的数字资产注册途径,立法是不必要的”。[2023/7/13 10:51:25]

编译合约

为了编译合约,我们将使用Remix。当你打开Remix编译器,单击文件浏览器区域上方左上角的+按钮,创建新的智能合约。将文件名设置为BasicToken.sol。创建好之后,将上面的代码粘贴到编辑器上。在右侧,转到“Setting”的选项中,确保选中了“EnablePersonalMode”。另外,要注意选择的Solidity编译器版本是“version:0.4.24+commit.e67f0147.Emscripten.clang”。这两个细节非常重要,否则你将无法查看文中讨论的字节码。接下来,你可以进入Compile选项并单击Details按钮,你会看到一个弹出窗口,里面包含Solidity编译器生成的所有东西,其中一个是名为BYTECODE的JSON对象,它具有“object”属性,这个就是编译的合约代码,它的代码是这样的:608060405234801561001057600080fd5b5060405160208061021783398101604090815290516000818155338152600160205291909120556101d1806100466000396000f3006080604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166318160ddd811461005b57806370a0823114610082578063a9059cbb146100b0575b600080fd5b34801561006757600080fd5b506100706100f5565b60408051918252519081900360200190f35b34801561008e57600080fd5b5061007073ffffffffffffffffffffffffffffffffffffffff600435166100fb565b3480156100bc57600080fd5b506100e173ffffffffffffffffffffffffffffffffffffffff60043516602435610123565b604080519115158252519081900360200190f35b60005490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b600073ffffffffffffffffffffffffffffffffffffffff8316151561014757600080fd5b3360009081526001602052604090205482111561016357600080fd5b503360009081526001602081905260408083208054859003905573ffffffffffffffffffffffffffffffffffffffff85168352909120805483019055929150505600a165627a7a72305820a5d999f4459642872a29be93a490575d345e40fc91a7cccb2cf29c88bcdaf3be0029没错,这些代码完全没有可读性。

Neon EVM在Solana主网推出Beta内测版:6月26日消息,Solana EVM兼容方案Neon EVM近日宣布在Solana主网推出其Beta内测版Neon EVMβ。

据悉,Neon EVMβ是一个功能齐全的Neon EVM,支持免费交易。Neon EVMβ为其生态参与者提供一个部署和测试的机会,以确保其在Solana主网正式启动之前能够无缝集成服务。

通过推出其Beta内测版,Neon EVM团队可以在受控阶段引入并测试生态参与者的服务。第一阶段是基础设施组件入驻,第二阶段接受Dapp并将测试钱包的连接。当测试期结束,NEON代币在市场上可用来支付交易时,NEON EVM将切换回正常运行模式。这意味着独立代理运营商(P2P和Everstake)将恢复接受和处理交易的责任。代理运营商的RPC端点将在ChainList上可用。[2023/6/26 22:01:20]

部署合约

接下来,转到Remix中的Run部分。首先,确保您使用的是JavascriptVM。这基本上是一个嵌入式JavascriptEVM+网络,理想的以太坊训练场。确保在ComboBox中选择了BasicToken,并在Deploy输入框中输入数字10000。接下来,单击“Deploy”按钮进行部署。这部署的是我们创建的BasicToken智能合约实例,最初提供的10000个token由当前在ComboBox帐户顶部选择的帐户拥有,该帐户会保留我们设置的所有token供应。在“Run”选项卡的“DeployedContracts”中,您可以看到已部署的智能合约,其中包含与合约进行交互的三个字段:transfer,balanceOf和totalSupply。在这里,我们能够与刚刚部署的智能合约实例进行交互。但在此之前,让我们来看看合同的“Deploy”究竟是什么意思:在页面底部的控制台区域中,你可以看到一条日志“creationofBasicTokenpending...”,然后是一个包含各种字段的事务条目:from,to,value,data,logs和hash。单击此条目以展开交易信息,你应该看到transaction的date、input,以及我们上面提到的字节码。所以,创建一个智能合约实例,其中会包含自己的地址和代码。我们将在下一篇文章中详细研究这transaction个过程。反汇编字节码

Ape Foundation:没有在FTX上持有任何资产,资金通过Coinbase Custody存放在隔离的托管账户中:11月14日消息,Ape Foundation表示,没有在FTX上持有任何资产。资金通过Coinbase Custody存放在隔离的托管账户中。在隔离保管中,保护资产的实体没有资产的管理权限。在清算事件中,资产将全部返还给客户。[2022/11/14 13:04:22]

在控制台中心,transaction框框的右侧,有个“debug”按钮。点击这个按钮,你将激活Remix右侧区域中的Debugger选项。我们可以一起看看Instructions部分,如果向下滚动,应该是出现以下内容:000PUSH180002PUSH140004MSTORE005CALLVALUE006DUP1007ISZERO008PUSH20010011JUMPI012PUSH100014DUP1015REVERT016JUMPDEST017POP018PUSH140020MLOAD021PUSH120023DUP1024PUSH20217027DUP4028CODECOPY029DUP2030ADD031PUSH140033SWAP1034DUP2035MSTORE036SWAP1037MLOAD038PUSH100040DUP2041DUP2042SSTORE043CALLER044DUP2045MSTORE046PUSH101048PUSH120050MSTORE051SWAP2...为了确保你前面的操作没有出错,你可以把你所操作的Remix编译器中看到的内容与上面进行比较。这其实就是合约的反汇编字节码。如果您按字节扫描原始字节码,则EVM会识别与特定操作关联的特定操作码。例如:0x60=>PUSH0x01=>ADD0x02=>MUL0x00=>STOP...反汇编的代码非常低级并且很难看懂,但是我们可以通过这种方式可以开始理解它。Opcode

澳大利亚财政部就比特币外币免税问题向公众征求意见:9月6日消息,澳大利亚财政部正就比特币等加密货币的外币免税问题的立法草案向公众征求意见。从9月6日到9月30日,公众有25天的时间来分享他们对拟议立法的意见。如果签署成为法律,该立法将修改《商品和服务税(GST)法案》中现有的数字货币定义——有效地将加密资产排除在外币的定义之外。GST是对在澳大利亚销售或消费的商品、服务和物品征收的一种基础广泛的税收。助理财政部长斯蒂芬琼斯强调了澳大利亚政府打算将加密资产排除在税收之外被视为外币的意图。但是,该立法不会影响对作为投资持有的加密货币征收资本利得税。[2022/9/6 13:12:09]

在解构智能合约代码开始之前,你将需要一个基本的工具集理解单个opcode,如PUSH,ADD,SWAP,DUP等的操作码,到最后,每个操作吗只能从EVM的堆栈,内存或属于合约的存储中压入一个项或消费一个项。要查看EVM可以处理的所有可用操作码,可以查看Pyethereum,上面显示了操作码列表。要了解每个操作码的工作原理,Solidity官方的汇编文档也是一个很好的参考。即使它不是与原始操作码一一对应,但是非常接近。如果你能读懂技术文档,可以阅读以太坊黄皮书,其实归根结底都是上面的内容。虽然和大家推荐了这么多文档,现在从头到尾阅读这些资源没有什么意义,你只要记住有这么个资料就行,我们将在需要的时候使用到它们。指令上面反汇编代码中的每一行都是EVM执行的操作指令,每条指令都包含一个操作码,例如,让我们采用其中一条指令,指令88,将数字4推送到堆栈。这个特殊的反汇编程序解释说明如下:88PUSH10x04|||||Hexvalueforpush.|OpcodeInstructionnumber尽管反汇编的代码能让我们更加理解底层的东西,但它还是让人摸不着头脑。我们需要一个能够解构所有问题的方法。策略

任何一开始看上去不可能完成的任务,其实都可以通过不断的拆解,分解成可以解决的任务,我们遇到的问题也不例外,面对这个问题,我所采取的策略就是“分而治之”。我们可以试图找到反汇编代码的分叉点,并逐渐分解,直到分解成很小的块,我们将在Remix的调试器中逐步完成。在下图中,我们可以看到我们对反汇编代码进行的第一次拆分。

如果你不了解图表,也不要担心,你不用一开始就什么都会,我们的系列文章将会循序渐进的介绍。现在就跟着我们的节奏,不断深入你的豪车的内部结构吧。*本文由AlejandroSantander首发于medium,由猎豹区块链安全翻译并整理*猎豹区块链安全以金山霸的技术为依托,结合人工智能、nlp等技术,为区块链用户提供合约审计、情感分析等生态安全服务。您可访问Ratingtoken官网了解更多

标签:FFFPUSHUSHANCfff币价格PUSH价格USHA价格yRise Finance

FTT热门资讯
元宇宙:50亿美元的“空气币”,BM想靠几句“what if”翻身?

11月28日,BM突然现身EOS电报群。跟社区成员的讨论中,BM以多个“whatif”开头的反问句,向社区成员透露除了“已经找到解决隐私性和终极扩容方法”、“将实现1千万TPS”、“发行新币”等.

1900/1/1 0:00:00
ILY:星球独家 | 詹克团、吴忌寒或将同时卸任比特大陆 CEO

文|黄雪姣、昕楠12月28日,Odaily星球日报独家获悉,吴忌寒和詹克团不久或将同时卸任比特大陆CEO,接任者或为王姓人士。该王姓人士原是圈外人,进入比特大陆已有一段时间.

1900/1/1 0:00:00
AXO:独家专访Paxos CEO:纽约监管局为什么会批准稳定币?

“我很惊喜,当我们跟纽约监管局提到稳定币时,他们认为这是个好主意。”PaxosCEOCharlesCascarilla告诉Odaily星球日报.

1900/1/1 0:00:00
区块链:区块链社群熊市静默:共识倒,人已散

本文来自:BiaNews,作者:路西,星球日报经授权转发。移动互联网的出现和普及让人们在寻找志趣相投的群体这方面成本大幅降低,现在估计谁都有几个交流兴趣爱好的微信群.

1900/1/1 0:00:00
USD:别因Basis否定全部稳定币,链上交易量增幅已超1000%

根据加密货币市场研究公司Diar最新发布的一份统计数据显示,自今年九月份以来,稳定币的链上交易活动的增长幅度已经超过了1000%.

1900/1/1 0:00:00
SEC:区块链与法律的纠缠:这7个法律问题需要在2019年得到答案

本文来自:巴比特,作者:JennyLeung,译者:夕雨,星球日报经授权转发。JennyLeung是一名澳大利亚律师,将于2019年开始在BlakemoreFallon律师事务所担任区块链律师.

1900/1/1 0:00:00