吉林省电力建设总公司网站,google下载安装,读图机 东莞网站建设,四川住房城乡建设厅官网两个概念
ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案
ERC和EIP用于使得以太坊更加完善#xff1b;在ERC中提出了很多标准#xff0c;用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum…两个概念
ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案
ERC和EIP用于使得以太坊更加完善在ERC中提出了很多标准用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum.org/erc
常见ERC标准
ERC-20Token StandardERC-721Non-Fungible Token StandardERC-165Standard Interface DetectionERC-777Token StandardERC-1155Multi Token Standard
ERC-20
主要是指同质化代币标准不同人持有的一个代币是等值的。 ERC-20标准中主要有6个函数和两个事件 其中这6个函数表达的意义是 totalSupply总发行量 balanceOf账户余额 transfer转账 transferFrom针对授权进行转账 approve授权 allowanceowner授权给spender余额 具体的详细见https://eips.ethereum.org/EIPS/eip-20
实现ERC20标准代币
想要发现ERC20标准的代币就需要实现ERC20标准接口中的函数
先写ERC20标准接口
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;interface IERC20 {function name() external view returns (string memory);function symbol() external view returns (string memory);function decimals() external view returns (uint8);function totalSupply() external view returns (uint256);function balanceOf(address _owner) external view returns (uint256 balance);function transfer(address _to, uint256 _value) external returns (bool success);function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);function approve(address _spender, uint256 _value) external returns (bool success);function allowance(address _owner, address _spender) external view returns (uint256 remaining);//_from和_to两个参数有indexed关键字修饰表示这些参数可以作为过滤条件来搜索事件。event Transfer(address indexed _from, address indexed _to, uint256 _value);event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}再实现ERC20标准代币
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;import ./IERC20.sol;contract ERC20 is IERC20{string ercName;string ercSymbol;uint8 ercDecimals;uint256 ercTotalSupply;mapping(addressuint256) ercBalances;//一个人可以有多个委托人授权者被授权者授权金额mapping (addressmapping (addressuint256)) ercAllowance;//合约部署者address public owner;constructor(string memory _name, string memory _symbol,uint8 _decimals){ercName_name;ercSymbol_symbol;ercDecimals_decimals;ownermsg.sender;}//token名称function name() override external view returns (string memory){return ercName;}//token符号function symbol() override external view returns (string memory){return ercSymbol;}//token可以拆分到的精度function decimals() override external view returns (uint8){return ercDecimals;}//token发行总量function totalSupply() override external view returns (uint256){return ercTotalSupply;}//账户余额function balanceOf(address _owner) override external view returns (uint256 balance){return ercBalances[_owner];}//给某人转账function transfer(address _to, uint256 _value) override external returns (bool success){require(_value0,_value must 0);require(_to!address(0),_to is null);require(ercBalances[msg.sender]_value,users balance not enough);ercBalances[msg.sender]-_value;ercBalances[_to]_value;emit Transfer(msg.sender, _to, _value);return true;}//被授权用户用我的token转账;_from: 授权者_to:转给谁function transferFrom(address _from, address _to, uint256 _value) override external returns (bool success){require(ercBalances[_from] _value,users balance not enough);require(ercAllowance[_from][msg.sender]_value,approves balance not enough);require(_value0,_value must 0);require(_to!address(0),_to is null);ercBalances[_from]-_value;ercBalances[_to]_value;ercAllowance[_from][msg.sender]-_value;emit Transfer(_from, _to, _value);return true;}//授权其他用户可以花费我多少tokenfunction approve(address _spender, uint256 _value) override external returns (bool success){// require(_value0,value must 0);//让_value可以等于0当其为0时表示收回授权require(_spender!address(0),_spender can not be null);require(ercBalances[msg.sender]_value,users balance not enough);ercAllowance[msg.sender][_spender]_value; emit Approval(msg.sender, _spender, _value);return true;}//获取授花费的余额tokenfunction allowance(address _owner, address _spender) override external view returns (uint256 remaining){return ercAllowance[_owner][_spender];}//代币发行机制function mint(address _to,uint256 _value) public{require(msg.senderowner,only owner can mint);require(_value0,_value must 0);require(_to!address(0),_to is invalid); ercBalances[_to]_value;ercTotalSupply_value;emit Transfer(address(0), _to, _value);}
}ERC-721
主要是指非同质化代币标准不同人持有的一个代币的价值不一样如艺术品