![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
solidity
文章平均质量分 50
弘宇的IT屋
千里之行,始于足下
展开
-
solidity合约调用合约方法的方式
1.通过接口的形式pragma solidity >=0.7.0 <=0.8.0; // SPDX-License-Identifier: MITinterface IRC20 { function depositEther() external payable; function withdraw(uint256 amount) external; function getBalance(address addr) external .原创 2021-01-20 14:26:20 · 3489 阅读 · 1 评论 -
solidity 重入攻击测试
任何从合约 A 到合约 B 的交互以及任何从合约 A 到合约 B 的以太币Ether的转移,都会将控制权交给合约 B。 这使得合约 B 能够在交互结束前回调 A 中的代码。在合约中运用转账调用call方法,可以消耗完所有的gas,而send和transfer只消耗2300。为了便面重入,可以使用“检查-生效-交互”(Checks-Effects-Interactions)模式,或者加锁限制:以下两个合约模拟了攻击者和受害者,通过重入攻击,获得了受害者所有的ETH。pragma soli..原创 2021-01-19 17:58:25 · 627 阅读 · 0 评论 -
If you intended this as a fallback function or a function to handle plain ether transaction
solidity 出现 If you intended this as a fallback function or a function to handle plain ether transaction,use the "fallback" keyword or the "receive" keyword instead.原因是solidity升级版本,不支持function。function() public payable {}修改为fallback() external paya.原创 2021-01-19 12:02:36 · 768 阅读 · 0 评论 -
Solidity 中 revert(), assert() 和 require()
函数assert和require可以用于检查条件,如果条件不满足则抛出异常。assert():函数只能用于测试内部错误,检查不变量,正常的函数代码永远不会产生Panic, 甚至是基于一个无效的外部输入时。 如果发生了,那就说明出现了一个需要你修复的 bug。如果使用得当,语言分析工具可以识别出那些会导致 Panic 的assert条件和函数调用。想象为一个过于自信的实现方式,即使有错误,也会执行并扣除 gas。下列情况将会产生一个Panic异常: 提供的错误码编号,用来指示Panic的类..原创 2021-01-16 16:56:09 · 1086 阅读 · 1 评论 -
solidity 内联汇编 操作符
操作码 标记 解释 stop - 停止执行,相当于返回(0,0) add(x,y) x + y sub(x,y) x - y mul(x,y) x * y div(x,y) x / y sdiv(x,y) x / y ,对于有符号数,用补码 mod(x,y) x % y smod(x,y) x % y,对于有符号数,用补码 exp(x,y...原创 2021-01-15 14:56:07 · 668 阅读 · 0 评论 -
solidity 关于ERC677标准
ERC677 标准是 ERC20 的一个扩展,它继承了 ERC20 的所有方法和事件。前述:ERC20要将代币转移到合约,通常需要三步,比较繁琐。a.代币提币,必须要申请合约授权。b.告诉合约,代理已获得授权。c.运行合约代码,提取代币。ERC223运用transfer(address,uint256,bytes)解决了这个问题,但也引入了其它的问题。ERC223通过改变ERC20的tansfer方法,指定转移到未实现onTokenTransfer的合约,应抛出...原创 2021-01-14 16:40:14 · 409 阅读 · 1 评论 -
solidity 引用类型memory,storage,calldata
引用类型包括结构,数组和映射,变量的存储有三种类型,memory,storage和calldata。memory(值传递)即数据在内存中,因此数据仅在其生命周期内(函数调用期间)有效。不能用于外部调用。storage(指针传递) 状态变量保存的位置,只要合约存在就一直存储。calldata 用来保存函数参数的特殊数据位置,是一个只读位置。是不可修改的、非持久的函数参数存储区域,效果大多类似memory。是外部函数的参数所必需指定的位置,但也可以用于其他变量。局部变量/状态变量 默认是..原创 2021-01-14 11:58:06 · 1175 阅读 · 0 评论 -
solidity 关键字constant/view/pure/payable的区别
https://learnblockchain.cn/docs/solidity原创 2020-12-05 11:36:36 · 1940 阅读 · 0 评论