如何使用Python创建ERC20

开发 后端
ERC20的意思是“以太坊请求注释20”。征求意见是社会团体进行同行评审的一种方式。以太坊通过让人们创造想法并让其他人对它们进行评论来改善生态系统。

[[398796]]

本文转载自微信公众号「区块链研究实验室」,作者链三丰。转载本文请联系区块链研究实验室公众号。

什么是ERC20令牌?

ERC20的意思是“以太坊请求注释20”。征求意见是社会团体进行同行评审的一种方式。以太坊通过让人们创造想法并让其他人对它们进行评论来改善生态系统。

ERC20,是由Fabian Vogelsteller和Vitalik Buterin创建的第20个以太坊评论请求。

该评论请求为在以太坊平台上创建“令牌”提供了一种方法,该令牌是所有令牌遵循的标准,因此平台和工程师可以轻松使用它们,而无需重做。

ERC20中的每一个都遵循相同的模式,并且具有执行基本相同功能的相同功能列表。他们之中有一些是:

  • transfer:在所有者之间转移令牌。
  • balanceOf:如何查看一个地址有多少令牌。
  • transferFrom:允许非所有者将令牌从一个地址移动到另一个地址。
  • approve:批准合同以调用该transferFrom功能。

它们是一种合约,跟踪区块链上每个地址具有多少个价值单位,同时ERC20又代表代币的智能合约。

例子

ERC20令牌的一些示例是LINK,AAVE,USDT和DAI。您会注意到,某些令牌(例如LINK令牌)实际上是ERC20的更高级形式。LINK,尤其是ERC677,它增加了一些额外的功能与工作的预言,但它仍然是向后兼容ERC20s并拥有其所有功能。

另一个流行的令牌标准是ERC777,它在ERC20上进行了一些不错的生活质量改进,并且与ERC20向后兼容。

为什么要制造ERC20?

ERC20的作用以及他们的目的是什么?

1.治理

治理令牌是允许用户在协议的未来中投票和持有股份的令牌。治理令牌的一些示例是UNI,AAVE和CRV。令牌可以“放入”平台中,并用于投票和提议新的方向以供协议收听。

2.保护网络

通常,网络或协议采用多块链,并且协议的整体安全性不应与单个基础区块链联系在一起。协议通常需要使用对协议更有意义的基础资产进行商业交易。它将资产与与网络无关的其他资产的市场波动性分开。

如果它是基础链,那么如果基础市场波动变得更糟,则网络的安全性可能会降低。

3.合成资产和稳定币

如果您有某种形式的价格信息,则可以通过某种抵押支持轻松地制造合成资产。这是获得和交易不在区块链生态系统中的资产的好方法。这正是Synthetix协议的工作原理,将Chainlink的价格信息与SNX抵押的抵押品相结合,使DeFi(去中心化金融)投资者能够接触到传统金融世界。

同理,稳定币也是合成资产,只是它们代表美元等“稳定”资产。Tether,USDC和Dai是稳定币的示例。

4.其他

当提出关于制作ERC20代币的想法时,创意是您的唯一限制。我们已经看到了一些协议,这些协议使用ERC20作为基础抵押资产进行抵押,提供奖励以鼓励使用协议(请参阅收益农业),围绕代币创造经济等等。

如何创建一个ERC20?

让我们从克隆此示例存储库并安装eth-brownie开始,我们假设您已经安装了Python,Brownie是致力于简化智能合约部署的Python框架。

  1. git clone https://github.com/PatrickAlphaC/erc20-brownie 
  2. cd erc20-brownie 
  3. pip install eth-brownie 

contracts文件夹中有两个合同:

  • EasyToken.sol
  • TokenERC20.sol

这TokenERC20是一个示例,我们可以自己编写整个合同,因为我们要做的就是确保实现适当的功能。

另外,更简单的方法是使用OpenZeppelin软件包。这样可以抽象出大多数功能,并允许我们使用Solidity的继承关系来使我们的合同“继承”我们需要实现的所有功能!我们要做的就是给令牌命名,符号和初始供应。

  1. pragma solidity ^0.6.0; 
  2. import "@openzeppelin/contracts/token/ERC20/ERC20.sol"
  3. contract EasyToken is ERC20 { 
  4.     constructor() public ERC20("EasyToken""EzT") { 
  5.         _mint(msg.sender, 1000000000000000000000000); 
  6.     } 

在此示例中,我们EasyToken用符号象征令牌,EzT初始供应量为100万。您可能会问,为什么它不是的最初供应1000000000000000000000000。好吧,Solidity不适用于小数,因此我们实际上将18个额外的零指定为小数,因此我们可以与令牌的小数部分进行交互。

一旦创建了令牌合约,我们就可以创建一个脚本将其部署到区块链中:

  1. from brownie import accounts, config, EasyToken, EasyToken 
  2. from scripts.helpful_scripts import get_account 
  3. def main(): 
  4.     account = get_account() 
  5.     erc20 = EasyToken.deploy({"from": account}) 

Brownie允许我们取消合同本身,我们可以在主合同中调用该函数:

  1. EasyToken.deploy({"from": account}) 

这会将其部署到任何与Brownie连接的区块链上。您会注意到,对于每笔交易,我们还需要account与之关联。我们account从get_account职能中得到了回报。我们现在可以忽略这一点。

部署到区块链

默认情况下,此软件包设置为部署到本地ganache区块链,您将需要两个环境变量:

  1. export WEB3_INFURA_PROJECT_ID='aaa5aa5a5a5a55555aaa555a5a5555a`# export PRIVATE_KEY='asdfasdfasdfasdfasdfasdfasdfas' 

您WEB3_INFURA_PROJECT_ID是Infura中的项目ID 。Infura是我们连接到区块链的一种方式,并且具有免费层供我们使用。您还需要将自己设置PRIVATE_KEY为环境变量。您可以从MetaMask中获取私钥。

设置您的MetaMask

您可以通过从MetaMask导出私钥并将其添加0x到开头来获取私钥。

设置环境变量后,您还需要获取一些Testnet Kovan ETH。

然后,您可以运行deploy脚本:

  1. brownie run scripts/2_deploy_easy_token.sol 

您将看到类似以下的输出:

  1. Running 'scripts/2_deploy_easy_token.py::main'... 
  2. Transaction sent: 0x223af315917c07956243ed0915a3b142a5697ad6e497adeae3e3ad886f37b37a 
  3.   Gas price: 3.0 gwei   Gas limit: 792680   Nonce: 3653 
  4.   EasyToken.constructor confirmed - Block: 24760550   Gas used: 720619 (90.91%) 
  5.   EasyToken deployed at: 0x8922C8e8534e10A0B42c072eA0e94A80Cb2E0985 

然后,我们可以获取该地址并将其放入Kovan Etherscan,您将在其中看到您的令牌!

您要做的最后一件事就是获取该地址并将其添加到您的MetaMask中。您可以单击MetaMask中的“添加令牌”按钮,转到custom token,然后在Kovan网络上添加您的合同地址,您应该在那里看到令牌。

恭喜你!您已经部署了第一个ERC20令牌!

 

责任编辑:武晓燕 来源: 区块链研究实验室
相关推荐

2021-05-14 14:33:07

Python加密货币

2021-10-28 19:08:29

Python虚拟环境

2020-11-12 18:57:14

摘要PythonNLP

2023-05-19 08:00:00

ReactJSJavaScript蜘蛛图

2014-05-12 16:40:13

Linux命令快照

2023-11-27 08:24:57

FormikReact

2011-05-24 10:24:29

创建与使用VMware

2009-08-06 16:44:03

C#创建WebServ

2010-02-03 10:45:33

2022-03-30 07:52:10

IDEAGitJava

2021-06-01 09:27:52

视频动画Remotion

2013-01-14 11:33:00

IBMdW

2023-04-13 15:04:57

Java微服务架构

2021-03-23 07:36:57

FlowIPFSNFT

2010-06-01 09:18:46

SVN创建项目

2017-05-16 11:14:00

VCHA集群负载

2023-05-11 08:00:00

JavaScript柱状图

2010-02-01 17:18:23

Python多线程环境

2021-04-08 18:39:57

JavaScriptExpress区块链
点赞
收藏

51CTO技术栈公众号