哈希Meta数藏多久可以转赠?

今日无上新,省钱的一天....

一、鲸探(蚂蚁链粉丝粒)

爱心捐赠活动:参与月捐得限量数字藏品

【丝路金花】数字艺术茶首发!

三、洞壹元典平台将于12月30日14:00联合中国军网免费发放岱天荣老师的新年纪念版摄影作品《星星伴我守边防》。本期发行为中国军网为答谢网友热情,从预留的2500份中选取的1000份,添加岱天荣老师亲笔签名制成的“新年纪念版”。

发行价格:公益领取(每个ID限领一份)

《反贪风暴5》纪念海报数字藏品热血来袭,集齐解锁惊喜彩蛋

邀请有礼 | 邀请新用户,领取福利~

相约圣诞,喜迎新年!One Meta双旦活动重磅来袭!

九、NFT应用平台(应用市场搜索下载)

新注册用户可免费获得一枚限量收藏版NFT头像

信息来源:来自互联网公开信息

声明:本内容不构成投资建议,请谨慎对待。如有侵权,请告知删除。

序寻优matlab代码随时访问我的和 元批量实例归一化用于可推广的人员重新识别 (MetaBIN),[] <不成功的泛化场景和我们的框架的说明> (a) 当训练的 BN 模型无法区分未知域上的身份时,就会发生欠风格归一化。 (b) 当经过训练的 IN 模型甚至删除了 ID 区分信息时,就会发生过度风格归一化。 (c)

在合约内启用元交易是一个强大的补充。要求用户持有ETH来支付Gas一直以来都是而且仍然是新用户进入的最大挑战之一。如果只是简单的点击,谁知道现在会有多少人在使用以太坊?

但有时,解决方案可以在你的合约中加入元交易能力。实现起来可能比你想象的要容易。

元交易是一个普通的以太坊交易,它包含另一个交易,即实际交易。实际交易由用户签署,然后发送给运营商(或类似的操作者),用户不需要Gas和区块链交互。而是由运营商支付费用签署交易,提交给区块链。

合约确保在实际交易上有一个有效的签名,然后执行它。

如果我们想在合约中支持广义的元交易,可以通过几个简单的步骤完成。从高层次上讲,有两个步骤:

第1步:验证元交易的签名。按照标准和ecrecover创建一个哈希值来完成:

第2步:一旦得到验证,我们就可以提取实际的交易数据。通过对当前的合约地址使用delegatecall,执行一个函数(而不做新的合约调用)。请记住,delegatecall 使用当前合约的状态去调用合约的代码。因此,通过执行address(this).delegatecall,可以在当前的合约中执行所有的功能,并且可以传递交易数据。

大致就是这样。但也有一些关键的信息需要验证,也有签名的替代品。

让我们来看看更多细节。

正如我们所看到的,执行的核心是 delegatecall。这是实际交易被执行的地方。但是为了确保正确的执行,我们必须确保一些事情是正确的。

首先让我们看看交易结构中的数据,包含了用户设定的所有相关要求,以及 bytes data 作为将要执行的交易本身。data 也是从用户传递到运营商再到合约的内容:

我们还需要在所有这些数据上计算一个哈希值。这将用于签名 schema和防止同一交易的重复执行。关于这方面的细节,请看最后的签名解释。

这是交易schema的哈希值:

这是EIP712 Schema 的哈希值,可以在合约的构造函数中计算一次。

通过hash所有相关的值,我们可以确保只有原用户签名的交易才会成功执行。例如,即使运营商只是改变了expirationTimeSeconds中的1秒,它也不能成功执行。

这只是哈希值的第一部分,要了解包括安全签名要求在内的全部细节,请阅读下面关于签名的部分。

如果我们只是执行delegatecall,交易的msg.sender仍然是元交易的运营商,而不是原始签名者。

我们可以通过设置一个上下文变量来解决这个问题:

我们要防止的另一件事是执行元-元-交易。(除非你想无缘无故地耍酷)

它没有任何作用,只是浪费了额外的Gas。因此,我们可以在任何交易执行之前添加检查。

我们将进一步确保所有规定的条件得到满足

  • 过期时间是有用的,用户需要知道一个交易在几个月后不会被执行。
  • 一个由用户定义的Gas价格。这在你的系统中可能不需要。因为Gas是由运营商支付的,需要指定gas交易成本的唯一原因是该值在交易中会具有进一步对交易的影响。例如,在0x中,Gas价格会影响费用价格。

当然,我们只想执行有有效签名的交易。一个天真的解决方案可能只处理 transaction.data 并签名。

  • 我们如何确保所有额外的交易参数被正确设置(过期时间、salt、signer...)?
  • 我们如何防止一个已签名的交易被多次使用?

第一部分很简单,我们用前面的_getTransactionTypedHash函数在所有这些值上创建一个哈希值。第二部分通过解决的问题,你可以看到如何从交易数据和额外的EIP-712数据中创建一个哈希值,代码如下:

将额外的信息放入我们的哈希值中,因此,一个已签署的交易只能准确地用于该合约与给定的链Id。所有的细节,请查看EIP或我之前关于的文章。

好了,现在我们有了完整的交易哈希值和用户的签名。我们可以通过一个辅助工具提取byte32值来获得三个值r、s、v,这三个值是签名中的椭圆曲线签名值。uint8的v值只需要一个简单的转换。

使用ecrecover与给定的签名和交易哈希,可计算出一个签名者地址。如果这个地址与transaction.signerAddress相匹配,则签名确实有效。

这就是常规的签名方案。如果你需要用户签署他自己的交易,它就能完美地工作。

但如果你想让智能合约创建有效的签名呢?

一个更高级的使用场景是让智能合约签署元交易,但想象一下,用户把他的资金放在一个多签名的智能合约里面。这对于某些钱包来说已经很常见了。这个用户不能用EIP-712方案签署交易来创建一个有效的v、r、s签名。

这就是的作用,它允许智能合约来验证签名。标准本身没有说明合约如何做到这一点。唯一的定义是函数签名,其定义是:

其中有效签名的返回值为0x1626ba7e。如何实现签名逻辑则取决于智能合约开发者。

那么,我们怎样才能验证这样的签名呢?

你可以在下边看到一个实现的例子。使用staticcall,我们可以确保在调用过程中没有进一步的状态修改发生。如果结果成功并且有一个有效的returnData长度(),我们可以检查返回值是否符合0x1626ba7e

你可能想允许更多的签名方法,比如预签名或拥有可以代表用户签名的运营商。请看0x中的现有类型,以获得一些灵感。

到目前为止,我们已经看到了所有实现的关键部分,这应该让你对如何实现它有一个好的启发。我还建议你看一下:

Openzeppelin EIP-712库仍然是一个草案,但对链ID可能改变的分叉情况有额外支持。也可以看看0x代码,本博文中的很多实现都来自于此。



我要回帖

更多关于 meta信标怎么获得 的文章

 

随机推荐