ETH-美链
约 648 字大约 2 分钟
2021-12-16
了解了The DAO事件,再来看下Beauty Chain事件。它是以太坊上发行的一种代币,以太坊上有很多各种各样的代币。很多在上面做ICO的。
ICO可能没听过,IPO应该了解,Initial Public Offering。ICO是Inital Coin Offering。这些发行的代币没有自己的区块链,而是以智能合约的形式运行以太坊的EVM平台上。发行这个代币的智能合约对应的是以太坊状态树中的一个节点,这个节点有它自己的账户余额,相当于这个智能合约一共有多少个以太币。在合约里,每个账户有多少个代币作为存储树中的变量存储在智能合约的账户里。 代币的发行、转账、销毁都是通过调用智能合约中的函数实现的。这也是跟以太坊的以太币不太一样的地方。它不像以太币那样需要通过挖矿来维护一个底层的基础链。像以太坊上每个账户有多少以太币,是直接保存在状态树上的变量。以太坊上的转账是通过发布一个交易到区块链上。代币不是这样的,需要转账的话,是通过智能合约里的函数完成的。
每个代币可以制定自己的发行规则,比如说一个以太币兑换一百个代币。像ERC 20就是以太坊上发行代币的一个标准,规范了所有发行代币的合约应该实现的功能和遵循的接口。ERC的意思是Ethereum Request for Comments。
这是batchTransfer的实现:
问题是第三行计算乘法的时候,会溢出。相当于是sub了很小的数,但是给address发了正常的数。意思是系统中凭空出现了币。
所以,再进行数学运算的时候,一定要谨慎,solidity其实提供了安全的数学计算的库。它里面提供的操作运算都会自动检测有没有溢出。
其实BEC的实现也只有一个乘法没用安全库,下面的减法和加法都是安全库。
不小心的操作,酿成了悲剧。币就凉了。