我试图在合同中保存用户的电子邮件,但我可以在调用合同方法时模拟from。
Contract.sol
contract Test {
...
mapping (address => string) private _emails;
function getEmail(address from) public view returns (string memory) {
require(msg.sender == from, 'No!');
return _emails[msg.sender];
}
}app.js (web3js)
let email = await Contract.methods.getEmail(any_other_address).call({from: any_other_address});
console.log(email);输出
email@blablabla.com我认为msg.sender不能在web3.js中被操纵。在合同中有安全的方法保存电子邮件吗?
发布于 2021-06-29 01:49:06
如果以后只有一个人在合同之外阅读,那么您实际上可以在合同中保存私有信息。您可以使用在浏览器中运行的私钥加密技术,在将用户的电子邮件发送到区块链之前将其加密到您自己的公钥。稍后,您可以使用您的私钥来读取电子邮件地址。
一般来说,如果您只是从用户发送信息的一种方式,只在区块链之外读取,而不是在链上读取,那么使用日志来处理数据要便宜得多,而不是将其写入联机存储。
另外,如果您有大量的数据,那么最好将其写入类似if的内容,然后将散列存储到链上的数据中。为了具有这种安全性和一种方法,您可以在将数据存储在IPFS上之前将数据加密到您的公钥中。
https://ethereum.stackexchange.com/questions/102638
复制相似问题