Dai转账时可以不需要Ether吗?
也许在未来有一天,当我们提到 Dai 的时候,我们将不再关注它是一种 ERC20 Token 这个现实。 在刚刚过去的黑客松 ETHSingapore 上,有一个项目叫做 dai.ly ,它为我们描述了一种可能的未来。
在介绍 dai.ly 之前,让我们来了解一下 ERC20 Token 的背景,以及为什么当我们谈 Dai 的时候,我们不得不注意到它是一种 ERC20 Token。
用 Ether 支付的手续费
Dai 是一种 ERC20 token。 在以太坊的网络上,部署着 Dai 的智能合约,这个合约里面有着自己的 “子账本”,在这个 “子账本” 里,记录着每个地址拥有的 Dai 的数量。
当我们要把 Dai 从一个地址转到另一个地址时,我们在修改这个 “子账本” 里的记录: 增加一个地址拥有的 Dai 的数量,同时减少另一个地址拥有的 Dai 的数量。 或者说,我们改变了这个 “子账本” 的状态。而 “子账本” 的状态,是整个以太坊网络状态的一个部分,我们因此也改变了整个以太坊网络的状态。
任何改变以太坊网络状态的操作都是一笔交易。 而交易的执行者需要支付手续费(燃料费用)给矿工。交易费是用 Ether 来支付的。于是 “即使我的地址里有很多 Dai,但如果我的地址里没有任何 Ether,我也没法进行转账。”
也正因为如此,当我们谈到 Dai 的时候,不得不注意到它是一种 ERC20 Token, 一种无法脱离以太坊的存在 。
ERC20 和 ERC865
也许有朋友不懂什么是 ERC20 Token,我们可以来看一个比方:
洗衣机和冰箱都是电器: 当我们在说它们是 电器 的时候,我们是可以找到他们的共性,它们都提供了插头,我们通过 插头为它们供电。
Weth 和 Dai 都是 ERC20 Token: 而当我们说它们是 ERC20 Token 的时候,我们也可以找到他们的共性, 它们的智能合约都提供了一些相同的功能。 比如我们可以查到某个地址里有多少 Weth 或者 Dai (对应合约里面的 balanceOf 操作); 再比如我们可以把自己的 Weth 或者 Dai 转到另一个地址(对应合约里面的 transfer 操作) 。
所以,如果一种 Token 的 智能合约 支持 ERC20 标准 里要求的所有操作,那么它就是一种 ERC20 Token
我们可以仔细看一下 ERC20 支持的各种操作,你会发现它的设计是有一个假设的: 作为 Token 的所有者的你,直接和这个合约进行交互。 但如果你要进行改变以太坊状态的操作,你不可避免地要支付手续费, 于是你需要拥有 Ether。
要解决这个问题,我们很容易想到: 如果直接和以太坊上的合约进行交互,我们必然会支付 Ether 作为手续费, 那如果我们不和以太坊上的合约进行交互,问题不就解决了吗? 于是, 以太坊社区设计了一种新的 Token 叫做 ERC865 Token,用以实现 Token 转账的手续费能够使用 Token 本身而非 Ether 来支付。
作为 ERC865 Token 的所有者,我们不用再直接和以太坊的合约进行交互。 ERC865 Token 提供了一个叫做 transferPreSigned 的新操作: 它可以让 Relayer 来执行 Token 所有者预先签名过的交易,也就是说手续费依然以 Ether 的形式支付,但是由 Relayer 来支付了。 当然, Relayer 之所以愿意执行这些交易,是因为有利可图。 Token 的所有者,在交易里面,会承诺给Relayer 的好处。
Dai.ly : 体验 ERC865 版本的 Dai
你会发现, ERC20 标准 要求的所有操作 和 ERC865 标准 要求的所有操作是不冲突的,这意味着,一种 Token 如果它的智能合约里面,既实现了 ERC20 标准 里要求的操作,也实现了 ERC865 标准里要求的操作,那么这种 Token 既是 ERC20 Token 也是 ERC865 Token.
很遗憾的是,目前在以太坊主网上的 Dai 仅仅是 ERC20 Token, 它并没有实现 ERC865 标准 里面提到的操作。
于是, dai.ly 团队在测试的时候, 在 Ropsten 测试链上创造了一种新的 Token, 这种 Token 既是 ERC20 Token 也是 ERC865 Token,用来让大家体验一下 ERC865 版本的 Dai。
你可以在 这里体验下无需 Ether 就实现 Dai 的转账:
在 dai.ly 的首页,我们可以点击 Send 按钮, 然后你会看到下面的界面:
在这个界面上,我们会看到, dai.ly 可以让你输入一个地址和要转账 Dai 的数量,它将从 0x570932869143c8a6e07b4aa10e0b30814cf45ff0 转账 Dai 到你指定的账户(当然,这是在 Ropsten 测试链上)。
那么,这背后到底发生了什么呢? 我们可以在 etherscan 上来看下一笔交易背后的故事:
0x446C4201924ec3C9CAc04c0f18bEA09D752255C3 拥有 ERC865 版本的 Dai, 他想要转账给 0x14a9511DF82DeCc3e2a64b77346EEc04Ef759843
0xbf76eCA1fbDE4fcec2D4419549dEb560C53A3071 作为 Relayer 帮忙在以太坊上执行了这笔交易,收下了 1 Dai 的好处。
结语
目前, ERC865 标准 还没有得到太多的关注。 Dai.ly 也只是做了一个用于演示的 Demo。但随着越来越多有趣和有用的 Dapp 落地, 加密货币被越来越多的人接受,或许对 ERC865 Token 的需求会越来越大。 正如WIRED 杂志 的创办者 Kevin Kelly 说过的一句话:
未来已经在这里了,只是它分布得还不那么均匀。