几行代码生成自己的Token代币

78f14fad28f34f39d390669614cdf042.png

概念

什么是Token代币?

Token这个词,在开发领域很常见,刚看见Token代币这个词的时候,我确实懵逼了一段时间,比如常规的前后端Web程序会有Token的概念,它用于表明用户访问当前网站时的身份,比如编译原理中的Token,它用于表明词法分析阶段,代码会转为Token流,但区块链中的Token与前两者在概念上没有任何关系。

Token代币这个词出自ERC20协议,与常见的网络协议一样,协议只是用于规定程序的规则集,比如TCP/IP协议,为了方便计算机的网络数据互通,程序在传输数据时,数据的格式与程序发送数据与接收数据的行为都要满足TCP/IP协议一样,ERC20也如此,我们可以通过https://eips.ethereum.org/EIPS/eip-20来查看ERC20具体的规则,你浏览后就会发现,它会要求你的智能合约必须实现某些函数。

从ERC20这个角度看,Token只是记录在智能合约上的一个数值,目前很多DApp应用的Token之所以可以交易,是因为这里DApp的智能合约都遵守ERC20规范。现在有基于其改进的ERC776和ERC777,这些新的规范都向下兼容了ERC20。

从代码上看,不同应用的Token代币,都是这一行代码,你钱包账号的地址以及该地址对应的数值(uint256类型),这就是你这个钱包具体的Token,而各种交易操作就是对这个数值的操作,非常简单,代码如下:

mapping(address => uint256) private _balances;

这里吐槽一句,一开始我也是从网上了解Token的概念,越看越迷糊,如果是你开发同学,直接看相应的协议吧,直达本质。

那Token与以太坊有什么关系?

Token基于智能合约实现,这个智能合约要满足ERC20协议,而智能合约需要在以太坊网络中运行,这样Token也具有去中心、防篡改的特性了,直白点理解,Token就是智能合约上记录的一个数值,你要修改这个数值,其实就是要修改以太坊网络的状态,需要花费相应的gas。

实现

简单的概念介绍结束,下面通过几行代码来实现一下。

正常情况是,我们需要基于ERC20的规定,在自己的智能合约中实现ERC20要求我们实现的各种函数,但有人已经帮我们实现好了,我们直接通过solidity的继承功能,可以直接拿来就用。

第三方已经实现了规范的协议:

c73b8d401c78d725bd07a360a056005d.png

代码地址为:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol

有了这个ERC20.sol,我们只需要import然后继承用一下就好了,但如果你像我一样,特别懒,可以直接翻一下openzeppelin的文档:https://docs.openzeppelin.com/contracts/4.x/erc20。

2b2f40b48d38f8a8dbde0d9986e4d239.png

直接将这里的代码,全部复制下来,改一下你需要生成代币的名称和符号就好了。

注意,这里使用的solidity是 0.8.0,之前文章中提到,0.8.0版本的solidity,我们就不用担心数值溢出的问题了。

复制到本地,修改一下:

// contracts/AyuToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract AyuToken is ERC20 {
    // AyuToken: Token的名称,这里我的Token代币叫AyuToken
    // AT: Token的symbol(符号),这里我的Token代币的符号是AT
    constructor(uint256 initialSupply) ERC20("AyuToken", "AT") {
        // initialSupply: 初始的Token数量
        _mint(msg.sender, initialSupply);
    }
}

创建brownie项目,然后写一下部署代码:

from brownie import AyuToken
from scripts.utils import get_account
from web3 import Web3

# Token代码的初始金额值
initialSupply = Web3.toWei(1000, 'ether')

def main():
    account = get_account()
    ayu_token = AyuToken.deploy(initialSupply, {"from": account})
    print(ayu_token.name())

运行一下,部署成功,etherscan查询如下:

1e32092ac5dfc257647730eb9178c0f5.png

打开小狐狸插件,导入你部署的这个合约地址,可以找到你刚创建的AT代币。

a687d3b5bf5955b657adc504ea82a6aa.png

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>