Solidity
此類型僅在新的實驗性 ABI 編碼器中受支持 - 為什麼?
我有以下結構,契約儲存了它的數組:
struct Issuer { address id; bytes32 name; IssuerStatus status; uint index; }
我還有一個函式,它通過數組中的索引返回 Issuer:
function getIssuerAtIndex(uint index) public view returns (Issuer) { return issuers[issuersIndex[index]]; }
我使用solidity 0.4.21。VS Code
Issuer
在函式中突出顯示紅色作為返回類型並顯示錯誤:TypeError: This type is only supported in the new experimental ABI encoder. Use "pragma experimental ABIEncoderV2;" to enable the feature. function getIssuerAtIndex(uint index) public view returns (Issuer) { ^-------^
我不知道為什麼不支持該類型作為返回類型。有任何想法嗎?
標準 ABI 不支持結構。您可以在固定長度的通常分隔的介面中返回結構的成員。例如:
function getter(bytes32 key) public returns(byte32 name, uint amount, bool isValid) :
return(myStruct[key].name, myStruct[key].amount, myStruct[key].isValid);
返回結構對象的想法是實驗性的,例如
return(myStruct[key]);
此外,您的片段不包括整個內容,但我懷疑這
issuerIndex
是一個鍵列表,而不是實際對象。您的界面說它返回對象(實驗功能),但可能您的意思是returns(bytes32 key)
可以。希望能幫助到你。
更新
根據下面的評論,問題是返回值被轉換為類型“Issuer”,這將是實驗性結構對象。它應該被轉換為類型地址。
要從映射中返回頒發者的地址:
returns(address issuer) { ...
return issuersIndex[index];