Token代码详解

本文详细比较了Solidity中require和assert的使用场景,require主要在函数开头验证条件,assert则用于预防错误,强调预防性。通过实例展示了如何在Token合同中运用这两种方法确保代码正确性和安全性。

require和assert区别(知识补充)

if(msg.sender != admin) { throw; }等价于require(msg.sender==admin),require()是新版的用法

以下场景使用 require() :
验证用户输入,即: require(input<20);
验证外部合约响应,即: require(external.send(amount));
执行合约前,验证状态条件,即: require(balance[msg.sender]>=amount)
一般地,尽量使用 require 函数
一般地,require 应该在函数最开始的地方使用。

以下场景使用 assert():
检查 overflow/underflow,即:c = a+b; assert(c > b)
检查非变量(invariants),即:assert(this.balance >= totalSupply);
验证改变后的状态
预防不应该发生的条件
一般地,尽量少使用 assert 调用
一般地,assert 应该在函数结尾处使用
基本上,require() 应该被用于函数中检查条件,assert() 用于预防不应该发生的情况,但不应该使条件错误。

Token代码详解

pragma solidity ^0.4.25;

声明使用的solidity语言版本

interface tokenRecipient{
   
   function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public;}

声明一个接口receiveApproval,可以和继承该接口的其他合约互相调用,interface是声明接口的关键字。

contract Token{
   
   

    string public name;//代币名
    string public symbol; //代币简称
    uint8 public decimals = 2; // 定义token使用的小数点后几位,
    //2即为后面两位数为小数点后的数
    uint256 public totalSupply; //总发行量
    address admin; //管理员地址

声明Token的各项基本属性

mapping(address => uint256) public balanceOf; // 用于返回某个地址的账户余额

声明一个映射类型的变量balanceOf,存储每个账户对应的余额(剩余Token数量)

mapping(address => mapping(address => uint256)) public allowance; 
//返回_spender仍然被允许从_owner提取的金额

映射型变量allowance,表示存储账户允许第三方代理的余额数目(Token数),只要第三方进行的操作不超过这个余额数,想干什么就干什么。

event Transfer(address indexed from, address indexed to, uint256 value);
//货币转移,value:转移数量,from,to:转移地址
event Burn(address indexed from, uint256 value);//烧钱

触发该事件时,将参数信息传输给客户端,告知执行了该操作,即该事件发生。

modifier onlyAdmin(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值