惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
V
Visual Studio Blog
雷峰网
雷峰网
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
un.Block 区块链周报 2021 #9:Arbitrum、ERC-20 - 少数派
2021-06-12 · via 少数派

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

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

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