防止智能合约在网站外铸造

Prevent Smart Contracts to mint outside of the website

大家好,你们好吗?我有个问题。所以我有这个网站,它会制作用户选择的头像(背景颜色、鼻子类型、眼睛类型等)。

我现在使用的合同适用于该网站。但是,它也可以从 snowtrace 中生成。我的问题是,我想限制我的合同,它应该只允许从网站铸造。

我想防止任何其他人使用合约交互 snowtrace 在我的合约中创建虚拟内容。合同应该只允许从网站上铸造。如果有任何建议请告诉我,谢谢。

嗯,我不认为这是可能的。你不能检查那个条件。 除非你创建另一个合约并限制只为该合约铸造。您使用该新合同在您的网站中进行交互,但您未在 Snowtrace 上对其进行验证,因此您无法直接从 Snowtrace 与其进行交互。

我认为使用签名哈希是可能的,铸币函数需要来自地址的签名,私钥地址将保存在网站后端,它将签署一条消息以在铸币函数上进行验证。

只要私钥只能被网站后台访问,用户总是需要通过它。我只是不确定如果 he/she 使用已知的先前哈希消息,你将如何阻止用户再次铸造,但我想它也可以解决。

一些可能有用的资源: https://solidity-by-example.org/signature/ https://blog.chainsafe.io/how-to-verify-a-signed-message-in-solidity-6b3100277424

更新:即使 he/she 知道之前的哈希消息,您也可以通过添加动态数据作为所需哈希消息的一部分来防止用户在网站外部铸造,例如 msg.sender及其随机数。因此,即使用户尝试使用之前的消息再次铸造,它也不会有效,因为随机数不同并且不再有效,一旦合约将需要具有 msg.sender 的最新随机数的哈希消息。

不太可能。智能合约无法知道该交易来自何处。你最好的选择是只允许在特定时间铸币。