编写DApp,将数据存储到“区块链”中。我试图写这个坚固但我不明白如何将它存储到“区块链”。我可以这样做吗?这样存储数据是否安全?
pragma solidity 0.4.24;
contract database{
struct Data{
uint index;
uint value;
}
Data[] public Datas;
function AddData(uint _index, uint _data) public {
Datas.push(Data(_index, _data));
}
}
是!您可以简单地将数据存储在区块链中。
假设您已将此合同部署到网络,合同地址为0x1234abc...
。
现在再次部署它,这次合同部署在0x987cba...
在AddData()
和0x1234abc...
上调用0x987cba...
将不一样。
您只需向该合约的that specific instance
添加更多数据。
我不能说以这种方式存储一些数据是否安全,它可以像你想要的那样安全。意思是,这取决于您的具体需求和实施。
目前你的合同看起来永远不会被篡改。 因为您只是附加数据,而不是修改合同中的任何内容。
如果您想要修改数据,可以在AddData()
函数中添加一些修饰符,例如Ownable by OpenZeppelin。因此,唯一的所有者可以修改此合同中的数据。
最好为你的情况使用mapping
,因为这使你有可能定义一个自定义的index
,它不仅可以是0, 1, 2, ..., n
,还可以是一个字符串或任何你想要的。这是一个例子:
pragma solidity 0.4.24;
contract database{
struct Table{
uint value1;
uint value2;
}
mapping(bytes32 => Table) public tables;
function addData(bytes32 _index, uint _value1, uint _value2) public {
tables[_index].value1 = _value1;
tables[_index].value2 = _value2;
}
}
您还可以使用此表达式通过addData
函数存储数据:
tables[_index] = Table(_value1, _value2);
它看起来更好,但使智能合约的大小更大!