Ethereum 保护有关可靠度的敏感信息的最佳做法?
我的合同中有一个字段。是这样的:Ethereum 保护有关可靠度的敏感信息的最佳做法?,ethereum,solidity,smartcontracts,Ethereum,Solidity,Smartcontracts,我的合同中有一个字段。是这样的: contract MyContract { string private secretField } function getSecretField() public view returns { ... some controls here... return secretField; } 我希望从后端服务器访问该secretField,并保护它不受任何其他请求者的攻击。这方面的最佳实践是什么?如果它位于公共区块链(mainnet、rop
contract MyContract {
string private secretField
}
function getSecretField() public view returns {
... some controls here...
return secretField;
}
我希望从后端服务器访问该secretField,并保护它不受任何其他请求者的攻击。这方面的最佳实践是什么?如果它位于公共区块链(mainnet、ropsten testnet等)上,则总是可以通过查询包含
secretField
值的链外应用程序来访问它。无论Solidityprivate
visibility修饰符如何,因为存储查询是在较低的层上执行的
示例:如果secretField
是第一个定义的契约(在此地址上)的第一个属性,则其值存储在存储槽0中
但是,如果您只想对链上的请求者隐藏它,那么您可以将属性
保留为private
,并要求仅从特定地址访问getter
// removed `view` because it's going to interact with the transaction data
function getSecretField() public returns {
// reverts if the sender address is not 0x123
require(msg.sender == address(0x123);
return secretField;
}
请注意,为了访问数据,您的后端应用程序必须从
0x123
地址发送一个事务。简单的调用
不会返回任何内容,因为getSecretField()
不再是视图
函数。它将位于公共区块链上。strage_槽法使保护变得不可能。我想我需要找到另一种模式。@MiratCanBayrak也许您的用例将允许散列-(公开)只存储某个秘密的散列,并根据散列进行验证(请注意,事务也是公开的,因此您可能还希望您的用户传递散列,而不是散列之前的值,如密码)。但一般来说,公共区块链不是存储私人数据的好方法。