引介

以太坊元交易

曾汨   |     |   722 次阅读

Default featured image huge

引介

上手 Dapp 实在是太麻烦了。以太坊生态若想普及,就应该允许新用户直接使用其功能,而不是先安排几座大山让用户翻山越岭。

这意味着需要为新来的用户垫付 Gas 费用。当前的以太坊协议并没有提供原生方法来实现这一点。然而,得益于公/私密钥对,用户可以通过对元交易 进行签名并激励 桌面矿工(desktop miners)来为他们支付 gas 费用。

在一开始,先要自动生成密钥对并保存在你的浏览器中。那些密码朋克一定会对这种方式嗤之以鼻,但用户不该被下载钱包的要求挡在门外。首先,他们要能使用产品并通过 Dapp 提供价值。一旦他们收到了一些代币或以太币,就应该马上将这些币转移到类似 MetaMask 或 Trust 这样的钱包中。

基础

首先,我想介绍一些基础概念,来为解释以太坊上的元交易奠定基础。但如果你是一位密码学大牛的话,直接跳过吧...

哈希

通过哈希函数,可以将长短不一的信息转化为一段长度任意但可预测的(确定性的)结果。这是一类神奇的函数,可以将一大堆信息转变成一串短的,可作为摘要的数据 “指纹”。对于一个给定的输入而言,生成的 “指纹” 始终一致。如果你的原始数据中有任何细微的改动,生成的哈希值将大不相同。

密钥对

公/私密钥对运用了一些令人头晕的数学知识,当然,想搞清楚它的概念并不难;可以使用私钥对一个信息进行签名,任何人都能使用与之对应的公钥来证明该签名的正确性(译者注:即验证签署交易的私钥与相应的公钥是否恰为一对)。重申一遍,我可以给你一个带有我签名的信息,而你只需使用我的公开信息就能从数学上证明我对这条特定的信息签过名。私钥极为敏感,绝对不能公示给他人,而公钥则就可以被广泛分享。你的以太坊地址就是你的公钥,它代表了你的身份(译者注:准确点来说,你的以太坊地址是用你的公钥单向推导出来的)。

公钥也可以用来加密一个简短的信息,然后,只有私钥的拥有者才能解密该信息。这并不重要,但非常酷不是么?所以我认为应该告诉你:)(译者注:这就所谓的 “非对称加密”。)

来自 @cooganbrennan:“通过对一串数据的哈希值签名,你实现了三件事:
不可干扰:你知道数据没有被篡改过
身份:你可以明确交易的发送方
不可抵赖:发送交易的人之后无法否认发送了该交易”

交易

要想和区块链进行交互,你需要发送一笔交易。一笔交易由少数几部分组成,我喜欢用巨慢无比的邮件来类比:

  • 目标地址:交易发送到的目标以太坊地址。可以是另一个人或一个智能合约。你可以将它想象成写在信封正面的收件地址。
  • 价值:这就像在信封里放一丢丢现金给收件人。
  • 数据:这就像你寄出的信件上的内容。当你只发送价值时,这部分通常是空的。
  • Nonce(流水号):由于你发送的内容都是数字信息,因此可能被复制。为了防止同一封信被寄了两次,我们会跟踪一个计数。这有点像信封本身的标识。(另一个关于 nonce 的形象比喻是支票号码。从技术上讲,银行不应该兑现最后一张现金支票之前的一张现金支票)
  • Gas Price:这就像是你放在邮箱中的一些零钱,用来激励邮递员为你送信。你放的零钱越多,邮递员取走你信件的可能性就越高。
  • Gas Limit:这就像邮递员送信的最远距离的限制。假设他最终要去地球的另一边为你送信,这意味着他要绕过重重阻碍……你当然希望避免这种情况,因为你要为他的行程买单。
  • 签名:最终,我们把上面的数据都汇总在一起并进行哈希运算、用你(对哈希值)的签名来封好信封,该签名证明里面的内容都经过了你的验证。

这是一个非常不严谨的类比,像这样的类比我的脑子里还有一大堆。来边喝啤酒边慢慢聊吧,我在 Devcon 等你哦。

智能合约

我的祖父曾跟我讲过一个关于他哥哥在他堪萨斯州的后院里种植番茄的故事。他会将前一天晚上采摘的番茄放在门前的台阶上,旁边摆上一个标着价格的天平。每天晚上他都会出门从一个雪茄盒里收回挣到的钱。这个系统严重依赖于人与人之间的信任。智能合约和这有点类似,但支撑它的是数学,而非信任。

我喜欢将智能合约看成带有一组规则的存储。假设在盒子里有 25 个番茄,规则是 15 美分一磅。如果你往雪茄盒中寄一封内含 30 美分的信件,就会有两磅番茄送到你家。这个规则会一直运行,除非番茄卖光了。在这一天结束的时候,合约的所有者可以取走雪茄盒中所有的钱,因为他通过私钥证明了自己是盒子的主人。

合约之间也能互相交流。它们甚至可以使用我们前面提到的技能——证明某个特定的消息是由某个特定的账户签名的。这也正是(元交易)这种技术的核心所在…

元交易

首先,我精心设计了一笔交易,它的结构与一般的以太坊交易类似,但我在里面附加了点额外的信息:

  • 数据:信件中的这部分内容变得更加复杂了。它是经过编码的信息,详细列出了要执行的操作,包括要调用的函数名的哈希值以及要传递给该函数的参数。
  • 奖励:在一个去中心化的系统中,经济激励尤为重要。如果你希望 “桌面矿工” 来为你的交易支付 gas 费用,你就得付钱。不过,这些钱并不来自于你的账户,而来自代理身份的智能合约。以太币或其他代币都能用来支付给矿工。
  • 需求:交易中还可以包含额外的需求,并且可以通过智能合约对这些需求进行检查。比如说按照时间顺序检查交易。假设这笔交易只能在月底完成,合约可以验证这一点。

接下来,我不会把这笔交易直接发送给一个智能合约,我会将这笔交易发送到一个次级网络(secondary network)。这个网络会分析我请求的合法性并确保我签名的有效性。然后它们会选择哪些交易值得提交,并与区块链直接进行交互。

最终,当我的代理合约收到从第三方那里发来的我的交易之后,它将分析交易中的指令,然后付钱给第三方,并执行我的指令。这些指令可以是发送代币,调用函数,或任何普通区块链交易可以做到的事情。

以太坊元交易的录屏演示

在以太坊上通过身份代理合约进行元交易

结论

通过元交易,我们可以用一个完全没有以太币的账户来与区块链进行交互。对于推动以太坊的普及来说,这种技术可能是不可或缺的。用户并不关心去中心化或者私钥;他们更关心的是可以使用你的 Dapp 来做一些对他们而言重要的事情。

Universal Logins

另一个关于元交易的非常棒的用例是 “Universal Logins”。你应该将以太币存在 “冷” 钱包中,并使用该 “冷” 钱包来给一个代理合约提供资金。这个合约将作为你的链上身份、代表你持有一些资金或代币。然后,随着各种新设备在你的生活中进出,你可以使用身份代理来信任它们。这些设备从未持有任何资金,里面的私钥也从未转移。同时,它们可以使用元交易和区块链进行交互。

跳跃代理——以太坊上的身份代理合约,为没有以太币的账户发起元交易

感谢您看完了这篇关于以太坊元交易的文章。可以来 Twitter 找我:https://twitter.com/austingriffith 或通过我的作品集了解更多关于我的信息。

灵感来源:

@avsa —— https://www.youtube.com/watch?v=qF2lhJzngto

@mattgcondon——
https://twitter.com/mattgcondon/status/1022287545139449856 &&
https://twitter.com/mattgcondon/status/1021984009428107264

@owocki —— https://twitter.com/owocki/status/1021859962882908160

@danfinlay —— https://twitter.com/danfinlay/status/1022271384938983424

@PhABCD —— https://twitter.com/PhABCD/status/1021974772786319361

Gnosis 安全合约

uPort 身份合约


原文链接: https://medium.com/@austin_48503/ethereum-meta-transactions-90ccf0859e84
作者: Austin Thomas Griffith
翻译&校对: 曾汨 & 阿剑


你可能还会喜欢:

干货 | 以太坊上发送交易的九种办法
引介 | Argent:为什么智能合约钱包才是未来
观点 | 以太坊用户体验的痛点

 
0 人喜欢