主页 > imtoken官方 > 本文对比了两种区块链网络中gas费支付(元交易)的实现方式

本文对比了两种区块链网络中gas费支付(元交易)的实现方式

imtoken官方 2024-01-26 05:08:15

在这里写自定义目录标题

区块链应用之所以饱受诟病,是因为门槛高。 例如,每发送一笔交易,都需要消耗一定数量的Gas费用,而很多拥有ERC20代币的用户使用Dapp必须先在钱包中存入一定数量的ETH来支付Gas费用。

以太坊的实现——元交易合约

如果可以为新用户支付Gas费用,将大大降低Dapp的使用门槛。 以太坊不提供执行此操作的本地方法。 于是就有了元交易,让没有持有ETH的账户可以和区块链进行交互,可以使用ERC20代币来支付Gas。 所谓元交易(Meta transaction)就是让用户使用自己的密钥来签名和发起交易,但不需要用户支付交易费用(即Gas费用),而“中继”则需要支付TA Gas费用. 作为发送者,中继者向网络提交交易并支付 Gas 费用。 交易的目标合约可以确定原始用户及其意图,并据此处理合约的调用。

典型的元交易是 Bouncer Proxy,它由 4 个基本部分组成:

用户账户:不持有一对ETH的公私钥,该账户可以对消息进行签名。矿工账户:持有一对ETH的公私钥,可以为用户支付Gas费用,即支付Gas meta -transaction Miner Guard Proxy Contract (Bouncer Proxy): 合约可以接收第三方签名的消息作为输入 Contract receiver: 与用户真正想要交互的Dapp相关的合约## NetCloth区块链网络费用支付

元交易的守护代理合约,可以参考这里。

元交易的使用场景

元交易的使用场景如下:

比特币分叉影响比特币总量_代付比特币_比特币之父能不能随意制造比特币

没有 ETH 帐户的用户。 用户是守卫代理合约的所有者,只有当输入的消息是用户本人或白名单账户签名时,守卫代理合约才能进一步执行转发调用。 守卫代理合约需要持有ETH或ERC20代币,用于奖励矿工(中继)。 元交易的过程 用户创建一个不需要支付任何费用的交易,包括以下几个部分: 矿工收到用户的元交易消息后,调用守卫代理合约的转发函数代付比特币,转发通话,并支付此次通话的 Gas 费。 forward的函数输入为:

守卫代理合约的转发功能,通过验证哈希签名,确认只有用户或白名单账户签名的元交易才能被守卫代理合约转发,元交易的矿工才能获得奖励.

当签名验证通过后,相应数量的奖励将从守卫代理合约划入矿工账户。

然后守护代理合约,带上用户指定的参数,调用用户指定的合约,负责Gas的支付。

这样就实现了一个用户账户,不持有ETH但实现提交自己的交易,可以使用ERC20代币支付Gas。

的优点和缺点

这种实现方法也有缺点。 如果元交易的合约接收地址是基于msg.sender的应用逻辑,那么整个交互过程就不会流畅,因为msg. 成为代理合约的地址,而不是元交易的用户地址。

比特币分叉影响比特币总量_代付比特币_比特币之父能不能随意制造比特币

如果第三方为用户支付gas费,部署一个守卫代理合约是没有问题的。 而如果用户使用ERC20支付Gas,那么每个用户都需要能够部署自己的代理合约代付比特币,奖励给矿工的代币必须由代理合约持有,每个用户都需要能够管理和充值代理合约中自己的gas Token。

NetCloth 区块链网络费用支付

ETH通过合约来解决元交易的问题,自然会有一些项目实现原生元交易。 NetCloth链不久前升级了最新功能,原生支持第三方gas支付。 其实现原理是:当一个交易消息体包含多个签名时,NetCloth区块链网络将按照交易签名的顺序选择第一个收取交易手续费。

NetCloth佣金支付技术文档,请参考这里。

佣金支付原则

NetCloth 链上的交易结构:

{

比特币之父能不能随意制造比特币_比特币分叉影响比特币总量_代付比特币

"type": "nch/StdTx", // 交易type,固定为nch/StdTx "value": { // 交易value "msg": [], // msg数组 "fee": {}, // 交易费用 "signatures": [], // 交易签名,和msg一一对应 "memo": "" // 交易附带的memo }

代付比特币_比特币分叉影响比特币总量_比特币之父能不能随意制造比特币

}

当第三方愿意帮助用户支付gas费时,可以与用户协作生成交易,同时将自己的交易签名放在首位。 由于msg和signatures是一一对应的,第三方需要生成一个自己发起的交易,放在msg数组的首位。

交互过程如下:

在这里插入图片描述

过程

燃气费支付流程

代付比特币_比特币分叉影响比特币总量_比特币之父能不能随意制造比特币

用户生成一个交易,没有先签名,发给第三方修改交易,加上自己的msg,然后签名。 msg和signature放在交易的第一位,返回给用户。 对于交易,使用您自己的私钥签署用户以将最终交易发送到网络。 交易在链上执行时,会向交易中的第三方收取gas费。 好处

1.交易基于各自的签名,用户与第三方之间无需信任

2. 第三方支付的gas费可以通过链下结算方式向用户收取

3、即使合约有基于msg.sender的应用逻辑,用户也可以正常使用

4. 整个过程只有3个角色参与,没有合约层面的交互

总结

单纯从实现的角度,很难判断合约实现是否优于原生实现。 但对于不熟练的区块链开发者来说,理解合约、正确使用合约、避免安全问题是一个比较高的门槛。 如果有更好的原生支持方式,无论是供开发者使用,还是集成到客户端供新手用户使用,都会大大降低新手用户使用Dapp和区块链应用的门槛。

参考:

[1]: @andreafspeziale/understanding-ethereum-meta-transaction-d0d632da4eb2

[2]: