如何在Vyper中将字节解码/编码为地址数组?

时间:2020-03-24 12:25:46

标签: ethereum solidity web3 vyper

我正在尝试在Vyper https://developers.aave.com/#implementing-a-flashloanreceiver-contract中实现Aave flash借贷接收器,我需要将其地址数组传递为'bytes memory _params'arg。有什么想法我该如何将地址数组编码为web3中的字节,然后将其从字节解码回至Vyper中的address [n]数组?

2 个答案:

答案 0 :(得分:0)

不确定您选择了哪种开发环境,但以太坊的 Brownie 有一个 Aave Flash-Loan 模板

如果您已经使用过brownie,请跳至FLASH LOAN TEMPLATE 部分

否则,要安装布朗尼有一些要求

检查您是否已经安装了 node.js 和 npm:

node -v
npm -v

如果没有运行:

npm install -g npm

接下来安装ganache-cli:

npm install -g ganache-cli
ganache-cli --version

如果你还没有,安装最新的python,然后安装pipx:

python -m pip install --user pipx
python -m pipx ensurepath

现在安装布朗尼:

pipx install eth-brownie

闪贷模板:

检查以确保巧克力蛋糕在那里,打开一个终端并输入:

brownie

要在 brownie 中创建一个新项目,只需创建一个新目录即可:

mkdir new_dir
cd new_dir

进入新目录后,使用 brownie 关键字 bake 创建可用模板之一,请参阅 https://github.com/brownie-mix 处每个模板的完整列表和实例化说明:

brownie bake aave-flashloan

瞧,你有一个很好的预制模板和明确的制作自己的说明

如果您想了解更多关于巧克力蛋糕和使用巧克力蛋糕框架进行测试的信息,我强烈建议您阅读本·豪瑟 (Ben Hauser) 关于该主题的许多中等帖子,他创建了巧克力蛋糕框架,而且非常了不起,可以在此处找到他 https://iamdefinitelyahuman.medium.com/

答案 1 :(得分:0)

addrBytes: Bytes[128] = concat(convert(32, bytes32), convert(2, bytes32), convert(addr0, bytes32), convert(addr1, bytes32))
funcsig: Bytes[4] = method_id("methodName(address[])")
full_data:Bytes[132] = concat(funcsig, addrBytes)
response: Bytes[128] = raw_call(contract_address, full_data, max_outsize=128)
result_address0: address = convert(slice(response, 64, 32), address)
result_address1: address = convert(slice(response, 96, 32), address)

这是一个例子,如果你想传递一个 2 长度的地址数组。

我附上了关于如何编码动态参数的参考。

https://docs.soliditylang.org/en/v0.8.3/abi-spec.html#use-of-dynamic-types

Solidity 和 Vyper 的编码参数相同。