如何从智能合约中删除数据

有了以太坊,我们可以创建一个有状态的系统,我们可以从存储在智能联系人中的数据中添加和删除数据。

有了以太坊,我们可以创建一个有状态的系统,我们可以从存储在智能联系人中的数据中添加和删除数据。这是一个有状态的系统,我们可以改变智能联系人的状态,但这需要向矿工支付一些费用。但是我们如何删除数据呢?

这里有一个智能合约,用于向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”:

1.jpg

现在我们将使用以下方法删除“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];

现在,我们可以通过选择智能联系人中的删除功能来尝试一下:

2.jpg

这将花费我们一些gas,然后它将进入一个未决状态:

3.jpg

完成后,我们得到:

4.jpg

现在,我们可以回到智能合约,看看数据是否已经被删除:

5.jpg

已经成功删除了!

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

关于

ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

本文首发于:https://mp.weixin.qq.com/s/TJNNSsm1JP-5xxxZQQ-Emg

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ChinaDeFi 去中心化金融社区
ChinaDeFi 去中心化金融社区
ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。