当今(传统金融钱包)的大多数钱包应用程序都是围绕一个简单的中心组件构建的扩展:一个由公钥(账号)/私钥(密码)对组成的账户。
原标题:《MetaMask 钱包的剖析》 来源:Julia Wu 编译:Block unicorn
自 2016 年推出以来,截至 2022 年 3 月,MetaMask(小狐狸钱包)已获得 3000 万月活跃用户。它拥有全球用户群,其中美国、菲律宾、巴西、德国和尼日利亚的参与度较高。
MetaMask 是以太坊社区不可或缺的应用程序之一,在 Web3 世界,MetaMask 无人不知晓,吸引了人们通过 MetaMask 开启了加密之旅。随着 NFT、游戏和 DAO 为 web3 带来大量新用户,钱包仍然是生态系统中的基础组成部分——它们是用户与区块链之间所有交互的核心和中心。
这篇文章将侧重于区块链账户和 MetaMask 的机制,偏向于以太坊。但如果你对它的起源和商业方面感兴趣,The Generalist 有一个非常详尽的故事。这篇文章中的信息是从 Mastering Ethereum 书籍、MetaMask 支持文章和 Ethereum Homestead 文档等来源收集的。因此,如果您有兴趣可以深入了解,这些地方充满了珍贵的细节。
它们也可能对某些人感到恐惧。但实际上,当今(传统金融钱包)的大多数钱包应用程序都是围绕一个简单的中心组件构建的扩展:一个由公钥(账号)/私钥(密码)对组成的账户。
在我们谈论 MetaMask 本身之前,让我们先深入了解一些支撑它的基本概念。
地址是区块链的核心原语。在以太坊中,有两种类型的地址:外部拥有地址 (external Owned accounts) 和合约地址 (Contract accounts)。
每个地址都由一个公钥和一个私钥定义。公钥由私钥创建产生,区块链上的所有地址都按其地址 (公钥) 排序。
让我们来分析一下这两种类型的账户及其特征:
外部拥有的地址
1. 有一个以太币余额
2. 可以发送交易(即转移或触发智能合约代码)
3. 由私钥控制
4. 没有关联代码
合约地址
1. 带有以太币余额的实际智能合约
2. 有关联代码
3. 代码执行由从其他合约或地址收到的交易或消息触发
以太坊上的每一个动作都是由一个外部拥有的账户触发的。
如果这篇文章是关于钱包的,我们为什么要谈论地址(账户)?好吧,从本质上讲,钱包不过是客户经理。
如果我们把 chrome 扩展和移动应用程序的所有功能都去掉,那么这个可爱的小狐狸背后就是一个用来存储和管理用户私钥的软件。
每个钱包都从一个私钥管理组件开始。
一旦有了私钥管理方面,钱包就变成了一个用户界面,允许用户与区块链进行交互。它可以促进从一个账户到另一个账户的资金转移、管理私钥、跟踪代币余额并帮助您签署交易。但是如果没有私钥管理,这些事情都不会发生。
把它想象成一个钥匙扣,以太坊钱包的主要工作是包含用户的私钥。它们实际上并不持有任何真正的代币,它们仅反映在区块链上为你的账户分别有多少代币。
区块链只是一个分布式账本,它将您的账户与您拥有的代币数量相关联。钱包持有的钥匙是将以太币或代币转移给他人的唯一要求。使用您的私钥,你可以通过使用你的私钥签名改变交易账本,我们将在后面的部分详细介绍这一点。
区分钱包的一种方法是通过私钥的生成方式。
钱包的私钥生成主要有两种类型:确定性和非确定性,它们的区别在于是否相互关联。
非确定性钱包具有由随机数生成的私钥,并且这些私钥彼此不相关。
这更像是传统的以太坊钱包。它以钱包文件的形式出现,其中存储了一个随机生成的私钥。确定性钱包会为每个地址生成一个新的钱包文件,备份和恢复可能会更加麻烦。
非确定性钱包被认为不如确定性钱包。
确定性钱包具有由单个主私钥(称为种子,也可以称为助记词)生成的私钥。在确定性钱包中,私钥是相互关联的,并且始终可以使用相同的种子进行复制。这是我们比较熟悉的钱包类型,因为它被认为是一种标准并被 MetaMask 使用。
种子表示为您可以写下的英语单词列表(通常为 12 个单词),以便在需要时恢复您的密钥。这也是您在 MetaMask 中看到的「私钥恢复短语」。它有时也被称为你的「助记词」。但是,如果有人抓住了他们,他们可以立即访问您的钱包并使用您的资产做各种事情。这就是为什么建议永远不要分享您的助记词,甚至不要以电子形式存储它。
种子短语可以方便地导出和导入钱包,并轻松地将所有私钥迁移到不同的钱包应用程序中。例如,如果您在 MetaMask 上有一个钱包,您仍然可以通过输入助记词将该钱包导入您的 Rainbow 或 Argent 移动应用程序。
确定性钱包的最先进形式是分层确定性(HD)钱包,基于比特币的 BIP-32 标准。键被称为「分层」,因为它们代表树结构。父密钥可以派生一组子密钥,然后子私钥可以派生另一系列孙密钥。
HD 钱包优于其他类型的确定性钱包,因为:
1. 树形结构可以代表一种组织结构。分支机构可以被视为公司中的子团队或子公司,这提供了相应的组织预算和付款的机会。
2. 无需访问相应的私钥即可生成公钥。
种子短语(助记词)是一组英语单词,不过这只是对私钥进行编码的一种方式。它目前被广泛使用,因为其他类型的表示 (如十六进制字符串) 在写在纸上时可能会导致更高的错误率。在较高级别上,助记词是由 BIP-39 定义的过程生成的,该过程涉及从一些信息源开始,转换数据,然后将其映射到单词列表。
有一套行业标准(如助记词和 HD 钱包)影响钱包的实现并导致钱包的互操作性。由于这些标准,您可以轻松地将钱包从不同的钱包应用程序导出和导入。
钱包可以有几种不同的形式,最常见的:
桌面钱包:MyCrypto, Gnosis Safe。
浏览器插件钱包:MetaMask, MyEtherWallet, Web3Auth。
手机钱包:Argent, Coinbase Wallet, MetaMask, Rainbow, Trust Wallet。
硬件钱包 (一种在线访问资金的安全方法,因为它们在签署交易时不会暴露私钥):Ledger, Trezor, KeepKey, Bitbox, Lattice1。
例如 Argent 和 Gnosis Safe 是智能合约钱包,这些类似于本文开头描述的「合约地址」。
这些钱包使用外部拥有账户的替代品,并建立在智能合约之上。由于业务逻辑有更多的实现空间,它们可以提供无助记词恢复、自动阻止某些对不可信合约的转账、社会恢复、转账限制、账户冻结等功能。
以下是一个非常简单的智能合同钱包的示例代码,基于 Block Explorer 的教程:(教程详细,请阅读原文)
我们一直在等待的主角,这只几何小狐狸告诉我们「去中心化的网络在等待着」——我们中的许多人与之有着爱恨交织的关系。
MetaMask 是一种非托管(或自托管)加密货币钱包。这意味着没有第三方「保管人」持有您的私钥。它让你活出「不是你的钥匙,就不是你的代币」的精神。MetaMask 不存储有关钱包的任何数据,您看到的所有内容都在本地级别的浏览器或移动应用程序中。
1. 秘密恢复短语(助记词):如前所述,此短语是基于您的主密钥以数学方式生成的助记符。这些词,当按特定顺序放置时,可以重新生成你钱包中的所有账户。请记住,一个钱包中可以有多个账户。你的钱包是持有许多公钥/私钥的钥匙串。每个密钥对应于钱包中的一个账户。当 MetaMask 从 Secret Recovery Phrase 重新生成您的钱包时,它可能一开始只生成第一个账户,但由于钱包是确定性的,因此可以按照相同的顺序重新创建其他账户。
2. 私钥:每个账户都有自己的公钥和私钥。通常,可以看到账户及其地址,即公钥。个人私钥可用于将该特定账户(并且仅该账户)导入任何其他钱包应用程序。
3. 密码:这用于保护钱包应用程序本身。您只用它来解锁应用程序。FaceID 适用于移动设备。
值得注意的是,Coinbase(核心应用程序)是一个托管钱包,因此不同之处在于,Coinbase 不是您持有自己的私钥,而是实际上为您存储它们。所以你不能直接导出你的 Coinbase 钱包,然后将其导入另一个钱包,比如 MetaMask。但是,您可以从 Rainbow 钱包到 MetaMask(反之亦然)这样做,因为两者都是非托管的。
注意:Coinbase 还通过 Coinbase 钱包提供非托管解决方案。
MetaMask 等其他钱包也可以成为您通往公共区块链网络的钥匙。让我们提醒自己 web 浏览器的工作:一个允许我们访问万维网的软件程序。当用户通过输入 URL 地址请求网页时,浏览器会从 web 服务器获取内容,并将其显示在用户的设备上。
区块链节点不断同步网络状态并观察交易历史。同样,MetaMask 允许您访问区块链网络,因为您当前的浏览器无法做到这一点。
为了与区块链节点通信,有一个称为 JSON-RPC 的标准,它允许从它们请求和提交数据。这些通过 JSON-RPC 的请求可以通过 HTTP 或 WebSocket 进行。
MetaMask 如何发现这些节点以发送请求?它使用 Infura,它提供了一个高度可用、可扩展的区块链 API,可以访问区块链网络。
区块链是一个分布式账本,就像账户及其资产的映射。设想一个电子表格,其中每一行都是一个账户 (以太坊地址),且每一列都是它持有的加密资产。
假设 Alice 想要给 Bob 发送 1 个 Eth。这时 Alice 打开她的 MetaMask 钱包,输入 Bob 的钱包地址,然后点击发送。当她点击发送时,她也在使用她的私钥来签署这笔交易。
该笔交易将进入本地内存池 (mempool),然后由以太网络中最近的节点获取该内存池。
发起此交易时,Alice 的交易将根据她的 gas(手续费)设置进行优先级排序,交易在网络中的节点间传播。在处理交易后,节点还将在执行转移之前检查 Alice 是否有足够的以太币可以使用。
最后,转账只是对账本的修改,从 Alice 的余额中扣除 1 ETH,并在 Bob 的账户中增加 1 ETH。
让我们来总结一下 MetaMask 的主要特性——注意,它们中的许多都与私钥管理相关或围绕着密钥(也叫私钥)管理:
1. 账户管理 (创建、导入、导出账户,对接硬件钱包)
2. 连接公共区块链网络
3. 签署交易 (转账、智能合约交互),允许用户确定每笔交易的天然气价格
4. 使用 fiat 购买加密货币 (使用 MoonPay, Transak, Wyre)
5. 交换标记
6. 显示资产 (ERC20 代币,nft)
7. 显示活动 (事务历史记录)
8. 链接 dApp
钱包标准一直在发展,MetaMask 也是如此。我们可能会开始看到更多对社交恢复钱包、多因素身份验证等功能的尝试,以提高安全性,以及通过在连接到 dApp 时将功能注入 MetaMask 本身来实现新的用户体验。
钱包用户体验、dApp 交互和安全方面有许多创新的可能性。尽管 MetaMask 铺平了道路,但钱包的工作还远未完成。例如,我们还没有完全弄清楚如何在移动设备上签署交易。由于行业标准,钱包可以组合和重新构建,以满足用户和应用程序的需求。
有人可能会争辩说,钱包类似于数字身份/护照、银行账户、浏览器等 web2 概念。可能是这些,也可能是其他东西。我们刚刚开始触及表面——发展空间是巨大的。