具有未签名交易对象的 Solidity 交易

Solidity transaction with an unsigned transaction object

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

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

我怎样才能可靠地执行这个交易?

您可以使用类型 address 的 low-level .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-compatible 合同无法执行 cross-chain 请求 - 这就是为什么您也不能指定 chainId

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