Solidity

返回智能合約和實驗性 ABIEncoderV2 中的結構值

  • July 31, 2019
  1. 我正在使用映射儲存和返回結構值。
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,如何做到這一點任何人都可以幫助我。

  1. 我收到使用 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) ...

希望能幫助到你。

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