Solidity
返回智能合約和實驗性 ABIEncoderV2 中的結構值
- 我正在使用映射儲存和返回結構值。
pragma solidity >=0.5.0 <0.7.0; pragma experimental ABIEncoderV2; contract Manage{ struct Policy{ string PolicyID ; } mapping (address => mapping(string => Policy)) private policy; function storePolicy(address insuranceHolder,string memory _PolicyID) public { policy[insuranceHolder][_PolicyID].PolicyID = _PolicyID; } function getPolicy(address insuranceHolder,string memory _PolicyID) public view returns(Policy memory) { return policy[insuranceHolder][_PolicyID]; } }
我得到這樣的返回值。0:元組(字元串):_PolicyID 我不想要這個 0:元組(字元串):我只想要 _PolicyID,如何做到這一點任何人都可以幫助我。
- 我收到使用 pragma experimental ABIEncoderV2 的警告;警告:實驗功能已開啟。不要在實時部署中使用實驗性功能。
編譯器給出警告。這意味著我應該只將它用於開發。這對我來說毫無意義。
實用性 >=0.5.0 <0.7.0;
餿主意。您應該針對特定的編譯器 - 匹配預期的目標。這將減少混亂。
結構策略{字元串策略ID;} 映射(地址 => 映射(字元串 => 策略))私有策略;
我認為這種結構不合適。
使用者地址 => policyId => Policy ?? ..,所以使用者可以有多個策略?
我正在儲存並返回結構值…我只想要 _PolicyID
那麼你應該只返回 PolicyID
我還注意到您正在傳遞一個 Policy 結構,這似乎很奇怪,因為策略應該在映射中,在儲存中。
編譯器給出警告。這意味著我應該只將它用於開發。
警告意味著它所說的,你可能不需要它。
您具有設置策略和獲取策略的功能。除了 ID 之外,該結構對 Policy 沒有任何說明,ID 是多餘的。我會告訴你為什麼。
如果您“獲得”策略 ID x,那麼您已經知道該策略 ID。無需將其儲存在結構中。
看看這個解釋器,了解如何為您的策略處理創建、檢索、更新和刪除。我建議你先把每個人不止一個的問題放在一邊。掌握基本結構,然後將注意力轉向更高級的結構。https://medium.com/robhitchens/solidity-crud-part-1-824ffa69509a
您的函式應如下所示:
function set(policyID, arguments ...) ... function get(policyID) public view returns(arguments) ...
希望能幫助到你。