將結構從 brownie 傳遞給solidity 函式
以前也有人問過類似的問題,我已經閱讀過它們,但在使用 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)