簡體   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