0

我正在尝试在 Vyper https://developers.aave.com/#implementing-a-flashloanreceiver-contract中实现 Aave 闪贷接收器,我需要将地址数组作为“字节内存_参数”参数传递给它。任何想法如何将地址数组编码为 web3 中的字节,然后将它们从字节解码回 Vyper 中的地址 [n] 数组?

4

2 回答 2

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 在编码参数方面是相同的。

于 2021-04-21T03:01:20.140 回答
0

不确定您选择了哪种开发环境,但 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/

于 2021-03-14T17:28:30.283 回答