以太坊上的 Dapp 一定要用户付 gas 费用么?未必
对以太坊稍微了解一些的同学应该知道,往以太坊区块链上发送的每一笔交易,都需要付一定数量的油费(gas fee),以太坊矿工也是根据油价(gas price)排序去打包交易。对于转账操作来说,转账时支付一定的手续费基本还能接受;对于 Dapp 应用来说,每点一个按钮都要支付手续费似乎有点儿不太适宜了。
那么,有没有一种办法,让用户既能完成链上操作,有不需要支付手续费呢?
不瞒您说,还真有!
这里多唠叨两句非对称加密,如果你对此有所了解可以直接跳过此部分。
非对称加密由两部分组成:公钥和私钥。 公钥一般用来加密,公钥加密的数据只能用对应的私钥解开。 私钥一般用来签名,把私钥签名的数据和公钥公布出去,收到数据的人可以使用公钥来验证数据,通过验证,说明数据未被攥改且确实由对应私钥拥有者发出。
一个以太坊交易主要由一下几部分组成: AccountNonce:此交易的发送者已发送过的交易数 Price:此交易的gas price GasLimit:本交易允许消耗的最大gas数量 Recipient:交易的接收者,对合约交易来说,就是合约地址 Amount:交易转移的以太币数量,单位是wei Payload:交易可以携带的数据,对于合约交易来说,就是要调用的方法名和参数 V R S:交易的签名数据,通过用户私钥签名交易得到
如果是正常发送一个交易,用户就要指定 Price 和 GasLimit,然后被矿工宰上一刀,雁过拔毛。
对于 Dapp 应用来说,就存在两个问题:
这篇文章 提供了一个很好的方案:由 Dapp 开发商或者合约开发者付费。 具体怎么做呢?
用户将要发送的数据签名,并将源数据,签名数据发送到 Dapp 后台
Dapp 后台接收到用户请求,将用户发来的数据当作交易 payload 的一部分,以合约开发者的身份组装新的交易,发送到以太坊网络。 在这个阶段,交易发送者是合约开发者,相当于由合约开发者代理用户发送了这笔交易,也就不需要用户付费而是由合约开发者付费了。
智能合约接收到请求,验证交易发送者确实是 contract owner, 并对用户数据进行验签操作,更改该用户在合约中的数据状态。
在这个方案中,尽管用户没有把交易直接发送到以太坊网络。但是私钥还在自己手上,发送的数据都是用自己的私钥签名的数据,可以保证数据在传输过程中不被伪造和攥改。
如果你感觉那地方还有啥不妥,欢迎留言讨论。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!