链资讯 链资讯
Ctrl+D收藏链资讯
首页 > BNB > 正文

比特币:账户抽象化(EIP-2938):智能合约钱包为什么有这项需求?_量子比特币行情走势

作者:

时间:

原文标题:引介|账户抽象化:为什么&做了什么

以太坊有两种类型的账户:外部账户和合约账户。前者由用户私钥控制,而后者由存储在智能合约账户内的合约代码控制。外部账户的权限要大于合约账户,因为只有外部账户可以通过支付gas启动交易的执行过程。账户抽象化则是一个可以让合约账户成为和外部账户一样的“顶层”账户的提案,实现了账户抽象化之后,合约账户也可以支付交易费和执行交易。

之所以提出账户抽象化,是想要在钱包、交易混淆器、DApp和DeFi等各种应用场景下,显著改善用户与以太坊链的交互体验。账户抽象化方案要为以太坊提供一个基础功能层,来确定何时支付,谁来支付以及怎样支付gas。

以StatusMessenger应用为例,其将隐私信使服务与以太坊钱包和Web3浏览器集成在一起。目前,Status钱包仍然是外部账户钱包,因此其不能像智能合约钱包那样支持丰富的用户体验,比如多签安全、基于社交的钱包恢复、支付限额、地址黑/白名单以及无需gas费用的元交易。智能合约钱包的用户体验受累于gas价格波动,即使通过第三方的中继者也无法有效解决这个问题。账户抽象化旨在解决这个问题。

在本文中,我们先探讨智能合约钱包对账户抽象化的需求。然后描述协议的变更及其对节点的影响,借此深入到账户抽象化的关键部分。最后,我们讨论一些关于扩展功能的提案,并以阐释Status项目的计划路线图作为本文的总结,因为该项目要与以太坊配合因而势必受到账户抽象化的影响。

历史与动机

账户抽象化这个概念是在撰写于2017年的EIP-86里首次提出的,其目的是实现“交易来源和签名的抽象”。不过其动机和想法可以追溯到2016年年初vitalik提交的一个issue,文中建议“与其将ECDSA签名算法和默认的nonce机制写死在协议内作为‘标准’的账户安全机制,不如初步建立一个账户模型,在未来把所有的账户都变成合约,让合约可以支付gas,让用户可以自由定义自己的安全模型。”

要实现最初的提议非常有挑战,因为不仅要大幅修改协议,还要满足系统的安全保证。最近,Vitalik等人提出了EIP-2938草案,该草案概述了一个更简单的实现。这个实现对协议/共识的改动最小,并且通过设置节点的内存池规则来满足所需的安全保证。Vitalik的以太坊工程组Meetup演讲和SamWilson与AnsgarDietrichs的ETH线上演讲都对这个主题做了非常棒的介绍。本文会着重介绍这些资料的关键内容。

金色晚报 | 6月7日晚间重要动态一览:12:00-21:00关键词:新冠肺炎、ETH非零地址、市场操纵

1.全球新冠肺炎确诊病例累计超700万例。

2.ETH非零地址数量再次刷新历史新高。

3.2020年因犯罪被盗加密货币总值可能将接近45亿美元。

4.24小时合约市场爆仓超2022万美元。

5.报告:大额比特币转账并不意味着市场操纵。

6.风险投资家:在下一轮牛市中ETH表现将超过BTC。

7.孙宇晨公开信:波场TRON将于7月7日完成TRON4.0升级。

8.比特币小幅下跌,日内最高报9722.47美元,最低报9482美元。[2020/6/7]

动机:账户抽象化背后的动机很简单,但会带来根本性的改变:当前,以太坊交易具备?功能可编程性,但是?交易的验证方式?却是固定的。只有持有有效的ECDSA签名、有效的nonce值以及足够的账户余额,一笔交易才算有效。账户抽象化引入了一种新的交易类型——抽象账户交易。这种交易总是由一个特殊地址产生,协议不会检查其签名,nonce和余额。通过引入这种交易,账户抽象化实现了从固定验证方式到可编程验证方式的转变。抽象账户交易的有效性由其target字段指定的智能合约验证,通过验证之后,合约可以自行为该交易支付手续费。

那么,为什么账户抽象化这么有用呢?我们将用以太坊钱包为例,阐述它会带来哪些好处。

智能合约钱包:如今大多数以太坊钱包都是外部账户钱包,它们的安全性由助记词生成的私钥保护。为了以后能在其他钱包里恢复密钥,用户应当安全妥善地保管助记词。然而,这种钱包很容易因为私钥被盗或者助记词丢失导致用户的资产遭受损失。

智能合约钱包是通过智能合约在链上实现的。这种钱包能够提供可编程的风险迁移和友好的用户体验,比如多签安全、基于社交或时间的钱包恢复、转账金额限制、地址黑白名单、无需gas费用的元交易和批量交易。

虽然智能合约面临因代码质量差而带来的安全风险,但是这种风险可以通过钱包提供方的安全审计来减轻。而外部账户钱包的风险完全由用户自己承担,用户无法获得智能合约那样的可编程的安全保障,用户必须自己保管好助记词。

当前可用的智能合约钱包有Argent、Authereum、Dapper、Dharma、GnosisSafe、Monolith和MYKEY。从下图可以看到,这类钱包的使用率看起来在增加。

金色晚报 | 3月8日晚间重要动态一览:12:00-21:00关键词:USDT、Steemit、以太坊、投票

1. 数据:近一周Tether共计新增印钞2.6亿USDT。

2. 以太坊流通量正式超过1.1亿。

3. 委内瑞拉石油币支付平台Biopago已宕机两个多月,政府仍未公布上线时间。

4. 上海黄浦区出台“外滩金融18条”,培育在区块链应用等领域的独角兽企业。

5. Steemit官方:解决问题的唯一途径是对话。

6. 日本新经济联盟和日本区块链协会向政府提交“面向区块链国家战略的建议”。

7. 币安CEO赵长鹏承认动用用户资产投票。

8. 门罗币CLI v0.15.0.1版本已正式发布。

9. 比特币持续下跌,日内跌幅扩大至4.92%,现报8677美元。[2020/3/8]

Argent通过守护者的概念实现了无需种子的基于社交的钱包恢复。守护者是用户信任的人或设备,可以帮助用户恢复钱包。Argent还要实现类似银行的安全性与类似Venmo的可用性取代地址,支持元交易)。

GnosisSafe是一款多签智能合约钱包,专注于团队资金管理,任何一笔交易都要得到团队中最低人数的批准才能发生。它还可以通过元交易实现无需gas的签名。

所有这些高级钱包功能都要用到灵活的智能合约。钱包用户要么通过外部账户发送交易,支付gas费以调用钱包合约,要么依赖钱包提供方支持元交易功能,借由钱包提供方的中继器或者第三方中继网络如GasStationNetwork来使用钱包。前者通常是通过了KYC认证的用户依靠中心化交易所购买ETH;后者将用户的负担转移到中继器上,由钱包提供方或用户在链上或链下补偿中继器,从而提高用户体验。

然而,基于中继器的架构有三个主要缺点:他们可能会面临中心化的诟病,引起交易审查的担忧;由于中继器发出的交易需要支付额外21000单位的基础gas费,为了获得利润其必须收取更高的费用以覆盖这部分成本,这就导致了技术和经济上的低效;对中继专用协议的使用,迫使应用不得不依赖非以太坊的基础设施,而较小的用户群无法支撑这些设施提供稳定可靠的服务。

账户抽象化将使智能合约能够接受用户的无需gas的元交易,并且无需依赖中继网络就能为其支付gas费。因此,这种底层能力在不牺牲去中心化的情况下,能够极大改善这些智能合约钱包的用户体验。

金色晚报 | 2月4日晚间重要动态一览:12:00-21:00关键词:港交所、Cardano、Twitter、武大

1. 港交所总裁:港交所计划在北向交易结算系统中引入区块链技术;

2. IOHK首席执行官:Cardano暂定于2月20日迎来OBFT硬分叉;

3. Twitter联合创始人投资允许用户交易比特币的应用程序;

4. 印度特伦甘纳州将推出专用区块链孵化器;

5. 武大团队推出基于区块链的抗击新冠肺炎防护物资信息交流平台;

6. 普华永道:区块链可将全球范围飞机维修成本削减35亿美元;

7. 香港比特币汇款公司Bitspark将于下月关闭;

8. 央行贸金区块链平台上线一年来累计业务量超900亿人民币;

9. Coingecko联合创始人:BCH12.5%出块奖励提议应该以更好的方式与社区讨论而非被迫放弃。[2020/2/4]

TornodoCash:另一个相关应用是交易混淆器,例如tornado.cash。Tornado使用智能合约切断地址之间的链上关联以提升交易的隐私性,该合约允许用户存入ETH后通过另一个地址提款。用户在存款时提供一个秘密值的哈希,随后在提款时提供zkSnark证明。该证明可以在不泄露秘密值和存款信息的情况下,证明其知道这个秘密值。这样就把存款和提款脱钩了。

但是在提款时有一个鸡生蛋蛋生鸡的问题。为了在新生成的地址上执行提款交易,用户需要给该地址存入一些ETH以支付gas费。但这些ETH的来源本身又会破坏使用Tornado所带来的隐私性。首选的替代方案是再次使用中继网络,而这样做有上述的那些缺点。

账户抽象化就可以解决这个问题,Tornado合约可以接受用户的提款抽象账户交易,验证zkSnark,扣除gas费,然后把剩余的资金转给提款地址。

账户抽象化

在EIP-2938中提出的账户抽象化,接纳合约作为顶层账户,使之可以支付交易费以及启动交易的执行过程。实现账户抽象化需要变更协议以增加新的抽象账户交易类型、修改内存池规则以及引入扩展功能以支持高级用法。抽象账户交易需要增加两个新的操作码:NONCE?和?PAYGAS。账户类型仍然保持现有的两种,所有的变更都向后兼容以支持当前的交易、智能合约和协议。

账户抽象化应用可以分成两类:1)单租户应用,如智能合约钱包,其会为每个用户创建一个新合约;2)多租户应用,例如tornado.cash或Uniswap,多个用户与同一组智能合约交互。

Harmony将在第二季度实现账户抽象功能:2月19日消息,Harmony宣布将在2023年第二季度实现账户抽象,为用户和开发者提供更大的灵活性和功能。帐户抽象是一种允许创建多种类型帐户的功能,每种帐户都具有独特的功能和特性。[2023/2/19 12:15:35]

目前还不能支持多租户应用,这需要更多的研究工作,以期未来早日实现。所以本文将重点介绍单租户的账户抽象化。

协议变更

对协议唯一的变更就是引入了一种新的交易类型,以及相关的两个操作码?NONCE?和?PAYGAS。

抽象账户交易:协议引入了一种新的交易类型:AA_TX_TYPE。它的二进制数据(payload)会被解析为?RLP()?,而不是现有交易的?

RLP()?。

Nonce检查和现有交易类似,需满足

?tx.nonce==tx.target.nonce。

如果检查失败,则交易无效,如果通过检查,则?tx.target.nonce?将会递增,交易继续进行。

抽象账户交易的基础gas消耗量将从21000降到15000。此外,抽象账户交易没有内置的gas限额。当交易执行时,gas限额只需设定为当前block还剩余的gas限额即可。

NONCEopcode:NONCE?操作码(0x48)推送被调用者——即抽象账户交易的target字段所指定的合约——的nonce值到EVM的栈上。借此,nonce值被暴露给了EVM,因而抽象账户合约可以将交易的任何字段作为验签逻辑的一部分。

PAYGASopcode:PAYGAS?操作码(0x49)从栈上弹出2个参数:version_number,memory_start。

Version_number?允许未来通过新的实现变更操作码的语义。目前,操作码的语义如下:

检查?version_number==0

读取?gas_price=bytes_to_int(vm.memory)

读取?gas_limit=bytes_to_int(vm.memory)

检查?contract.balance>=gas_price*gas_limit

VitalikButerin提议使用Flashbots系统实现“账户抽象”:3月11日消息,以太坊联合创始人 Vitalik Buterin 在研究机构 Flashbots 的 GitHub 仓库中提议利用 Flashbots 作为“账户抽象”的一种实现方式。“账户抽象”是以太坊社区中讨论的改进提案之一,以实现交易不需要从私钥控制的 EOA 账户发起,而是可以直接从智能合约发起,具体的用例包括智能合约钱包、Tornado.Cash 这类隐私保护工具等。Vitalik Buterin 认为 Flashbots 可以解决这个问题,通过搭建一个插件将其变成智能合约钱包的中继器以实现。他表示该方案不需要对以太坊底层协议进行很多改动。

Flashbots是由五位区块链行业人士发起成立的开放研究机构,旨在针对以太坊及各智能合约公链所面对的 MEV 问题进行研究,并实施解决方案。[2021/3/11 18:35:51]

检查?globals.transaction_fee_paid==False

检查?AAexecutionframe==top-levelframe,也就是若当前EVM执行退出或回退,整个交易的EVM执行就暂停了

设置?contract.balance-=gas_price*gas_limit

设置?globals.transaction_fee_paid=True

设置?globals.gas_price=gas_price,globals.gas_limit=gas_limit

设置当前的执行上下文的?remaining_gas=gas_limit-已经消耗的gas

在执行抽象账户交易的最后,(globals.limit-remaining_gas)*globals.gas_price?的费用将转给矿工,remaining_gas*globals.gas_price?的金额则退还给抽象账户合约。

PAYGAS?操作码充当EVM执行过程中的检查点。任何回退都只退回到上一个检查点,此时合约收不到退款,globals.gas_limit*globals.gas_price?的金额全都转给矿工。

这个新的交易类型和这两种新的操作码构成了协议/共识级别的全部变更,它们的语义相对直观,易于理解。

内存池规则

“内存池是指以太坊节点内部的,存储在内存里的数据结构,其中存储了用于挖矿的候选交易。Geth称之为‘交易池’;Parity称之为‘交易队列’。不管叫什么,它都是一个存储将被区块包含的交易的数据池。我们可以把它看做是待打包区块的“候车厅”。

抽象账户交易的可编程验证方式引入了更多的复杂性。抽象账户交易并不预付gas费,而是依靠?target?字段指定的抽象账户合约来支付gas费。理论上,抽象账户交易的处理分两个阶段:较短的验证阶段和较长的执行阶段。如果验证阶段失败,会导致交易无效,该交易便不会被区块包含,因而矿工也就拿不到交易费了

因此,矿工和节点需要一个可预测的机制,以避免待处理的抽象账户交易的有效性依赖内存池中的其他待处理交易。否则,一笔交易执行失败可能会导致许多甚至全部的抽象账户交易无效,以此可以构造出拒绝服务攻击。为了避免这种情况发生,我们建议内存池对抽象账户交易执行两条规则。

操作码限制

为了防止抽象账户交易的有效性取决于抽象账户合约以外的任何状态,在验证阶段以下操作码被视为无效:执行环境操作码

BALANCE、除了对?target?合约或预编译合约之外的任何外部调用/创建操作码

对除了?target?合约之外的任何外部状态的读取操作码

如果有抽象账户交易的target字段所指向的抽象账户合约违反了这个操作码限制规则,节点就要丢弃这个交易。如此,只要抽象合约的状态不发生变化,内存池中有效的抽象账户交易就将继续有效。

字节码前缀限制

如果非抽象账户交易可以影响抽象账户合约的状态,那么其就可以影响内存池中的抽象账户交易的有效性。为了防止这种情况发生,抽象账户交易应当只接受字节码前缀为?AA_PREFIX?的target合约。AA_PREFIX?实现了对?msg.sender?的检查,确保其是特殊的?ENTRY_POINT?地址。这有效地防止了非抽象账户交易与抽象账户交易发生交互。

节点如果检查到抽象账户交易指定的合约没有这个?AA_PREFIX?作为字节码前缀,就应该删除这笔交易。

这两条对抽象账户合约的限制确保了:只有抽象账户合约的内部状态可以影响抽象账户交易的验证逻辑;只有以同一个抽象账户合约为target的抽象账户交易可以修改该合约的状态。

因此,只有区块包含了以同一个抽象账户合约为target的另一笔抽象账户交易,才有可能使一个待处理的抽象账户交易无效。不过,鉴于这不是协议/共识层的变更,矿工在打包交易时可以随意违反这些规则。

扩展

上述协议变更和内存池规则足以安全地实现诸如智能合约钱包这样的单租户应用。其他高级用法则需要放宽上述规则或者需要实现多租户应用,这就要账户抽象化支持以下形式的扩展:

SET_INDESTRUCTIBLE?操作码,它会禁用?SELFDESTRUCT,并允许抽象账户合约在验证阶段通过?DELEGATECALL?安全地调用库函数。

S_STATIC?操作码,如果当前的上下文是静态的则返回true,并允许非抽象账户交易的调用者绕过之前的字节码前缀限制,安全地从抽象账户合约里读取数据。

RESERVE_GAS?操作码,当一笔非抽象账户交易试图对一个抽象账户合约写入状态时,设置一个gas消耗的下限。这样做是为了强制攻击者在试图让内存池的抽象账户交易无效时至少要消耗一定的gas,以此抑制其攻击动机。

还有一些其他的扩展,例如存储多笔待处理交易、缓存验证结果、验证过程的动态gas限制和担保交易等,这些都是为了支持多租户应用和零知识证明。这些内容不在本文的讨论范围内。

下一步

目前,关于账户抽象化的EIP-2938还只是一个草案,正在以太坊研究论坛中讨论。下一步是考虑将这个EIP纳入即将到来的硬分叉中。EIP的作者显然瞄着Berlin之后的硬分叉,具体的时间表还不确定。所以,对于EIP-2938来说,现在还处于早期阶段。

此外,也不清楚是否有必要在以太坊的Layer1(L1)加入EIP-2938。鉴于Layer2(L2)方案的灵活性,我们也可以在特定的L2上实现账户抽象化,这样就不需要升级整个L1了。不过,在L1上统一支持账户抽象化要比在不同的L2上各自实现账户抽象化好。因此,在哪里实现,怎样实现账户抽象化还有待观察。

“账户抽象化在某种程度上不那么重要,因为无论L1是否支持,它都可以在L2上实现。”——Vitalik在谈及基础层的升级需求时表达了这个观点。

Status:Status钱包目前是一个外部账户钱包,它的独门绝技是将聊天支付和Keycard集成到一个隐私信使服务中。目前其正在考虑加入一些智能合约钱包的特性,如多签和基于社交的钱包恢复。如前所述,支持EIP-2938有助于消除对中心化和低效的中继架构的依赖。

Status也在评估L2解决方案,正如我们之前的文章里说的,这样做既可以在钱包里支持多链,也可以为多种用例提供所需要的扩展。例如,Keycard正在探索一种支付网络,其所需的信用卡级别的可扩展性和近乎即时的终局性是目前以太坊网络无法满足的。此外,还有许多其他计划,如推荐计划、SNTreaction、Tribute-to-Talk和ENS域名。所有这些计划都适合在L2上实现,因为这在部署上可行,而且能够提供还不错的用户体验。如果一个可行的L2方案实现了账户抽象化,那么在该L2上的项目都能享受账户抽象化的好处,而不必依赖L1。

总结

以太坊协议的一个根本问题是,只有外部账户(EOS(可以支付gas费和启动交易执行过程,而合约账户(CA(做不到。账户抽象化(AA(是一个旨在改变这种区别的提案,允许具有特定构造的合约账户可以检查新增的一类交易——抽象账户交易的有效性,并代为支付gas费,从而在不需要外部账户的前提下有效地启动交易的执行过程。

账户抽象化能够在不依赖中心化和低效的中继架构的情况下,显著改善钱包、交易混淆器、DApps和DeFi的用户体验。通过引入一种新的交易类型,两种操作码以及两条内存池规则,账户抽象化能够安全地支持基本的单租户场景,如智能合约钱包。如果要支持更高级的多租户应用,如TornodoCash,则需要对协议和节点规则做更多的扩展。

本文阐述了智能合约钱包对账户抽象化的需求。通过描述协议的变更和对节点的影响来强调账户抽象化的关键部分。我们还谈到了一些针对高级用法的扩展提案,最后通过介绍Status项目在以太坊上的路线图和优先级让读者对账户抽象化有一个比较清楚的定位。

减少Web3的摩擦及改善用户体验是这个生态里所有项目的首要任务。账户抽象化,最终一定会以某种形式在未来发挥重要的作用。

感谢HesterBruikman审阅本文草稿并提供有益的反馈。感谢AlexHowell提供贴心的插图。

原文链接:

https://our.status.im/account-abstraction-eip-2938/

作者:?RajeevGopalakrishna

翻译&校对:?戡乱&阿剑

标签:比特币IMIADOUMB量子比特币行情走势LIMITpolkadotteddokeyDumbo Token

BNB热门资讯
COI:Filecoin挖矿投资回报率是多少?机器回本周期大概有多久?_比特币行情最新价格湖

Filcoin目前是全网热度最高的币种,虽然主网上线不到2个月,但是黑马属性已经显露无疑,很多人,都在跑步进场参与Filecoin挖矿的财富盛宴,大家不是在考察矿机,就是在考察的路上.

比特币:金融大师戴夫·拉姆齐(Dave Ramsey)怀疑比特币可以兑现—建议BTC投资者立即抛售_ELEA

个人理财大师戴夫·拉姆齐向一位通过向加密货币投资1,500美元而赚了10万美元的男人提供了有关比特币的建议。拉姆齐反复表达了他对比特币能否兑现的怀疑,称这种加密货币为“有趣的钱”.

NCE:比特傻观点:四大发明_Snowball Finance

我国古代有四大发明。Defi世界也有四大发明:明面上的发明两个,dex和lending。地底下的发明有两个yieldfarming和rebase.

比特币:内蒙古男子挖比特币发家致富 曾经是个打工仔 现在家缠万贯_WSTA

包有才,内蒙古二连浩特人,今年43岁,职业铁路站点调度员,收入5千,本是平凡的打工者是怎样想法让他年入百万,我们接下来听包先生说.

GAS:波卡周报:Hypersphere 预测 2021 年将有超过 10% 的 DOT 用于平行链插槽_ENTRC

波卡本周进展 12月23日,波卡联合创始人Robert发布致社区的一封信,分享了目前RococoV1版本的功能以及开放插槽使用的时间.

1INCH:关于1INCH (1inch) 转入创新区的公告_BAL

尊敬的用户: 为了提供更好的服务,满足用户更精细化的交易需求,1INCH(1inch)现已从“全球观察区”转入“创新区”,同时解除50000USDT的持仓限制.