首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Solidity中使用Revert()、Assert()和Require(),并且在EVM中使用新Revert操作码

这是经他许可发布,请欣赏! 在 Solidity0.4.10[7]版本发布引入了 assert()、require() 和 revert() 函数,从那时起,困惑就一直存在。...useSuperPowers() 函数,该函数将抛出返回 invalid opcode 错误,撤消所有状态更改,并用完所有剩余 Gas(有关以太坊中 Gas 和费用更多信息,请参阅本文[10])...这就是你看到 invalid opcode错误原因,因为没有关于客户端应如何处理它们规范。 然而,在拜占庭之后,这将改变,并且在以太坊虚拟机中实现 EIP-140:REVERT 指令[11]。...1.它将允许你返回一个值 大多数智能合约开发人员都非常熟悉臭名昭著且无用无效操作码错误。幸运是,我们很快就能返回错误消息,或者返回错误类型数字。...基本, require() 应该是你检查条件首选函数, assert() 只是为了防止发生任何非常糟糕事情,但条件评估为 false 是不可能

63930
您找到你想要的搜索结果了吗?
是的
没有找到

探究新 Solidity 0.8 版本

Solidity0.8[4]在0.7 发布[5]之后仅 5 个月就发布了!...尤达宝宝发布 0.8 新功能和如何使用 我们来看看两个大新功能:集成 SafeMath 和新错误处理。 1. 集成 SafeMath ?...无效操作码被还原取代 到目前为止,某些操作会导致 INVALID操作码执行。这个操作码问题是,它消耗掉所有剩余 Gas。这显然是不好且没必要。为什么要浪费 Gas,把它捐给矿工?...0x31: 在一个空数组pop()。 0x32: 索引超长度异常。 0x41: 分配过多内存或创建过大数组。 0x51: 调用未初始化内部函数类型变量。...将 x**y**z改为(x**y)**z,因为默认执行顺序改变了。 将 byte类型改为 byte1 。 我省略了一些细节,关于完整变更日志和所有变更细节,请查看文档这里[10]。

1.4K20

如何正确发布PHP代码

一个活跃项目可能每天都要发布若干次代码,但是现实却是很少有人注意其中细节,实际这里面有好多坑,很可能你就在坑中却浑然不知。 一个正确实现发布系统至少应该支持原子发布。...假设在发布代码期间,opcode cache 或者 realpath cache 里数据出现过期,那么就会出现一部分缓存是旧文件,一部分缓存是新文件非原子发布情况,为了避免出现这种情况,我们应该保证缓存过期时间足够长...即便调用了 apc_clear_cache 或者 opcache_reset 方法也无效,重启 php-fpm 自然是能够解决问题,不过对脚本语言来说重启太重了!难道除了重启就没有别的办法了么?...事实之所以会出现这样问题,主要是因为 opcode cache 是通过 realpath cache 获取文件信息,即便软链接已经指向了新位置,但是如果 realpath cache 里还保存着旧数据的话...> 在 release 时候,它是先删除再创建,是一个两步非原子操作,在 symlink 时候,看上去「ln -sfn」是单步原子操作,实际也是错误: shell> strace ln -sfn

4.2K40

RDMA - ODP按需分页设计原理-优点-源码浅析

预取动词仅适用于 ODP MR,并且会尽最大努力完成,并且可能会忽略错误无效虚拟页: 未映射页面, 由于页面不再固定,OS 内核可以交换和迁移页面简介什么是按需分页?...当 RDMA 请求访问无效虚拟页面上数据时,(1a) RNIC 会停止 QP 并引发 RNIC 页面错误 1 中断。...(1b) 驱动程序通过 hmm_range_fault [2] 向 OS 内核请求虚拟到物理映射。OS 内核会在这些虚拟页面上触发 CPU 页面错误,并在必要时填充 CPU 页表。...在收到页面错误中断后,驱动程序首先需要知道页面错误发生在哪个虚拟地址,以及在哪个内存密钥。处理发送/接收操作时,此信息位于工作队列内。...补丁 19 添加了对由 RDMA 写入操作引起页面错误支持,补丁 20 为 mlx5 驱动程序添加了无效支持,允许动态取消页面映射ODP代码分析IBV_ACCESS_ON_DEMAND ODP标记位

18300

有安全研究者混入了PHP 8.0开发组!

经历了近半年alpha版本测试后,PHP在2020年11月26号正式发布了8.0版本:https://www.php.net/releases/8.0/en.php 今天我们就来浏览一下PHP 8.0...$y; $this->z = $z; } } 实际这已经形成了一种范式,我们要不厌其烦地进行定义->传递->赋值过程。...内部函数严格参数检查 在PHP 8 以前,如果我们使用内部函数时传入参数有误(比如,参数类型错误,参数取值错误等),有时会抛出一个异常,有时是一个错误,有时只是一个警告。...而opcache出现实际就是节省了编译时间,代码在第一次运行时会编译成opcache能识别的缓存(opcode),之后运行时就免除了编译过程,直接执行这段opcode。...而JIT出现再次优化了这个过程,JIT会将一些执行次数较多opcode直接翻译成机器码。这样PHP解释器在执行时,机器码会直接交给CPU来执行,又减少了Zend虚拟机执行opcode时间。

65120

Uniswap V3 路径编码进一步优化

padding,即 32 字节对齐,导致引入了非常多无效空字节 上述例子中 gas 为 2360,而空字节消耗了 230 * 4 = 920,无效数据占比为 ~ 40% 为了进一步优化,考虑到 pool...实际,我方式是抛弃 solidity 编码,直接使用 assembly 来解析数据,代码如下 bytes memory input; assembly { let calldata_len...,我们甚至可以跳过 solidity 编译后某些 opcode 比如上面例子中,我并不检查 input_len 长度是否大于0,因为我不需要 而 solidity 编译后操作码,势必包括种种边界检查...换句话说,这种方式不仅优化了数据 gas,还稍微优化了一些 opcode 到此为止?...实际,上面的优化有个小问题,在于 memory 中消耗了 32 字节用于保存 input 长度,而这个长度,在整个生命周期中是固定 我选择将它转移到栈,只是使用时稍微麻烦一些,不像 bytes

97840

xcopy-参数详解

“/z”也显示每个文件完成复制操作百分比。 • 在 COPYCMD 环境变量中使用“/y” 可在 COPYCMD 环境变量中使用“/y”。在命令行使用“/-y”可以覆盖该命令。...• “xcopy”退出代码 要处理“xcopy”返回退出代码,请在批处理程序“if”命令行使用“ErrorLevel”参数。有关使用“if”处理退出码批处理程序示例,请参阅“相关主题”。...没有足够内存或磁盘空间,或命令行输入了无效驱动器名称或语法。 5 出现了磁盘写入错误。 退出代码 描述 0 文件复制没有错误。 1 没有找到要复制文件。...4 出现了初始化错误。没有足够内存或磁盘空间,或命令行输入了无效驱动器名称或语法。 5 出现了磁盘写入错误。 退出代码 描述 0 文件复制没有错误。 1 没有找到要复制文件。...4 出现了初始化错误。没有足够内存或磁盘空间,或命令行输入了无效驱动器名称或语法。 5 出现了磁盘写入错误

2.6K20

详解:PHP加速器配置神器opcache

以后直接访问缓存Opcode岂不是更快,启用Opcode缓存之后流程图如下所示: PHP opcode原理 Opcode是一种PHP脚本编译后中间语言,就像JavaByteCode,或者.NET.... opcache.max_wasted_percentage=5   ; 开启这条指令, Zend Optimizer + 会自动将当前工作目录名字追加到脚本键,以此消除同名文件间键值命名冲突....=1   ; 启用此Hack可以暂时性解决"can’t redeclare class"错误....第二个问题是做版本发布时,一般都是sync方式,可能会出现文件发布一半时被opcache缓存,用户访问会报程序错误,这个主要是因为文件内容缓存了一半,但是文件时间戳不会在改变,所以就算opcache检测时也不会去读取新文件了...但是不推荐使用,个人在生产环境中进行代码发布后调用opcache_reset()清空缓存(测试确实可以清空缓存),出现过奇葩问题(访问量大应用),后来就果断放弃了,使用了reload方式。

2K00

利用机器学习进行恶意代码分类

n-gram基于一个简单假设,即认为一个词出现概率仅与它之前n-1个词有关,这个概率可从大量语料中统计得到。...(filename): opcode_seq = [] p = re.compile(r'\s([a-fA-F0-9]{2}\s)+\s*([a-z]+)') with open...(在后文分析中我会谈谈我一些看法) OpCode n-gram 这部分实现不复杂,他们选取n=4,在具体特征选择通过计算信息增益选取每个分类与其他分类区分度最高750个特征。...可以目测这个长度已经超出了800个像素(800个字节),实际这800个像素和反汇编代码没有关系!...完全就是IDA产生一些信息,更进一步说,实际冠军队伍方法压根与恶意代码图像没有关系,实际是用到了IDA产生信息。

3.1K40

系统讲解 - PHP 缓存技术

有效 Ctrl+F5刷新 无效 无效 文件缓存 数据文件缓存 将更新频率低,读取频率高数据,缓存成文件。...Memcached 最后发布时间为2018-12-24,Memcache 最后发布时间2013-04-07。 Memcached 基于libmemcached,Memcache 基于PECL扩展。...Opcode缓存 Opcode(Operate Code)操作码。 PHP程序运行完后,马上释放所有内存,所有程序中变量都销毁,每次请求都要重新翻译、执行,导致速度可能会偏慢。...APC 扩展最后发布时间为 2012-09-03。...强一致性是很难保证,比如事务一致性,时间点一致性,最终一致性等。 具体问题具体分析吧。 缓存穿透怎么办? 用户请求缓存中不存在数据,导致请求直接落在数据库

1.9K40

【PY】Python3 字节码混淆

在生成 pyc 文件时候也引入了 MagicNumber,来标示此 pyc 文件对应版本号, 需要注意是,pyc 文件只能运行在生成出此文件解释器版本, 在 Python 解释器目录下 \Lib...;   pyc 混淆 思路: 由于 pyc 文件有现成工具 uncompyle6,可以还原成 Python 代码,所以说我们不了解 pyc 格式也没有关系。...但是对于反编译工具来说,这就是一个错误了,直接导致了反编译失败。  ...', 'POP_JUMP_IF_FALSE', 'POP_JUMP_IF_TRUE', 原则这六个都可以使用,但是实际为了方便的话,其实还是 JUMP_FORWARD 和 JUMP_ABSOLUTE...魔法((请把flag{}内内容md5包DASCTF{})) 下来一个压缩包,解压后是一个 pyc 和一个 txt,直接盲猜是将 flag 加密后写入 txt 中了,反编译 pyc, 这报了一个断言错误

37620

妖怪般VerifyError | 奇形怪状bug

大体还是和之前我写那篇文章一个一年没解决ClassNotFoundException|类加载机制探索这个问题非常类似。...(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java...:553) at dalvik.system.NativeStart.main(NativeStart.java) 现象很简单,这次我们所有的dialogfragment其实全挂了,在4.4设备,只要有这个构造就会导致这个异常崩溃...但是大佬大佬也说了下,这种异常在崩溃日志之前就会有类信息校验错误说明,也就是说dalvikvm在校验代码时候会把错误信息打印出来。恰巧就和之前classnotfound异常对应上了。...其中要注意是,异常处理(Exception Hanler)也是在这个时候被校验,它opcode是OP_MOVE_EXCEPTION(0x0d,就是前面日志”rejecting opcode 0x0d

87540
领券