【问题标题】:How to de/encode bytes into an address array in Vyper?如何在 Vyper 中将字节解码/编码为地址数组?
【发布时间】:2020-03-24 12:25:46
【问题描述】:

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

【问题讨论】:

    标签: ethereum solidity web3 vyper


    【解决方案1】:

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

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

    否则,安装 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
    

    现在安装 brownie:

    pipx install eth-brownie
    

    闪贷模板:

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

    brownie
    

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

    mkdir new_dir
    cd new_dir
    

    一旦在新目录中使用 brownie 关键字 bake 创建可用模板之一,请在 https://github.com/brownie-mix 上查看每个模板的完整列表和实例化说明:

    brownie bake aave-flashloan
    

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

    如果您想了解更多有关 brownie 和使用 brownie 框架进行测试的信息,我强烈建议您阅读 Ben Hauser 关于该主题的许多中型帖子,他创建了 brownie 框架,并且非常棒,他可以在这里找到https://iamdefinitelyahuman.medium.com/

    【讨论】:

    • 我的回答有问题吗?如果是,请告诉我,否则,如果您觉得它有帮助,请接受它作为答案,谢谢
    【解决方案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 在编码参数方面是相同的。

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2010-10-27
      • 2014-09-14
      • 1970-01-01
      相关资源
      最近更新 更多