如何将坚固合同功能的返回价值转换为Python中的列表?

发布于 2025-02-13 12:47:52 字数 386 浏览 2 评论 0原文

在坚固性中,返回值代码如下: 返回(地址[]内存,字符串[]内存)或返回(地址[]内存)

i使用make_post_request来调用合同功能,诸如:

method='eth_call',
params=[{
     'to': config['arbContract'],
     'data': c.encodeABI(fn_name='getTokensInfo', args=[tokens]),
}]

``结果''中的数据: ''.............................................................................

我该如何解析以在python中列出

in Solidity, return-value code like:
returns(address [] memory, string [] memory) or returns (address[][] memory)

I use make_post_request to call contract function, data like:

method='eth_call',
params=[{
     'to': config['arbContract'],
     'data': c.encodeABI(fn_name='getTokensInfo', args=[tokens]),
}]

And 'result' in response is:
'0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000007a00000000000000000000000000000000000000000000000000000000000001cc000000000000000000000000000000000000000000000000000000000000031e00000000000000000000000000000000000000000000000000000000000000038000000000000000000000000c9bdeed33cd01541e1eed10f90519d2c06fe3feb000000000000000000000000c42c30ac6cc15fac9bd938618bcaa1a1fae8501d0000000000000000000000005ac53f985ea80c6af769b9272f35f122201d0f560000000000000000000000004e834cdcc911605227eedddb89fad336ab9dc00a0000000000000000000000002bae00c8bc1868a5f7a216e881bae9e662630111000000000000000000000000c4bdd27c33ec7daa6fcfd8532ddb524bf40380960000000000000000000000005ce9f0b6'....

seems it's a bytestring, then how can i parsing it to list in python

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自由范儿 2025-02-20 12:47:52
  • 说我们考虑swapexacttokensfortokens uniswapv2Router的方法返回uint []内存量
function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
  • 引用在这里 >
    这是我能够解决这个问题的方式:
  1. 在固体合同中,就在返回之前,我生成了一个包含即将返回的值的事件。
  2. 在Python代码中,我提取返回的值:
[...]
data = router.swapExactTokensForTokens(
        tokens[1].balanceOf(account),
        1,
        path,
        attacker,
        chain.time(),
        {"from": account},
    )

>>> int(web3.eth.getTransactionReceipt(data.txid)["logs"][2]["data"], 16)
631376138468681379
  • 这将为我们提供MANES0OUT的值。

  • 您可以看到events像这样

>>> data.events
{'Approval': [OrderedDict([('owner', '0x33A4622B82D4c04a53e170c638B944ce27cffce3'), ('spender', '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'), ('value', 4500000000000000000)])], 'Transfer': [OrderedDict([('from', '0x33A4622B82D4c04a53e170c638B944ce27cffce3'), ('to', '0xA68d9dd94574d286A75D39b1516b348620FfDCA0'), ('value', 500000000000000000)]), OrderedDict([('from', '0xA68d9dd94574d286A75D39b1516b348620FfDCA0'), ('to', '0x33A4622B82D4c04a53e170c638B944ce27cffce3'), ('value', 631376138468681379)])], 'Sync': [OrderedDict([('reserve0', 14368623861531318621), ('reserve1', 11844678011344678012)])], 'Swap': [OrderedDict([('sender', '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'), ('amount0In', 0), ('amount1In', 500000000000000000), ('amount0Out', 631376138468681379), ('amount1Out', 0), ('to', '0x33A4622B82D4c04a53e170c638B944ce27cffce3')])]}
  • 我正在使用eth-brownie
  • Say we consider the swapExactTokensForTokens method of uniswapV2Router which returns uint[] memory amounts.
function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
  • Quoting from here
    Here is how I was able to resolve this problem:
  1. In the Solidity contract, just before returning, I generate an event which contains the value about to be returned.
  2. In the Python code, I extract the returned value with:
[...]
data = router.swapExactTokensForTokens(
        tokens[1].balanceOf(account),
        1,
        path,
        attacker,
        chain.time(),
        {"from": account},
    )

>>> int(web3.eth.getTransactionReceipt(data.txid)["logs"][2]["data"], 16)
631376138468681379
  • This will give us the value of amount0Out.

  • You can see the events like this

>>> data.events
{'Approval': [OrderedDict([('owner', '0x33A4622B82D4c04a53e170c638B944ce27cffce3'), ('spender', '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'), ('value', 4500000000000000000)])], 'Transfer': [OrderedDict([('from', '0x33A4622B82D4c04a53e170c638B944ce27cffce3'), ('to', '0xA68d9dd94574d286A75D39b1516b348620FfDCA0'), ('value', 500000000000000000)]), OrderedDict([('from', '0xA68d9dd94574d286A75D39b1516b348620FfDCA0'), ('to', '0x33A4622B82D4c04a53e170c638B944ce27cffce3'), ('value', 631376138468681379)])], 'Sync': [OrderedDict([('reserve0', 14368623861531318621), ('reserve1', 11844678011344678012)])], 'Swap': [OrderedDict([('sender', '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'), ('amount0In', 0), ('amount1In', 500000000000000000), ('amount0Out', 631376138468681379), ('amount1Out', 0), ('to', '0x33A4622B82D4c04a53e170c638B944ce27cffce3')])]}
  • I'm using eth-brownie.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文