webase编写智能合约,不借助Table工具类实现CRUD功能
webase平台在不借助Table通用工具类,编写智能合约,实现CRUD功能,支持该合约的所有数据的查询
pragma solidity ^0.4.25; pragma experimental ABIEncoderV2; contract SimpleCRUD{ //定义结构体 struct Data { uint256 id; string name; uint256 value; bool exists; } //存储所有数据的id uint256[] private dataIds; //使用mapping存放数据 mapping(uint256 =>Data) private dataStore; //事件定义 event DataAdded(uint256 id, string name, uint256 value); event DataUpdated(uint256 id, string name, uint256 value); event DataDeleted(uint256 id); // 添加数据 function addData(uint256 _id, string memory _name, uint256 _value) public { require(!dataStore[_id].exists, "Data with this ID already exists"); dataStore[_id] = Data(_id, _name, _value, true); dataIds.push(_id); emit DataAdded(_id, _name, _value); } //查询单条数据 function getData(uint256 _id) public view returns(uint256,string memory,uint256){ require(dataStore[_id].exists,"Data does not exist"); Data memory data = dataStore[_id]; return (data.id,data.name,data.value); } // 查询所有数据ID function getAllDataIds() public view returns (uint256[] memory) { return dataIds; } //查询所有数据 function getAllData() public view returns(Data[] memory){ Data[] memory allData = new Data[](dataIds.length); for(uint256 i=0;i<dataIds.length;i++){ uint256 id = dataIds[i]; allData[i] = dataStore[id]; } return allData; } //更新数据 function updataData(uint256 _id,string memory _name,uint256 _value)public{ require(dataStore[_id].exists,"Data dose not exists"); dataStore[_id].name=_name; dataStore[_id].value=_value; emit DataUpdated(_id,_name,_value); } // 删除数据 function deleteData(uint256 _id) public { require(dataStore[_id].exists, "Data does not exist"); delete dataStore[_id]; // 从dataIds数组中移除ID uint256 length = dataIds.length; for (uint256 i = 0; i < dataIds.length; i++) { if (dataIds[i] == _id) { // 将最后一个元素移到当前位置 if (length > 1 && i != length - 1) { dataIds[i] = dataIds[length - 1]; } // 删除最后一个元素 dataIds.length--; // 这是Solidity 0.6.0中缩短数组的方式 break; } } emit DataDeleted(_id); } }