等效于 abi.encodePacked

Posted

技术标签:

【中文标题】等效于 abi.encodePacked【英文标题】:Equivalent for abi.encodePacked 【发布时间】:2021-09-22 00:51:24 【问题描述】:

我正在使用 ethers-rs 编写一个 defi 应用程序。我需要计算 rust 中的 CREATE2 地址。我在 rust 中找不到 abi.encodePacked(token0, token1) 的等价物。

Uniswap 库中使用的代码(https://vomtom.at/how-to-use-uniswap-v2-as-a-developer):

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) 
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            ))));
    

很遗憾,我没有从互联网上得到太多帮助。

abi.encodePacked 在 rust 中的等价物是什么。

问候。

【问题讨论】:

【参考方案1】:

abi.encodePacked 只是连接序列化参数的字节 - 在本例中为两个地址。

通常 EVM 将数据项填充到 uint256 字边界,但 encodePacked is special。

地址是 160 位(20 字节),所以encodePacked 的结果应该是 40 字节,两个地址的字节连接在一起。

【讨论】:

以上是关于等效于 abi.encodePacked的主要内容,如果未能解决你的问题,请参考以下文章

NSTimer 等效于 Javascript

复合赋值运算符

linq 等效于通用函数的'select *' sql?

Windows 等效于 linux cksum 命令

jQuery 等效于 JavaScript 的 addEventListener 方法

等效于 Linux 上的 GetTickCount()