# Week9 - 8.29 ## Day1 conflux 合约工具库 openzepplin是以太坊开发最重要的合约库, [conflux-contracts](https://github.com/conflux-fans/conflux-contracts) 则是为了方便conflux开发者而封装的合约集合,主要包含 - [内置合约library](https://github.com/conflux-fans/conflux-contracts/tree/main/contracts/InternalContracts) - [utils](https://github.com/conflux-fans/conflux-contracts/tree/main/contracts/utils) - [token合加枚举功能](https://github.com/conflux-fans/conflux-contracts/tree/main/contracts/token) ## Day2 合约中如何判断是否为cfx链 conflux 链上的erc1820地址与以太坊不同, 以太坊为`0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24`, conflux core space为`0x88887eD889e776bCBe2f0f9932EcFaBcDfCd1820` ,通过判断该特征即可,[conflux-contracts](https://github.com/conflux-fans/conflux-contracts)提供了[该实现](https://github.com/conflux-fans/conflux-contracts/blob/ba2447a7e18249390a9519f4eee91a7f1f4d7b11/contracts/utils/ERC1820Context.sol#L17) ## Day3 如何通过合约一次访问多个合约方法 dapp经常需要同时获取很多合约状态,如果每次读取合约都发送一次rpc请求,则需要并发大量请求,这样容易对服务区造成很大压力导致rpc node服务器性能下降或者被限流。而使用multicall进行则可以一次rpc请求访问多个合约方法,从而避免该问题。 [multicall](https://github.com/conflux-fans/conflux-contracts/blob/main/contracts/utils/Multicall.sol) 提供了一系列方法方便一次访问多个合约方法,实现原理为在合约方法中批量 static call, 使用该方法需要我们事先根据要访问的合约方法abi编码好数据。 如要获取地址`cfxtest:aanpu16mtgc7dke5xhuktyfyef8f00pz8a2z5mc14g`和`cfxtest:aaskvgxcfej371g4ecepx9an78ngrke5ay9f8jtbgg`的 `usdt` 余额 - 编码data - `balanceOf("cfxtest:aanpu16mtgc7dke5xhuktyfyef8f00pz8a2z5mc14g")`编码后的data为 `0x70a0823100000000000000000000000016c85f8a7985d1a49b99e097d0b4217c5b5995f0` - `balanceOf("cfxtest:aaskvgxcfej371g4ecepx9an78ngrke5ay9f8jtbgg")`编码后的data为 `0x70a082310000000000000000000000001c989a6229119edcda2088c9fc0bef9666a49b05` - 调用`muticall`合约的函数`function aggregate(address target, bytes[] memory calldatas) public view virtual returns (bytes[] memory)`; ``` results = muticall.aggregate(usdt_address,["0x70a0823100000000000000000000000016c85f8a7985d1a49b99e097d0b4217c5b5995f0","0x70a082310000000000000000000000001c989a6229119edcda2088c9fc0bef9666a49b05"]) ``` - 然后对返回结果进行abi解码 > ABI编解码的方法各个SDK都有提供,请参考具体使用的sdk ## Day4 Fluent小知识 - Fluent 如何导入多套助记词 ### 1. Fluent 如何导入多套助记词 当我们想要分场景使用不同助记词管理私钥组以隔离风险时,是不是苦于找不到这样的钱包?其实Fluent已经提供了这样的功能,那怎么使用呢?👇 点击左上角钱包名称 [![](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/scaled-1680-/image-1662027561415.png)](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/image-1662027561415.png) 在弹出框中点击右上角"+" [![](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/scaled-1680-/image-1662027605712.png)](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/image-1662027605712.png) 即可再次导入一套助记词 [![](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/scaled-1680-/image-1662027658973.png)](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/image-1662027658973.png) [![](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/scaled-1680-/image-1662027892429.png)](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/image-1662027892429.png) 现在可以看到新导入的助记词了 [![](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/scaled-1680-/image-1662028004345.png)](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/image-1662028004345.png) Fluent 同时也支持多个网络,当前支持以太坊跟Conflux,以后还会陆续增加其他链的支持。 ## Day5 Fluent冷知识 1. Fluent 相同助记词可以同时在conflux和ethereum使用,但是由助记词生成的钱包在同样的序号下使用的derive path不同,所以生成的私钥也是不一样的。 所以不要混用。 - Conflux 下私钥生成的 dervie path 为 `m’/44’/60’/0’/0` - Ethereum 下私钥生成的 dervie path 为 `m’/44’/503’/0’/0` 2. Fluent 没看到测试网络,Fluent是不支持测试网么? 其实Fluent是支持测试网的,只是由于普通用户通常不需要使用测试网,所以默认隐藏了起来,通过高级选项就可以打开测试网了。 [![](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/scaled-1680-/image-1662115103936.png)](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/image-1662115103936.png) [![](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/scaled-1680-/image-1662115058644.png)](https://wiki.conflux123.xyz/uploads/images/gallery/2022-09/image-1662115058644.png)