以太坊开发教程(学习以太坊开发的必备教程 – 不到50行代码开发一个简单ERC20代币)

以太坊开发教程-不到50行代码开发一个简单ERC20代币

以太坊是一个具有自己编程语言Solidity的区块链平台,可以用来开发智能合约和去中心化应用程序(DApp)。在这篇文章中,我们将通过不到50行的代码,展示如何开发简单的ERC20代币,并在以太坊网络中进行部署并进行测试。

第一步:安装Truffle和Ganache-cli

Truffle是一个用于开发、测试和部署智能合约的全球性工具集。Ganache-cli是一个用于本地开发、测试和调试以太坊应用程序的命令行工具。我们需要在本地计算机上安装这两个工具,才能开始本次代币开发。

第二步:创建项目

使用任何您习惯的IDE,创建一个空项目,将项目名设为您选择的名称。在项目的根目录下,使用以下命令创建新的Truffle项目文件夹:

truffle init

第三步:创建ERC20代币合约

在项目的contracts目录下创建一个名为Token.sol的Solidity合约文件,该文件包括以下代码:

“`

pragma solidity ^0.5.0;

// ERC20标准接口

interface IERC20 {

function totalSupply() external view returns (uint256);

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

function transfer(address recipient, uint256 amount) external returns (bool);

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

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

function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

}

// 实现ERC20代币

contract Token is IERC20 {

string public name;

string public symbol;

uint8 public decimals = 18;

uint256 private _totalSupply;

mapping(address => uint256) private _balances;

mapping(address => mapping(address => uint256)) private _allowed;

constructor (string memory _name, string memory _symbol, uint256 initialSupply) public {

name = _name;

symbol = _symbol;

_totalSupply = initialSupply * 10 ** uint256(decimals);

_balances[msg.sender] = _totalSupply;

emit Transfer(address(0), msg.sender, _totalSupply);

}

function totalSupply() public view returns (uint256) {

return _totalSupply;

}

function balanceOf(address account) public view returns (uint256) {

return _balances[account];

}

function transfer(address recipient, uint256 amount) public returns (bool) {

require(amount <= _balances[msg.sender], "Insufficient balance.");

_balances[msg.sender] = _balances[msg.sender] – amount;

_balances[recipient] = _balances[recipient] + amount;

emit Transfer(msg.sender, recipient, amount);

return true;

}

function allowance(address owner, address spender) public view returns (uint256) {

return _allowed[owner][spender];

}

function approve(address spender, uint256 amount) public returns (bool) {

_allowed[msg.sender][spender] = amount;

emit Approval(msg.sender, spender, amount);

return true;

}

function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {

require(amount <= _allowed[sender][msg.sender], "Insufficient allowance.");

require(amount <= _balances[sender], "Insufficient balance.");

_allowed[sender][msg.sender] = _allowed[sender][msg.sender] – amount;

_balances[sender] = _balances[sender] – amount;

_balances[recipient] = _balances[recipient] + amount;

emit Transfer(sender, recipient, amount);

return true;

}

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

event Approval(address indexed owner, address indexed spender, uint256 value);

}

“`

在这个合约中,我们实现了ERC20标准接口中的功能,包括代币的名称、符号、小数位、总供应量、以及代币的转账、授权和转账操作。

第四步:编译合约

在项目的根目录下,使用以下命令编译合约:

truffle compile

该命令会在项目的build/contracts目录下生成JSON合约描述文件。

第五步:部署合约

在项目的migrations目录下,创建一个名为2_deploy_token.js的JavaScript文件,包含以下代码:

“`

const Token = artifacts.require(“Token”);

module.exports = function(deployer) {

const name = “My Token”;

const symbol = “MTK”;

const initialSupply = 1000000;

deployer.deploy(Token, name, symbol, initialSupply);

};

“`

我们指定了代币的名称、符号和初始供应量,并使用deployer.deploy函数将Token合约部署到以太坊网络上。

在项目的根目录下,使用以下命令部署合约:

truffle migrate --reset --network development

该命令将重新部署所有的合约,并在以太坊网络上生成新的合约实例。我们在Ganache界面上可以看到代币被成功创建了,我们可以通过合约地址和ABI接口去使用这个代币。

第六步:使用代币

我们可以使用web3或Ethers.js来与代币交互,例如:

“`

const Token = artifacts.require(“Token”);

contract(“Token”, accounts => {

it(“should transfer tokens”, async () => {

const tokenInstance = await Token.deployed();

const balanceReceiverBefore = await tokenInstance.balanceOf(accounts[1]);

assert.equal(balanceReceiverBefore.toNumber(), 0);

const amountToTransfer = 10;

await tokenInstance.transfer(accounts[1], amountToTransfer, { from: accounts[0] });

const balanceSenderAfter = await tokenInstance.balanceOf(accounts[0]);

assert.equal(balanceSenderAfter.toNumber(), 999990);

const balanceReceiverAfter = await tokenInstance.balanceOf(accounts[1]);

assert.equal(balanceReceiverAfter.toNumber(), amountToTransfer);

});

});

“`

在这个示例中,我们使用JavaScript编写了一个单元测试。我们使用代币的实例变量来转移代币,以及检查发送者和接收者的代币余额。

结论

这就是一个简单的ERC20代币开发教程。通过这个教程,我们可以了解如何在以太坊上创建自己的代币,并进行部署和测试。稍微深入学习一下,就可以开发更为高级和有趣的智能合约,以实现更多吸引人的去中心化应用。

原创文章,作者:区块链,如若转载,请注明出处:https://www.53moban.com/14736.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息