我想做一个简单的"文本编辑器";在以太坊网络智能合约上的稳定性。我想创建一个数据输入函数,它以STRING和BYTES10变量的形式收集文本,BYTES10变量收集文本的位置。您必须整齐地存储文本,以便以后访问它。你应该能够输入新的文本,而不用替换旧的文本。然后是输出函数,它返回文本和坐标自合同开始以来,所有进入网络的人。和一个函数,允许您删除数据,以防输入错误。到目前为止,我有以下代码:
pragma solidity <0.9.0;
contract texteditor {
struct book {
string block;
bytes10 coordinates;
}
book [] public books;
function save(string calldata _blocks, bytes10 _coordinates) public{
books.push(book(_blocks, _coordinates));
}
function read()view public returns (string){
return books[_block][_coordinates];
}
function remove(string _blocks, bytes10 _coordinates) private {
delete book[_blocks][_coordinates];
}}
保存文本的函数我认为是好的,但与其他两个我有编译问题,我不知道是否因为编译器版本或因为函数是不正确的。我在博客和其他帮助中找到的关于这个主题的信息,显然是相当过时的编译器版本,并倾向于给我带来问题。我想我必须做一个映射,但我还没有找到方法。我很感激你能给我的任何帮助,让我在这件事上取得进展。非常感谢您的宝贵时间。
pragma solidity ^0.8.4;
// SPDX-License-Identifier: MIT
contract texteditor {
uint256 public id=0;
struct book {
string block;
string coordinates;
}
mapping(uint256=>mapping(uint256 => book)) bookStore;
mapping(uint256=>uint256) bookBlockIndex;
function save(uint256 bookId,string calldata _block, string calldata _coordinates) public{
book memory temp_book = book(_block,_coordinates);
bookStore[bookId][bookBlockIndex[bookId]]=temp_book;
bookBlockIndex[bookId]++;
}
function read_book(uint256 bookid,uint256 bookBlockid)view public returns (string memory,string memory){
return (bookStore[bookid][bookBlockid].block,bookStore[bookid][bookBlockid].coordinates);
}
function remove_book(uint bookid,uint256 bookBlockid) public {
delete bookStore[bookid][bookBlockid];
}
}
这可能有帮助