Storage

將數據發送到結構的最便宜和最有效的方法是什麼,為什麼?

  • July 10, 2018

我正在努力尋找哪種方式將數據發送到結構更便宜且最有效。我想出了這兩種不同的風格:

struct Database
{
  string name;
  string addressPerson; 
}

mapping (string => Database) idToDatabase;

function setPerson(string _id, string _name, string _address) external {
  Database storage person = idToDatabase[_id];
  person.name = _name;
  person.addressPerson = _address;
}  

struct Database
{
  string name;
  string addressPerson; 
}

Database[] public people;

mapping (string => uint) idToPerson;

function setPerson(string _id, string _name, string _address) external {
  people.push(Database(_name,_address));
  idToPerson[_id] = people.length-1;           
}

我應該使用哪個,為什麼?我研究了很多,找不到答案。謝謝你。

我嘗試使用上述兩種方法創建範例契約。我使用**Remix IDE**來計算成本。請注意,這些是指示性成本(但仍然有用),可能會根據許多因素而變化。

當您部署合約並呼叫函式 SetPerson() 時,它將在底部窗格中向您顯示交易的詳細資訊。

在此處了解有關交易成本和執行成本之間差異的更多資訊

方法 1(映射到對象)

  • 合約部署

交易成本 179161 gas

執行成本 95141 gas

  • 函式呼叫

交易成本 65441 gas

執行成本 41609 gas


方法 2(映射到 id、數組)

  • 合約部署:

交易成本 361519 gas

執行成本 232075 gas

  • 函式呼叫

交易成本 91228 gas

執行成本 67396 gas

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