我正在尝试在 Vyper https://developers.aave.com/#implementing-a-flashloanreceiver-contract中实现 Aave 闪贷接收器,我需要将地址数组作为“字节内存_参数”参数传递给它。任何想法如何将地址数组编码为 web3 中的字节,然后将它们从字节解码回 Vyper 中的地址 [n] 数组?
2 回答
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 在编码参数方面是相同的。
不确定您选择了哪种开发环境,但 Ethereum 的 Brownie 有一个 Aave Flash-Loan 模板
如果您已经使用 brownie,请跳至 FLASH LOAN TEMPLATE 部分
否则,安装 brownie 有一些要求
检查您是否已经安装了 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 关键字创建可用模板之一,在https://github.com/brownie-mixbake
上查看每个模板的完整列表和实例化说明:
brownie bake aave-flashloan
瞧,你有一个很好的预制模板和明确的说明,可以让它成为你自己的
如果您想了解更多关于 brownie 和使用 brownie 框架进行测试的信息,我强烈建议您阅读 Ben Hauser 关于该主题的许多中型帖子,他创建了 brownie 框架,它非常令人惊叹,他可以在这里找到https://iamdefinitelyahuman.medium。 com/