智能合约开发必读:ERC20 Token合约你可能不知道的坑

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

前不久,轰动一时的BEC事件在币圈和链圈掀起了不小的反响,智能合约安全一度成为焦点话题。

通过一个小小的整数溢出漏洞,黑客盗取了巨量的BEC token,迫使交易所不得不暂时停止交易。一时间BEC价格呈现断崖式下跌。随后,SMT token 的智能合约也因为相同的问题遭到了攻击。
两次事件都给项目发行方和token持有者造成了巨额的损失。

据统计,截止2018年5月12日为止,以太坊上部署的合约总量共计 1628059 个,其中ERC20合约数量为 71233 个,占比 4.3%。
这些合约所代表的经济价值更是难以估量。
erc20creation

上图反映了自以太坊平台诞生以来,ERC20代币合约的创建情况,整体呈现增长趋势。自2017年6月开始便持续走高,而2018年的增长幅度尤为明显,平均每日合约创建数约为 320 个,
尤其在今年三月份,一度达到峰值,一天内创建的合约数量更是超过600个。随着区块链热度的进一步加强,越来越多的区块链项目也在萌芽,相信2018年新合约的数量还会逐步上升。

公开数据表明,大量已经部署的智能合约或多或少都存在着一定的安全风险和漏洞,BEC事件也只是冰山一角。那么就ERC20合约而言,除了整数溢出漏洞以外,还有可能面临哪些风险呢?

  • 可重入

    若一个程序或子程序可以「在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错」,则称其为可重入(reentrant或re-entrancy)的。

    在智能合约代码中,黑客可以利用fallback函数,来递归调用包含 call.value() 的函数 ,从合约中重复提取以太币。通常造成该类事件的原因是余额校验不到位或余额更新不及时。

    当ERC20代币合约中涉及以太币的转出,应当尤为注意。以一个 withdraw 函数为例,这也是ERC20合约中经常出现的函数。以下代码中首先进行余额校验,并向msg.sender地址转出以太币,
    再修改 balance 数组中余额值。当函数执行到 msg.sender.call.value(amount)() 时,黑客就可以通过msg.sender的 fallback函数来重复调用 withdraw,
    进而重复执行 msg.sender.call.value(_amount)(),直到gas全部消耗完毕或者合约中的以太余额全部被取完。于是就给黑客实现 reentrancy 攻击创造了条件。

圈钱跑路 ERC20 Token 合约代码分析 ERC20 Token 合约代码分析 合约接口代码 // https://github.com/ethereum/EIPs/issues/20 // 接口标准 contract ERC20 { function totalSupply() constant returns (uint totalSupply); // 总发行量 function balan... 阅读详情

相关推荐

圈钱跑路 发行自己的ERC20 Token

发行自己的ERC20 Token 这次主要实现 发行一个自己的ERC20 标准的 Token. (然后进行ICO, 圈钱跑路, 走上人生巅峰,XD) 其实把Token 叫做代币, 容易让人产生误解.实际上是一种凭证, 只是被现在狂热的人们搅浑了. Token的持有人可以完全控制资产,遵守ERC20token可以跟踪任何人在任何时间拥有多少token. 前 现在币圈的...

Quartz's Blog 7601

4、以太坊智能合约开发(自己编写ERC-20Token合约

What are Tokens? Ether 是以太坊的本土货币,用于智能合约 Tokens 是构建在以太坊平台上用于在同的机构或实体之间基于一些指定的规则来交换价值的token智能合约 智能合约被用来创建tokens,这些智能合约也促进了tokens的交易,和tokens的账户余额记录。 当一个Token被创建后,该token就可以用来交易、花销、和转账给别人 什么是Token ...

VictorZhang 2449

ERC20代币转账以及余额查询--java(web3j)

ERC20代币转账java(web3j) 准备工作:转账之前你得有一个ERC20代币,代币发行戳这里,可以在测试网上进行测试。 因为发行代币本质就是部署智能合约,是需要消耗gas的,代币转账也是需要消耗eth作为手续费的。 准备工作完成之后,就让我们直接进行ERC20代币转账吧~ 通过调用web3j的API完成相关操作,所需maven依赖: <dependency> <g...

橙子君的博客 1万+

2023年全国职业院校技能大赛-高职组“区块链技术应用”赛项赛卷(1卷)

选手完成本模块的任务后,将任务中设计结果、运行代码、运行结果等截图粘贴至客户端桌面【区块链技术应用赛\重命名为工位号\模块一提交结果.docx】中对应的任务序号下。

君逍遥o 5278

ERC 20 协议精讲

什么是 ERC20TokenERC20的标准接口是这样的: contract ERC20 { function name() constant returns (string name) function symbol() constant returns (string symbol)......

bareape的博客 3316

tx.origin 与 msg.sender

web3/solidity 游戏,在第 4 级上,我浪费了几分钟来了解 tx.origin 和 msg.sender 之间的区别,它们在solidity 中构建全局变量。您可能会注意到,账户地址和智能合约地址都可以是 msg.sender 但 tx.origin 将始终是账户/钱包地址。,tx.origin 保存交易发送者的地址,msg.sender 保存消息发送者的地址。指调用智能合约函数的账户地址,只有账户地址可以是tx.origin。最近损失了 800 万美元,是的,由于。一张图片胜过千言万语。

qq_42200107的博客 3579

理解Solidity 中的 tx.origin 和 msg.sender

开发者需要了解在Solidity中tx.origin和msg.sender的区别。这两个全局变量经常被混淆,尽管它们之间有着根本的同。虽然乍一看它们可能相似,但在交易的上下文中,tx.origin和msg.sender代表同的地址。在这篇博客文章中,我们将深入探讨这些变量的含义。

Spade_sec的博客 1605

Ethernaut Level 4: Telephone - tx.origin vs msg.sender 身份验证绕过

✅ 永远要使用tx.origin进行身份验证✅ 使用msg.sender进行安全的身份检查✅ 理解调用链中的身份传递机制。

The future is already here it's just not evenly distributed。 589

从零教你学习ERC20智能合约Solidity智能合约

更多区块链方面业务咨询请关注我们的主页 一、安装环境 1、在chrome浏览器安装MetaMask插件 2、安装插件 安装方法,下载后解压,在浏览器输入chrome://extensions/,将安装文件拖拽进浏览器,即可安装 3、新建钱包 输入密码,保存助记词 4、转入一个ETH 二、发布合约 进入到这个网站进行 在此是需要已经安装Chrome插件的 1、合约模版 pragma solidity ^0.4.16; interface tok.

BUG设计师 3万+

区块链 --- 智能合约

智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,主要起到了数据执行的作用。可以减少对信任中间人的需求,降低仲裁和执行成本。

谬也的博客 1万+

理解ERC-20 token合约

这周(译者注:原文发表于9月15日)的早些时候,ERC-20 token接口正式成为了改进协议,明确了其定义。这篇文章会简单介绍各种符合ERC-20标准的token,解释ERC-20的特征和功能,以供读者了解什么是token合约,以及开发者应该如何使用该标准。 ERC-20最初作为一种尝试,旨在为以太坊(Ethereum)上的token合约提供一个特征与接口的共同标准,并且,它现在已经被证明是非...

跨链技术践行者 8487

一分钟教你学会编写erc20智能合约

前期准备:外网连接、以太坊钱包(MetaMask)、ERC20Coin智能合约.sol 总步骤: 1.安装环境 2.编写属于你的智能合约 3.发布合约

知识的共享,拓宽视野,深化思考,获得新的启发. 5024

ERC-20 Token合约详解

.ERC-20 token合约是什么?ERC-20是基于以太坊区块链上设计和使用的token合约。只要遵循一系列规则,就可以共享、交换其他新的token,或者转移到加密钱包中。以太坊区块链创建了这些规则,其中包括三条可选规则和六条强制性规则。可选择的◆Token Nam◆Symbol◆Decimal 强制性的◆totalSupply◆balanceOf◆transfer◆transferFrom...

qq_42203876的博客 1667

智能合约ERC-20介绍

ERC20全称为,是一种智能合约标准,用于以太坊网络上的代币发行ERC20function name() public view returns (string) // Token的名称function symbol() public view returns (string) // Token的符号。

在这个数字革命的时代,我们将引领您穿越去中心化、智能合约、加密货币以及分布式应用程序的世界。无论您是初学者还是经验丰富的区块链开发者,我们都致力于为您提供有价值的信息和见解。 2803

NFT 是啥?从 ERC20 说起

什么是ERC ERC 全称是Ethereum Request for Comment, 它表示以太坊开发者提交的一系列协议提按(参见ERC | Ethereum Improvement Proposals)。ERC20(常用写法 ERC-20)指的是序号为20ERC协议标准,协议细节参考:EIP-20: Token Standard (ethereum.org)。 ERC20 以我们最常用的 ERC20代币:USDT 为例, 我们可以通过钱包软件(小狐狸扩展钱包或TokenPocket钱包)给别..

biubiutools的博客 4627

erc20-meta-token:赋能ERC-20代币的ERC-1155转换器

erc20-meta-token:赋能ERC-20代币的ERC-1155转换器 项目介绍 erc20-meta-token 是一个开源的智能合约项目,旨在为现有的 ERC-20 代币添加 ERC-1155 功能。通过将 ERC-20 代币封装在 ERC-1155 合同内,该项目使得任何 ERC-20 代币可以像 ERC-1155 合同一样运作。这一创新功能为去中心化应用(DApps)的开发带来了极...

gitblog_00140的博客 1086

ERC-20 Tokens(代币)协议及实现的基本解读

一句话:ERC-20协议是对于在区块链网络中发行的Tokens(代币)的规范。第二句话:其规定了什么样子的智能合约产生出的地址能被称为Tokens(代币)。

zeqianxixiao的博客 1576
上一篇: SECBIT: 美链(BEC)合约安全事件分析全景
下一篇: 围观!81个智能合约惊现同一漏洞,是巧合?还是另有玄机?
安比实验室SECBIT
博客等级 码龄8年 169粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值