保护敏感信息的最佳实践?
Best practice for protecting sensitive information on solidity?
我的合同中有一个字段。是这样的:
contract MyContract {
string private secretField
}
function getSecretField() public view returns {
... some controls here...
return secretField;
}
我想从我的后端服务器访问那个 secretField 并保护它不受任何其他请求者的影响。这方面的最佳做法是什么?
如果它在 public 区块链(主网、ropsten 测试网等)上,它总是可以通过查询包含 secretField
值的 storage slot 来访问链下 应用程序。与Solidity无关private
可见性修饰符,因为存储查询是在较低层执行的。
示例:如果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;
}
请注意,您的后端应用程序必须 send
来自 0x123
地址的交易才能访问数据。简单 call
不会 return 任何东西,因为 getSecretField()
不再是 view
函数。
我的合同中有一个字段。是这样的:
contract MyContract {
string private secretField
}
function getSecretField() public view returns {
... some controls here...
return secretField;
}
我想从我的后端服务器访问那个 secretField 并保护它不受任何其他请求者的影响。这方面的最佳做法是什么?
如果它在 public 区块链(主网、ropsten 测试网等)上,它总是可以通过查询包含 secretField
值的 storage slot 来访问链下 应用程序。与Solidity无关private
可见性修饰符,因为存储查询是在较低层执行的。
示例:如果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;
}
请注意,您的后端应用程序必须 send
来自 0x123
地址的交易才能访问数据。简单 call
不会 return 任何东西,因为 getSecretField()
不再是 view
函数。