以太坊钱包地址长度,以太坊钱包地址有大写字母吗

  

  免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。   

  

  边肖:记得要集中注意力。   

  

  来源:以太坊爱好者   

  

  本文是Bloxis对Metamask在Gitcoin上的通用元交易竞赛的回应。由于我们计划将这一功能集成到我们即将推出的产品中,我们在这一领域投入了大量的时间和精力。正因为如此,我们真诚地希望参与这一领域的讨论。如果你对我的观点有异议,请指出来。我很高兴和你一起讨论。   

  

  引言   

  

  只要你愿意花钱,你可以在以太坊交易中执行任何操作(在气体限制内)――在一个几乎完全去中心化的无边界区块链网络上。听起来很酷,不是吗?事实确实如此。但是!问题是,执行交易需要用气,气是以兆字节支付的,但是谁有兆字节给新用户呢,亲爱的?(什么?你说赛博朋克,囤币党,传销组织都有?拜托,那不正常)   

  

  DeFi、区块链游戏和dApp生态的未来取决于进入的玩家规模。这意味着我们需要解决新玩家的入门问题,降低安全操作的知识门槛。目前主要的两个问题是:玩家在使用时需要有一个数字钱包和一些以太币——这是很多业内人士都在努力攻克的方向。   

  

  所谓元交易,就是允许用户用自己的钥匙签名发起交易,但不要求用户支付交易费用(即燃气费),而“接力”则是为ta支付燃气费。作为发送方,中继向网络提交交易并支付燃气费。事务的目标契约可以确定原始用户及其意图,并据此处理契约的调用。   

  

  在元交易发生之前,需要预存款资金来完成上述服务,即将泰币存入最终用户的账户,以促进交易。U推出的Lambda Sensui就是这方面的典型应用。   

  

  如果你想了解更多关于元交易的知识,你可以阅读下面这篇文章,作者是奥斯汀格里菲斯,社区中的标杆人物。   

  

  以太坊交易:降低以太坊普及门槛(编者注:中文翻译见文末)   

  

  实现   

  

  在链条上,实现元事务需要一个编码标准对原发送方发送的事务数据进行编码――以便目标契约可以恢复他们的签名和数据而不受msg.sender(即中继)的影响。然而,在该链下,最终用户必须通过API或通信协议来连接到中继。且中继器本身必须拥有一些以太网和基础设施来获取和转发元事务。   

  

  非常适合特定情况的解决方案,如戴的20令牌合同中使用的许可方法,很好地解决了链中的问题-这是一种需要最终用户直接提交的批准方法。此外,该方法还实现了EIP-712,用于表示和签名链中使用的消息数据。可以说,Dai只需要支持这种元事务,因为其他所有用例(比如发送Dai和协调DeFi操作)都可以通过这个解决方案实现。   

  

  在此基础上,加油站网络更进一步。它创建了一个基于智能契约的网络来协调中继,并创建了一个契约方法,使任何智能契约只需稍加改动就可以接入网络。所有的中继都通过一个中继集线器与契约进行交互,中继集线器本身就是一个契约,它维护着中继的注册表。还有的合约向中继聚合站支付以太币,鼓励中继为用户支付燃气费,中继只有成功转发一笔交易才能获得费用。   

  

  合约钱包   

  

  许多组织,如Dapper Labs、Gnosis和Argent,都在推出合同钱包,旨在兼顾用户体验和安全性。钱包在智能合约中掌握着用户的资金,合约中发送交易、保护账户安全的功能可以远远超过以太坊协议本身的水平。   

  

  当用户使用合同钱包时,由于钱包中集成的联合签名功能,最终用户可以仅通过其设备上的密钥来签署交易,表明他进行交易的意图,并将交易发送给联合签名者或转发者(通常是钱包服务提供商),他们将转发交易并承担油费。比如在Dapper Labs的产品CoreWallet上调用invokeN… method,实际发生的情况就和我们这里说的一样。   

  

  来源:Dapper Labs   

  

  用这种方法,即使账户中没有以太坊也可以进行交易,不需要整个行业接受同一个标准——契约钱包可以像外部所有者账户(即标准密钥对控制的普通用户地址,EOA)一样调用其他契约。另外还带来了一系列的安全功能,比如Authereum的交易防火墙。   

  

图源:Authereum

  

合约钱包带来的困扰

  

对于合约钱包和诸如以太坊域名服务(ENS)等创举,以太坊社区内的呼声很高。然而,随着许多用户在其所有的链上活动中都使用 ENS 域名作为身份(并且域名可读部分使用了真实姓名),巨大的隐私和安全问题开始显现。

  

此外,大家一边关注保护隐私的协议(比如 AZTEC,可用于隐蔽发送 token)(这些协议都依赖于私钥的所有和保管),另一边又忽略了私钥管理的难度和传统方案的隐私方面。

  

以太坊的钱包地址本身是 “伪匿名的”(因此具有一定的隐私性),但现在许多钱包软件提供商都在鼓励其用户获取 ENS 地址,却不告知他们这样做的后果。简言之,以太坊账户的交易记录(包括其投资组合及与 dApp 之间的互动记录)在链上是公开的,一个地址注册 ENS 域名之后,这些交易活动就跟这个 ENS 域名关联起来了。而用户所注册的 ENS 名字很可能是用户在其它服务或是现实生活中已经使用过的名字。这就是我对(供个人使用的)合约钱包地址绑定 ENS 持怀疑态度的主要原因。

  

然而,对于将 ENS 用于识别智能合约以防止诈骗,以及可以从透明操作中获益的组织使用 合约钱包/多重签名钱包,我举双手支持。

  

通过分层确定性钱包规则(Hierarchical Deterministic Wallet,简称 HD 钱包),用户可以用单个私钥来生成许多 EOA 地址,以保管不同的资产;使用多个地址分别操作,即便用户会使用 dApp、DeFi 协议并发起大量交易,仍然可以保持一定程度的匿名性。使用这套规则,用户甚至可以只持有一把私钥,然后为每一个要用到的 dApp 和 token 专门创建一个 EOA 地址用于交互。合约钱包虽然也能做到这一点,但因为 Gas 费用的存在,为用户使用的每一个 dApp/代币 创建一个合约钱包显得十分昂贵而不切实际。就算不考虑 Gas 费用,这样做也会造成网络拥堵。

  

分层确定性钱包本身便是一种隐私解决方案,也适用于以太坊钱包。图源:Casa

  

假设以太坊生态内所有的用户对于与其交互的每一个 dApp 都有一个对应的合约钱包,从而既能利用元交易功能,又能保护自己的隐私 ―― 届时智能合约采用一个通用的标准会更加合理。

  

迈向普遍化标准

  

无论你对基于合约及合约钱包的解决方案持有何种立场,目前都还没有一个确定的标准 ―― 方法调用因合约而异,用于中继交易的系统也各不相同。Gas Station Network 已经做了许多基础性的工作,但依旧不够灵活。收款方合约可能不会支付 Gas 费。那么用户又如何使用其资产来为中继者支付报酬呢?我们该如何让另一方来为这笔交易支付 Gas 费呢?这些都是我们希望在普遍化元交易竞赛中解决的问题 ―― 真正有价值的提案就是要面对这些问题。

  

基于我们提出的想法,我们的总法律顾问 Vincent 提出了一个想法:让 dApp 的开发者预先为用户存入资金用于支付 gas 费,用户用法币来交换;为避免 dApp 项目被认定为交易所,这些以太币只能在 dApp 内部使用。这就是我们希望未来的普遍化元交易标准能够支持的机制(这是我们一年前在研究另一件事情的时候想到的)。通过 acceptRelayedCall 方法的一个自定义实现,Gas Station Network为这一想法提供了技术支持。

  

此外,让中继者能够批处理交易,是不是也能降低 Gas 费用?

  

无论提议来源于何处,我们都希望在其中看到如下内容:

  

有机制可支持替代性的中继者 报销/支付方式适合在资产 dApp 和 DeFi 的智能合约(而非合约钱包标准)中运行的方法支持在目标合约或用于中继交易的合约内进行交易批处理的机制我们的提议概述

  

如你所见,我们强烈支持 Gas Station Network提出的想法。由 RelayRecipient 提供的 getSender和getMessageData方法实现了一个统一的接口,使所有合约的元交易可以相互兼容。然而,这些方法在其当前的形式下还存在两个短板 ―― 无法防止钓鱼网络和重放攻击。详情:

  

ethereum/EIP-1613:Gas Station Networkethereum/EIP-712为了防止钓鱼,EIP-712 提出了一个巧妙的解决方案 ―― 域名分隔符。该对象包含了(用户签名交易要转发给的)合约的详细信息 ―― 也就是地址,以及 dApp 的名称和版本。这些数据都包含在签名中,并和所有其它的交易数据一并以一种非常友好的方式呈现给终端用户。这样就限制了用户签名交易的方式,防止他们发起预期以外类型的交易(比如有意把交易发到错误的合约)。

  

使用 signTypedData_v4 方法对数据签名的 Metamask 界面。图源:Metamask

  

支持 EIP-712 的合约需要验证域名分隔符与合约自身是否匹配,如果不匹配则回绝该交易。从下面列出的 Dai 合约的代码中,你可以看到这一点。我们希望将 EIP-712 整合进 getSender 和 getMessageData 中,以便能在每一次方法调用时执行这项检查 ―― 一旦签名不匹配,就回绝该交易。你可以点击下面的链接查看该函数的代码。(很抱歉,文章内嵌代码的格式无法正常显示)

  

Makerdao/dss:

  

https://github.com/makerdao/dss/blob/b1fdcfc9b2ab7961bf2ce7ab4008bfcec1c73a88/src/dai.sol#L114-L138

  

此外,在上面的代码中,你还可以看到 MakerDAO 自己用 nonce 属性实现了重放保护 ―― 如果没有该属性,得到授权的参与方可以通过重放交易来耗尽用户的资金。一笔元交易经常属于一组操作的一部分,而这些操作可能依赖于前面的交易。举个例子,在我们构建的概念验证案例中,用户可以将 xDai 存入 Compound 协议。

  

而在主网上,这意味着我们要批准 cDai 合约访问用户资金,然后调用 mint方法将该资金存入贷款协议。如果用户的账户并非合约钱包,完成这一过程就需要一系列操作:首先得通过交易调用approve/permit方法,然后等待该交易被打包之后再调用mint方法。而有了合约钱包之后,就可以一步到位,通过调用一个特殊的合约方法来批处理这些交易。如果有一种人人可用的普遍化元交易批处理方法,那肯定是一个重大的创新。

  

这会大大简化链上的活动,就像上文举过的种种例子。此外,该方法还要允许用户可以同时签名和转发多笔互不相关的交易。不仅如此,该方法还应该学学 MakerDAO 是如何使用 permit方法处理 nonce 和重放保护的。这样,用户就可以为互不相关的合约转发多条消息,同时不用操心网络中交易的提交顺序 ―― 例如,当用户为某些现实生活服务支付多笔资产的时候。然而,在某些情况下,用户可能希望往某一个合约发送多笔元交易。

  

例如,某一个只持有一种资产的 EOA 想要批量发薪水的时候。一个批处理元交易的系统在设计的时候必须考虑到这一点,并确保保持了交易发送的顺序。此外,批处理交易也让中继者可以通过用户签名的交易集中地收取手续费,也就是在一批交易中加入一笔转账给中继者的交易,方法也是可以定制化的。

  

可以是将 ERC-20 代币转给中继者,或者让用户的目标合约来支付该费用。中继集合器应当支持交易批处理,并通过 sendRawTransactionSet方法来补充sendRawTransaction,以便同一用户发送多笔交易。

  

sendRawTransactionSetPlural方法也应该加以利用,以方便中继对来自多个用户的交易进行批处理,从而最小化 Gas 费用。

  

图源:Tabookey

  

如果可以通过交易集中的一笔交易来为其提供资金,那么只需要对中继集合器现在的工作流程做很小的改动就可以实现上述操作,中继者可以将 gasPrice 和费用参数acceptRelayCall都设置为 0。中继者可以从交易集中不断提取出交易并按标准来处理,直至完成。我们面临的真正挑战是如何创建一种标准将交易打包进交易集,以及解包并执行交易(同时确保交易的原子性)。如果交易的原子性无法得到保证,中继者就可以通过只转发付费的交易来蒙混过关,而无视集合中的其它交易。这才是工作的重头!对于如何实现这一点,我目前还毫无头绪,但请继续关注我的下一篇文章!希望我可以将这一切变成可行的方案来参加竞赛。

  

总结

  

在我们看来,合约钱包有用不假,但有点名过其实了,而且因为合约钱包常常鼓励用户做那些便利日常使用的措施,还可能会危害到链上的隐私。这会极大地影响我们希望在以太坊生态内实现普遍化元交易的方式。我们希望在 Gas Station Network的基础上更进一步,以支持 EIP-712 和批量交易。这也意味着对 RelayHub 和 RelayRecipient 进行修改,并创建一个新标准,支持签名交易集合并保证交易的原子性。

相关文章