Solidity

將結構從 brownie 傳遞給solidity 函式

  • April 4, 2022

以前也有人問過類似的問題,我已經閱讀過它們,但在使用 encode_single 後被卡住了。如果我將生成的字節傳遞給我的solidity函式,它會顯示“預期的列表或元組,得到字節”

這是我的編碼->

depositdata=encode_single('(string,address,address[],uint256[],uint256[],bytes[])',('aave','0x6b175474e89094c44da98b954eedeac495271d0f',['0x6b175474e890 94c44da98b954eedeac495271d0f'],[100],[250000000000000000000],[]))

它輸出一個正確編碼的字節部分。但是,當我將它傳遞給我的solidity函式時,即使

$$ depositdata $$, 我犯了同樣的錯誤。 有任何想法嗎?

我解決了這個問題。將結構發送到 brownie 中的函式實際上非常容易。

該結構的形式為

struct depositData { 
    string depositConnectorName;
    address vaultToken;
    address[] depositTokens;
    uint256[] depositTokenFractions;
    uint256[] newDepositAmount;
    bytes[] depositConnectorData;
}

和函式 moveFunds(depositData

$$ $$calldata data) {} 可以這樣呼叫: contract[0].moveFunds([['aave','0x6b175474e89094c44da98b954eedeac495271d0f',['0x6b175474e89094c44da98b954eedeac495271d0f'],[100],[250*10**18],[]]],{'from': accounts[0]}) 解決我的問題的不是對數據進行編碼,而是簡單地將其作為結構列表發送。我的函式正在請求 depositData 結構的列表,所以我不得不添加另一個

$$ $$周圍。 希望這可以幫助某人。

我有同樣的問題,你可以通過2種方法解決它:

首先

在堅固程式碼中

struct YOUR_STRUCT {
uint id;
address owner }

YOUR_STRUCT[] public your_struct;

在布朗尼程式碼中

id = youDeployedContract.your_struct(0)["id"]
owner = youDeployedContract.your_struct(0)["owner"]

當 0 是您的數組索引時

第二

創建視圖函式返回數組元素;

堅固性程式碼:

function getOverview(uint index) public view returns(uint,address){
YOUR_STRUCT storage your_str = your_struct[index] ;
return (you_str.id,your_str.owner);
}

布朗尼程式碼

id,owner = yourDeployedContract.getOverview(0)

引用自:https://ethereum.stackexchange.com/questions/123658