这个代币标准被广泛称为ERC20,描述了智能合约中代币的接口。像代币转移、批准支出、创建等功能都由ERC20标准定义。
这次让我们讨论一下可替换代币,这是DeFi的主要构建模块之一。这些代币可以代表硬币、黄金、谷物和其他可以交换的资产。我们将研究第 20 个以太坊改进提案。这个代币标准被广泛称为ERC20,描述了智能合约中代币的接口。像代币转移、批准支出、创建等功能都由ERC20标准定义。
为了说明ERC20标准的代码,我们将使用OpenZepplin ERC20实现。
总代币供应有两个主要操作。我们可以铸造,也可以销毁。铸造意味着创造更多的供应,销毁意味着有需要就可以减少供应。
为了创建代币供应,我们是需要铸造数量的。当我们在后台进行创建时,调用此函数的场景调用者将接收提供的代币数量。
让我们创建一个充当 ERC20 代币的智能合约。在构造函数中,我们需要提供总代币供应,并调用OpenZepplin的ERC20实现构造函数,提供代币名称和符号。
contract FungibleToken is ERC20 {
constructor(uint256 totalSupply) ERC20("MyBestToken", "BTKN") {
_mint(msg.sender, totalSupply);
}
当我们想要部署这个合约时,我们应该提供totalSupply。
如果需要,我们可以通过铸造更多代币来发行更多代币。
当我们需要降低流通中的所有代币的价值时,我们可以销毁它们。代币销毁意味着我们将特定数量的代币发送到零地址0x0000000000000000000000000000000000000000,并且它会被永远锁定,因为没有人可以访问这个地址。
function burn(uint256 burnAmount) external {
_burn(msg.sender, burnAmount);
}
为了销毁代币,我们需要传递与铸造代币相同的地址和我们想要销毁的数量。
ERC20标准中的几个实用函数帮助我们找到代币信息和余额。
一旦智能合约被部署到链上,任何人都可以看到名称、符号。唯一需要的是代币智能合约地址。
本质上,ERC20标准保存了地址的映射及其数量。这意味着在任何给定的时间,我们都可以查询特定地址的余额。它是公开可见和可访问的。当然,我们不知道这个地址的主人是谁,也无法改变金额。
在幕后,ERC20 OpenZepplin标准在映射中保持余额,其中key是一个地址,值是uint256。
mapping(address => uint256) private _balances;
我们可以将代币转移到一个地址,或者给一个地址转让权。转让权意味着我们赋予另一个地址以代表我们使用具体数量的代币的权利。
一旦我们持有一定量的ERC20代币,我们就可以将其发送到任何地址,但不能超过地址中的代币总数。这也包括0地址0x000000000000000000000000000000000000000,这在技术上意味着销毁。
在ERC20实现中,描述了一旦我们转移了代币,我们发送的金额将从我们的余额中扣除,并增加到接收地址。它会检查我们是否有足够的代币来转账,以及我们是否没有超过我们的余额总数。其实我们一直在处理代币金额资产负债表。
给其他人转让权听起来可能很复杂,但它在DeFi中被广泛使用,我们提供以太坊智能合约权利来使用我们的代币进行操作。例如,智能合约互换代币将它们放在流动性池中,或者我们希望获得一笔贷款,所以为我们的代币提供抵押品。
首先,我们需要赋予一个地址权限,并提供它可以操作的最大金额。ERC20 实施还将检查我们是否没有超过可用代币并在内部映射中保留代币限额。
mapping(address => mapping(address => uint256)) private _allowances;)
这个映射键是代币持有者的地址。然后该值是另一个映射,其中key是支出者地址和允许支出的金额。
现在,发送者可以将我们保留的代币金额发送到任何其他提供代币持有者地址、发送地址和要转移的代币数量的任何其他地址。
Source:https://betterprogramming.pub/exploring-erc20-fungible-token-standard-in-solidity-d3a9936a6a63
关于
ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!