以太坊上的 Dapp 一定要用户付 gas 费用么?未必

对以太坊稍微了解一些的同学应该知道,往以太坊区块链上发送的每一笔交易,都需要付一定数量的油费(gas fee),以太坊矿工也是根据油价(gas price)排序去打包交易。对于转账操作来说,转账时支付一定的手续费基本还能接受;对于 Dapp 应用来说,每点一个按钮都要支付手续费似乎有点儿不太适宜了。

那么,有没有一种办法,让用户既能完成链上操作,有不需要支付手续费呢?

不瞒您说,还真有!

非对称加密

这里多唠叨两句非对称加密,如果你对此有所了解可以直接跳过此部分。

非对称加密由两部分组成:公钥和私钥。
公钥一般用来加密,公钥加密的数据只能用对应的私钥解开。
私钥一般用来签名,把私钥签名的数据和公钥公布出去,收到数据的人可以使用公钥来验证数据,通过验证,说明数据未被攥改且确实由对应私钥拥有者发出。

以太坊合约交易

一个以太坊交易主要由一下几部分组成:
AccountNonce:此交易的发送者已发送过的交易数
Price:此交易的gas price
GasLimit:本交易允许消耗的最大gas数量
Recipient:交易的接收者,对合约交易来说,就是合约地址
Amount:交易转移的以太币数量,单位是wei
Payload:交易可以携带的数据,对于合约交易来说,就是要调用的方法名和参数
V R S:交易的签名数据,通过用户私钥签名交易得到

如果是正常发送一个交易,用户就要指定 Price 和 GasLimit,然后被矿工宰上一刀,雁过拔毛。

对于 Dapp 应用来说,就存在两个问题:

  1. 对于非交易类应用,比如说投票应用,用户不涉及资产交易,只是点个按钮投个票,就要收取费用,并不十分合理。
  2. 对于区块链小白用户来说,只是想试用一把应用,就要去折腾购买以太坊来付费,门槛还是比较高的。不是很有利于产品推广。

由 Dapp 开发商来付费

这篇文章 提供了一个很好的方案:由 Dapp 开发商或者合约开发者付费。
具体怎么做呢?

  1. 用户将要发送的数据签名,并将源数据,签名数据发送到 Dapp 后台

  2. Dapp 后台接收到用户请求,将用户发来的数据当作交易 payload 的一部分,以合约开发者的身份组装新的交易,发送到以太坊网络。
    在这个阶段,交易发送者是合约开发者,相当于由合约开发者代理用户发送了这笔交易,也就不需要用户付费而是由合约开发者付费了。

  3. 智能合约接收到请求,验证交易发送者确实是 contract owner, 并对用户数据进行验签操作,更改该用户在合约中的数据状态。

安全考量

在这个方案中,尽管用户没有把交易直接发送到以太坊网络。但是私钥还在自己手上,发送的数据都是用自己的私钥签名的数据,可以保证数据在传输过程中不被伪造和攥改。

如果你感觉那地方还有啥不妥,欢迎留言讨论。

你可能感兴趣的:(以太坊上的 Dapp 一定要用户付 gas 费用么?未必)