智能合约 -- 安全考量

相关概念

就是我们写代码是考虑这种涉及到合约安全的问题:下面这个方面写合约是重点考虑。

创建消息发送以太币

1.要创建消息发送以太币,您需要构建一个有效的交易,并将其发送到以太坊网络中。

2.交易被发送到以太坊网络后,会经过矿工的验证和打包 ,并添加到区块链中。一旦交易完成确认,指定的以太币数量将从发送者地址转移到接收者地址

ps : 消息的执行底层就是智能合约或者不需要,智能合约也就是对交易的一种校验。

安全常量

1.重入攻击: 预防重入,最简单就是现将合约里的账户置0,然后再向账户地址发送以太币。

**2.gas的限制和循环:**区块消耗的gas和拥有的gas不成正比。

  1. 合约创建:当您部署一个新的合约时,将消耗一定数量的 Gas。Gas 的数量取决于合约的字节码大小和构造函数的复杂性。

  2. 数据存储和读取:对状态变量进行写操作(即存储)或读操作(即获取)都会消耗 Gas。写操作的消耗量通常比读操作更高,因为它涉及到更新状态。

  3. 函数调用:当您调用合约中的函数时,将消耗 Gas。消耗量取决于函数的复杂性、参数的数量和大小,以及函数内部的计算操作。

  4. 控制结构:包括条件语句(如 if、else、switch)、循环语句(如 for、while)和异常处理(如 try/catch)。这些结构中的每个执行路径都会消耗 Gas。

  5. 数组和映射操作:对数组和映射进行添加、删除、修改和访问等操作都会消耗 Gas。具体消耗量取决于操作涉及的元素数量和复杂性。

  6. 加密操作:加密和解密操作,如哈希函数、签名函数和加密函数,通常会消耗大量的 Gas。

  7. 外部调用:与其他合约进行交互,包括消息发送、合约调用和委托调用等操作,都会消耗 Gas。

  8. 合约自毁:当您在合约中调用 selfdestruct 函数来销毁合约时,也会消耗一定数量的 Gas。

3. 发送接受以太币:

  1. 调用栈深度:不能超过1024.

  2. 授权代理 :

6.solidit中mapping 是无法删除,只能通过

1.将元素设置为默认值

2.就是在元素设置默认值的同时,同时一个另一个map标记删除。

javascript 复制代码
mapping(uint => bool) public isDeleted; 
mapping(uint => uint) public myMapping; 
function deleteFromMapping(uint _key) public {
     delete myMapping[_key];    // 删除键值对, 就是将mapping[key] 的值设置为默认值
     isDeleted[_key] = true;    // 标记已删除
 }

7.限制访问: 权限修饰符之类的

相关推荐
用户962377954481 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主2 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954484 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954484 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star4 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954484 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher6 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
木西6 天前
揭秘 Web3 隐私社交标杆:CocoCat 的核心架构与智能合约实现
web3·智能合约·solidity