当前位置: 首页 > article >正文

再学:合约继承 、抽象合约 solidity接口、库、事件 合约重入攻击

目录

1.合约继承

 2.抽象合约

 3.接口

4.库

5.事件

6.重入攻击


1.合约继承

这里的代码解释:B继承A

B可以访问A的set()方法(即便是internal也可以),也可以拿到A的a变量。

只要这些在A的东西不是private就行

若想在子类可以重写这个方法

要在父类加上virtual,在子类加上override

 2.抽象合约

 

 3.接口

使用 new 关键字时,你不需要手动传递合约地址,因为 new 操作符会自动处理地址分配。而使用接口时,你需要传递合约地址,因为接口需要知道它应该与哪个具体的合约实例进行交互。这是接口提供灵活性和抽象性的代价,它允许你在不知道具体合约实现的情况下编写代码。 

这里的uint public count; 也会创建一个get的,所以在接口的地方也要写一个count()方法 

接口必须是external,因为外部要调用

 

4.库

纯计算

 内部库

也可以用以下的调用方式 

链接外部库 

5.事件

 

用地址作为索引

事件会记录在日志当中。

6.重入攻击

攻击者会不断地从银行withdraw fallback withdraw fallback.. 直到银行里没有钱。

 两种解决方法

1.先检查 - 再修改 -最后交互

先将余额全部提取出来,然后将余额设置为0,这样即便call完,又想重复进入withdraw,余额都是0

2.重入锁控制 

解释:攻击者会在调用完call后,就执行withdraw方法,因此若有重入锁的话,第一次进入withdraw方法,locked默认为0,可以执行,然后locked变成1,当攻击者想循环进入withdraw时,因为locked一直为1,从而无法进入下一个withdraw

 

 


http://www.kler.cn/a/593508.html

相关文章:

  • 快速迭代:利用 nodemon 和其他工具实现 Express.js 热更新
  • Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.3~2.6)
  • python|exm5-3re模块,正则表达式概念介绍|match()、search()、findall()、sub()、split()
  • LoRA中黑塞矩阵、Fisher信息矩阵是什么
  • python主成分分析法1
  • python函数的多种参数使用形式
  • vue+echarts实现饼图组件(实现左右联动并且数据量大时可滚动)
  • GenICam标准
  • 【C#语言】C#中的同步与异步编程:原理、示例与最佳实践
  • MySQL 基础学习文档
  • LeetCode-有效括号
  • 使用Java实现Oracle表结构转换为PostgreSQL的示例方案(AI)
  • 非对称加密算法及逆向数据分析研究
  • 前端样式库推广——TailwindCss
  • 【STM32单片机】#1初识STM32新建工程
  • LeetCode-回文数
  • 介绍HTTP协议基本结构与Linux中基本实现HTTPServer
  • CentOS系统下安装tesseract-ocr5.x版本
  • C++特性——RAII、智能指针
  • stability ai推出的 AI模型2D图像转3D视频