【问题标题】:Solidity transaction with an unsigned transaction object带有未签名交易对象的 Solidity 交易
【发布时间】:2022-08-13 03:32:35
【问题描述】:

我需要与我的智能合约中的另一个智能合约进行交互(多次), 我有一个可以与 web3js 或 web3py 一起使用的事务对象,如下所示:

{
  from: \'0x00000000\',
    to: \'0x0000000000\',
      value: \'1000000000000\',
      data: \'0x000000000000000000000000\',
      gasPrice: \'245000000000\',
      gas: \'163502\',
      chainId: 3
}

如何可靠地执行此交易?

    标签: blockchain ethereum solidity web3js web3py


    【解决方案1】:

    您可以使用address 类型的低级.call() 成员。更准确地说是它的扩展名address payable,因为您正在设置value

    pragma solidity ^0.8;
    
    contract MyContract {
        function foo() external {
            address to = payable(address(0x0));
            bytes memory sendData = new bytes(12); // empty 12 byte array
            to.call{value: 1000000000000, gas: 163502}(sendData);
        }
    }
    

    请注意,您不能影响gasPrice,因为它已经在主事务中设置(执行foo() 函数)。

    from 始终是调用者合约(在本例中为 MyContract)地址。

    此外,与 EVM 兼容的合约无法执行跨链请求——这就是为什么你也不能指定 chainId 的原因。

    如果您需要能够影响这 3 个属性中的任何一个,您需要从链下应用程序发送交易 - 而不是从合约发送。

    【讨论】:

    • 非常感谢,这使我免于为一个项目进行一个月的稳固性培训
    猜你喜欢
    • 2022-08-12
    • 2014-04-09
    • 2021-12-25
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多