繁体   English   中英

如何从solidity智能合约中发送带有编码数据的交易

[英]how to send a transaction with encoded data from within a solidity smart contract

我想将我的solidity智能合约中的交易发送到另一个智能合约,并且所有操作都已编码

Ex( 0x7a1eb1b9000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a 0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000a0000 0000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000009b1ea631e125f ) which means swap token for a specific token (not exactly just an example)

但是我看不到任何从带有已编码数据的可靠智能合约发送交易的方法,所有示例都显示了如何通过调用其他智能合约中的函数来发送交易

而且我不想解码我的编码数据

我知道如何使用 ethers.js 来做到这一点,如下例所示:

const transaction = {
data:`0x7a1eb1b9000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000009b1ea631e125f`,  
to: Contract address,  
value: 0,  
from: my address,  
gasPrice: 21000,  
gasLimit: 4000000. 
    };   
const wallet = new ethers.Wallet(Address);  
const connectedWallet = wallet.connect(provider);  
const tx = await connectedWallet.sendTransaction(transaction);  

“数据”有我想做的所有动作,我想用solidity做同样的事情,有没有办法?

感谢您的帮助和时间

您可以使用address类型的成员低级.call()方法。

data字段是必需的(如果适合您的用例,您可以传递一个空值)。

可选value随指定的 ETH 值一起发送(请注意,您的合约需要至少持有此金额,或者必须通过此 function 调用收到它)。 可选gas是传递给此特定调用(及其后续调用)的气体单位的最大数量。

由于您的合约始终充当调用者(换句话说,您的合约地址是被调用合约中的msg.sender ),因此您不能设置任意from字段值。 整个主交易的gasPrice也是static,后续调用不能更改。

function callAnotherContract() external {
    address anotherContract = address(0x123);
    bytes memory data = hex"7a1eb1b900";
    uint256 myValue = 0;
    uint256 myGasLimit = 100000;

    // data is required (can be empty), other params are optional
    anotherContract.call{value: myValue, gas: myGasLimit}(data);
}

文件:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM