有了以太坊,我們可以創建一個有狀態的系統,我們可以從存儲在智能聯繫人中的數據中添加和刪除數據。這是一個有狀態的系統,我們可以改變智能聯繫人的狀態,但這需要向礦工支付一些費用。但是我們如何刪除數據呢?

這裡有一個智能合約,用於向myArray中添加和移除字符串:

pragma solidity ^0.4.18;contract ExampleApp { string[] myArray; function add(string x) public { myArray.push(x); } function del(string x) public { for (uint j = 0; j < myArray. length; j++) { if (keccak256(abi.encodePacked(myArray[j])) == keccak256(abi.encodePacked(x))) { delete myArray[j]; } } } function show() public view returns (uint256 , string) { string memory str; for (uint j = 0; j < myArray.length; j++) { str = string(abi.encodePacked(str, myArray[j])); } return(myArray.length,str) ; }}

add()函數相當簡單,我們基本上只使用了push()方法。有了這個聯繫,我們可以加上““Edinburgh”、“Glasgow”和“London”:

現在我們將使用以下方法刪除“London”:

function del(string x) public { for (uint j = 0; j < myArray.length; j++) { if (keccak256(abi.encodePacked(myArray[j])) == keccak256(abi.encodePacked(x))) { delete myArray[j]; } }

為此,keccak256()方法用於比較兩個字符串,並將myArray中的字符串與用戶在智能合約(x)中輸入的字符串進行匹配:

if (keccak256(abi.encodePacked(myArray[j])) == keccak256(abi.encodePacked(x)))

一旦找到匹配,我們可以用刪除數據元素:

delete myArray[j];

現在,我們可以通過選擇智能聯繫人中的刪除功能來嘗試一下:

這將花費我們一些gas,然後它將進入一個未決狀態:

完成後,我們得到:

現在,我們可以回到智能合約,看看數據是否已經被刪除:

已經成功刪除了!

Source:https://medium.com/asecuritysite-when-bob-met-alice/deleting-data-from-a-smart-contract-182b0e9e09fe