String

在 Solidity 中儲存圖像 URL

  • February 22, 2022

我有一個非常基本但功能強大的智能合約,它儲存了一個圖像 URL(和一些其他欄位)以供前端使用。然而,雖然它適用於縮短的圖像 URL,但大多數 URL 太長,導致 gas 成本飆升至超過塊 gas 限制。

有沒有更有效的方法來儲存 URL,或者我需要在將它們發送到後端之前以某種方式自動縮短它們?

在某些情況下,這是我的契約(如前所述,非常基本):

contract Advertisement {
   string private image_url = "https://via.placeholder.com/350";
   string private text = "Placeholder text";
   uint private price = 0; // First user can upload their image for free (+gas);

   function updateAdvertisement(string memory new_image, string memory new_text) public payable {
       require(msg.value > price, "Payment must be greater than the listed price");
       
       image_url = new_image;
       text = new_text;
       price = msg.value;
   }

   function getAdvertisement() public view returns(string memory, string memory, uint) {
       return (image_url, text, price);
   }
}

如果您想將 url 數據分散儲存,那麼 IPFS 是一個不錯的選擇。

如果您只想使用 url 顯示某些內容並在鏈下(後端)使用它。您可以返回 url 的 id,而不是返回真實的 url,後端可以根據該 id 從 db 中查找 url。

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