👨‍🚀 Glaze & Jasmine:本期我们继续关注 Arbitrum 的设计,学习最常见的代币协议 —— ERC-20,你想创造自己的加密货币吗?

如果你喜欢本期内容,不妨在阅读后给我们点个 ❤️ ,并在下方订阅 un.Block Weekly ⬇️

🚀 链圈热闻:Arbitrum

Arbitrum 是如何实现 Layer1 和 Layer2 的通信的?

在上一期的链圈热闻中, 我们讨论了 Arbitrum 是如何是实现的。这一期我们将介绍 Arbitrum 是如何设计 Layer1 和 Layer2 通信的。

🔜 Layer1 到 Layer2 通信

如果交易包含必要的手续费,Arbitrum 会自动执行从 Layer1 提交的交易。如果这笔交易第一次在Layer2 并没有执行成功,它会进入缓冲区中。在一段时间里,任何人都可以尝试重新执行这笔交易。

缓冲区的设计可以解决在 Layer1 执行成功,但是在 Layer2 因为某些原因失败的交易。

大家可以考虑一下这个例子,在 Layer1 上,用户 向 Arbitrum 在 Layer1 的智能合约转了 1 个 UNB。但是因为某些原因,例如突然飙升的 Gas 价格,在 Layer2 中,用户并没有收到新挖出地 1 个 UNB。此时便是 Layer1 的交易执行成功,但是 Layer2 失败了。

有了缓冲区的加入,用户随时都可以重新执行失败的交易。

🔙 Layer2 到 Layer1 通信

Layer2 到 Layer1 的通信延续了之前的设计,在一些规则上有细微的改变。例如提交至 Layer1 的交易必须等待挑战期的结束,才能被执行。

我们在上期的 Optimistic Rollup 中解释了挑战期。挑战期之后,提交的交易可以在任意时间执行,不像 Layer1 到 Layer2 那样,执行提交的交易必须在一段时间之内。

基于这样的通信机制,Arbitrum 实现了 Token Bridge,允许用户在 Layer1 和 Layer2 之间传递同质化代币。对于那些复杂的同质化代币,例如含有计算利率的功能,需要自定义 Token Bridege。

📔 相关阅读:


🍼 保姆级教程:ERC-20

上周我们一起关注了 SafeMoon,本周我们将进一步学习代币的相关知识,代币背后的协议—— ERC-20

🤔 什么是 ERC-20

在学习 ERC-20 前,我们在脑中应该先建立一个“代币” (Token) 的概念,在区块链网络中,一切物品都是可以被 “Token” 化的,无论是加密货币、图片、音乐、彩票等,而 ERC-20 就是规范这些代币的标准之一。

ERC-20 引入了一个关于可兑换代币 (fungible) 的标准,这些代币都有共同的属性,所以可以被理解为是一样的东西。市场上交易的大部分代币,如 $UNI、$MATIC、$SHIB 都是标准的 ERC-20 代币。

ERC-20 代币本质是一个智能合约,这个这个合约就像一个账本,记录着不同用户的代币余额,通过调用合约,可以完成授权、转账等交易。

你可以在 Ethersacn 上查看任意代币的智能合约,例如 UniSwap 的 $UNI

📦 ERC-20 的组成

任何人都可以根据 ERC-20 编写智能合约,创造自己的代币,前提是智能合约需要满足以下功能:

查询总供应量

function totalSupply() public view returns (uint256)

用户调用该函数时,将返回智能合约的代币总量

查询账户余额

function balanceOf(address _owner) public view returns (uint256 balance)

查询账户余额需要传入钱包地址作为参数,返回值是钱包中的代币数量。区块链网络中的钱包地址是公开的,因此知道地址,可以查询任意用户的余额

转账

function transfer(address _to, uint256 _value) public returns (bool success)

转账是将代币从自己的钱包转出到目标钱包,需要提供转账目的钱包和金额。

在调用转账函数时,会触发转账事件,转账的记录将被记录上链。

授权转账

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

授权转账是另一种形式的转账,授权给合约后,合约可以代替你来进行转账操作(会触发转账事件)。例如订阅服务的付费,通过授权转账可以实现每个月自动缴费,这样就不需要麻烦的手动操作了。授权转账的形式拓展了 DApp 的可编程性。

授权

function approve(address _spender, uint256 _value) public returns (bool success)

授权函数用于处理授权操作,_spender 是你要授权的对象,_value 是授权的金额数量。通过授权,可以限制合约的授权转账操作,降低资金被窃取的风险。

调用授权函数时,会触发授权事件,授权的相关记录将被记录上链。

查看允许量

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

查看允许量用于查询授权的额度还剩下多少,假如你通过 approve 授权了 20 个 Token 给 ContractA,ContractA 使用 transferFrom 每天从你钱包中转出 1 Token,5 天后,你调用 allowance ,可以看到结果是 15。

以上就是实现 ERC-20 需要的基本功能,除此之外,你还可以自定义代币名称,代币缩写,代币精度等可选参数,或实现铸币 mint 、燃烧代币 burn 等额外功能。

🔨 创造自己的 ERC-20 代币

创造自己的 ERC-20 代币最简单的方式就是通过 OpenZeppelin 的 ERC-20 库完成部署。你可以复制以下代码到 Remix,修改代码名称、代币缩写、初始化供应量,然后 Deploy 到虚拟链上

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

contract unBlockToken is ERC20 {
    // 代币名称
    string tokenName = "unBlock";
    // 代币缩写
    string tokenSymbol = "UNB";
    // 初始代币供应量
    uint256 initalSupply = 100;
    
    constructor() ERC20(tokenName, tokenSymbol) {
        _mint(msg.sender, initalSupply);
    }
}

🛸 除了 ERC-20

虽然说 ERC-20 是最受欢迎的代币标准,但它并不是唯一的,市面上还有许多的其他标准,他们的出现或是为了实现不同的功能,或是为了改进 ERC-20:

  • ERC-721:流行的 NFT 代币 (not-fungible) 协议,他向用户提供了接口,用户可以自由铸造 NFT
  • ERC-777:ERC-20 的改进,解决了 ERC-20 小数点混乱的问题,引入了 hook 的概念,用户在发送或接受代币时会触发 hook

📔 相关阅读:


📘 附加题

比特币正式被国家接受了!


🔔 订阅 un.Block Weekly 🔔

🚏Find us

💻 Websiteunblock256.com

✈️ Telegram: un.Block Weekly

🕊️ Twitter@unBlock256

📧 Email:unblocketh@gmail.com

视觉设计:Jenny

本文非商业目的转载授权遵循 CC BY-NC 4.0 协议

版权所有 ©️un.Block 2021

1
0