在合约内启用元交易是一个强大的补充。要求用户持有ETH来支付Gas一直以来都是而且仍然是新用户进入的最大挑战之一。如果只是简单的点击,谁知道现在会有多少人在使用以太坊?
但有时,解决方案可以在你的合约中加入元交易能力。实现起来可能比你想象的要容易。
元交易是一个普通的以太坊交易,它包含另一个交易,即实际交易。实际交易由用户签署,然后发送给运营商(或类似的操作者),用户不需要Gas和区块链交互。而是由运营商支付费用签署交易,提交给区块链。
合约确保在实际交易上有一个有效的签名,然后执行它。
如果我们想在合约中支持广义的元交易,可以通过几个简单的步骤完成。从高层次上讲,有两个步骤:
第1步:验证元交易的签名。按照EIP-712标准和ecrecover
创建一个哈希值来完成:
bool isValidSignature = ecrecover(hash(transaction), v, r, s) == transaction.signerAddress
第2步:一旦得到验证,我们就可以提取实际的交易数据。通过对当前的合