argent钱包软件转账免手续费之谜——钱包合约初始化细节

这里我想通过公开的数据获取到足够的信息,最后尽量能重现创建我的钱包合约的整个过程。

我钱包里的看到的那个地址上回说了是一个智能合约地址,这和传统的以太坊外部账 地址不同。仔细研究这个智能合约,发现它只是一个代理合约。这个合约真正的功能实现是另有其人,就是合约里的implementation变量存储的智能合约地址。

经过分析智能合约代码,发现是从它的创建者合约传入的该地址,而这个值是0xb6d64221451edbac7736d4c3da7fc827457dec03 

这个地址上的智能合约名是BaseWallet,而创建它的是一个外部账 ,这样后面就不用深入它的创建者了。

暂时捋一下过程,

(1)先用外部账 部署BaseWallet合约上链

(2)再用外部账 部署WalletFactory合约上链,并把BaseWallet合约地址传入WalletFactory合约的构造函数;

(3)创建Proxy合约的时候,会把BaseWallet合约地址穿给Proxy的变量implementation作为它的功能实现的合约。

implementation这个问题解决了,接下来看看创建Proxy合约的整个技术流程,看最上层的代码:

这里就有一系列疑问了:

(1)_owner是哪个地址,是外部账 还是合约账 p>

(2)注册了那些模块p>

(3)guardian又是哪个地址p>

(4)_salt又是哪些数据p>

现在目前能确定的也就是_label了,这个就是钱包里的ENS字符串,比如我的就是lilianwen.argent.xyz。因为这些数据都是通过外部输入链上的,所以不能马上确认其内容。试试能不能通过一些蛛丝马迹查明真相。

只能从原点再开始查了,看看我的钱包合约有哪些Event,说不定有什么线索

这两个事件不知道是哪些,只好通过分析源代码,大胆测猜测+检测了。

经过本人各种怼代码+测试+观察,终于把这里的所有event顺序都搞清楚了。

这里有个很重要的地方,看event和代码关联的时候,要从下往上看,才能对应到代码的执行顺序。

event log对应的提交顺序如下:

可以看到注册了非常多的模块,总共有10个模块被注册了。这里解答了第二个问题,还有第一三四没解答,看看有其他信息能找到不。在WalletFactory Event log找到这条日志:

这下只剩下第四个问题没有答案了。再仔细查阅源代码,发现不可能通过日志找到了,因为整个流程里,这个_salt都没有被打印到日志里去。这就意味着这个内容只有argent官方知道了。

终结一下:

由于_salt字段没有公开,所以无法知道在创建我的钱包合约的时候,用的是什么内容,也就无法重现创建我的钱包合约的整个过程。

(全文完)

 

参考资料:

https://etherscan.io/address/0x8b55c928602896a1e078e23a3fee33393821eec7#events

https://github.com/argentlabs/argent-contracts

文章知识点与官方知识档案匹配,可进一步学习相关知识Go技能树首页概览2024 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月4日
下一篇 2020年5月4日

相关推荐