IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> solidity合约标准----ERC -> 正文阅读

[区块链]solidity合约标准----ERC

两个概念

  1. ERC
  2. EIP

常见的ERC标准

  1. ERC-20Token Standard(早期区块链项目都基于此标准)
  2. ERC-721 Non-Fungible Token Standard(非同质化标准)
  3. ERC-165 Standard Interface Detection
  4. ERC-777 Token Standard
    其它标准见 eips.ethereum.org/etc

ERC-20标准详解

ERC-20为一套接口,实现了这套接口,即为实现这套标准

在这里插入图片描述

pragma solidity^0.6.1;
  interface IERC20 {
  function totalSupply() external view returns (uint256);

  function balanceOf(address who) external view returns (uint256);

  function allowance(address owner, address spender)
    external view returns (uint256);

  function transfer(address to, uint256 value) external returns (bool);

  function approve(address spender, uint256 value)
    external returns (bool);

  function transferFrom(address from, address to, uint256 value)
    external returns (bool);

  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}
pragma solidity^0.6.1;
import "./IERC20.sol";
contract test_erc20 is IERC20{

  string private _name; //指定名称
  uint256 private _totalSupply;//存储总的发行量
  address private admin;//定义管理员,用于发布发行量,由于ERC20标准没有规定如何发行,因此需要自己设置发行机制
  mapping(address=>uint256) private _balances;
  mapping(address=>mapping(address=>uint256))private _allowance;

  constructor(string memory name) public{
      _name=name;
     _totalSupply=0;
     admin=msg.sender;
  }
  function name() external view returns(string memory){
      return _name;
  }
  //挖矿函数
  function mint(address to ,uint256 value) external{
      require(admin==msg.sender,"only admin can do");
      require(address(0)!=to,"to must is an address");
      _balances[to]+=value;
      _totalSupply+=value;
      emit Transfer(address(0),to,value);

  }
  //总的发行量
  function totalSupply() external override view returns (uint256){
      return _totalSupply;
  }
  
  //账户的余额
  function balanceOf(address who) external override view returns (uint256){
      return _balances[who];
  }
 //查看授权的余额
  function allowance(address owner, address spender) override
    external view returns (uint256){
         return _allowance[owner][spender];
    }
//转账接口  A-->B 200   A-200   B+200   
  function transfer(address to, uint256 value) override external returns (bool){
        require(value>0,"value must >0");
        require(_balances[msg.sender]>=value,"balance must enough!");
        require(address(0)!=to,"to must is an address");
        _balances[msg.sender]-=value;
        _balances[to]+=value;   
        //调用事件函数
        emit Transfer(msg.sender,to,value);  
  }
//授权  
  function approve(address spender, uint256 value)override 
    external returns (bool){
        require(_balances[msg.sender]>=value,"balance must enough!");
        require(address(0)!=spender,"to must is an address");
        _allowance[msg.sender][spender]=value;
        //调用事件
        emit Approval(msg.sender,spender,value);

    }
 //授权转账
  function transferFrom(address from, address to, uint256 value)override
    external returns (bool){
        require(address(0)!=to,"to must is an address");
        require(value>0,"value must >0");
        require(_allowance[from][to]>=value,"allowance's value must enough");
        _allowance[from][to]-=value;
        _balances[from]-=value;
        _balances[to]+=value;
        //调用事件
        emit Transfer(from,to,value);

    }
}

函数测试

选择第一个账户为管理员,负责部署合约

在这里插入图片描述

1. 部署合约

在这里插入图片描述

2. 模拟挖矿,赋予参与方金额

注意:只有管理员拥有挖矿权限,即调用挖矿函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.查询余额以及总的发行量

这里是引用

在这里插入图片描述

4.进行转账

第三账户—>第二个账户
转账的三要素:谁转账,转给谁,转多少

在这里插入图片描述

5.进行授权

授权第三方进行转账

在这里插入图片描述

6.授权转账

注意:这一步是在上一步骤的基础上进行的,转账的三要素要匹配,否则会出现错误

在这里插入图片描述

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:48:21  更:2022-04-18 17:48:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:26:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码