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