Tengo este sitio web que crea un avatar de las piezas elegidas por el usuario (color de fondo, tipos de nariz, tipos de ojos, etc.).
El contrato que estoy usando en este momento funciona bien para el sitio web. Sin embargo, también puede acuñar desde snowtrace. Quiero limitar mi contrato de modo que solo permita la acuñación desde el sitio web.
Quiero evitar que otros acumulen cosas ficticias en mi contrato usando la interacción del contrato snowtrace. El contrato solo debe permitir la acuñación desde el sitio web.
Creo que es posible usar hash de firmas, la función de menta requeriría una firma de una dirección, esa dirección de clave privada se mantendría en el backend del sitio web, firmaría un mensaje para validarlo en la función de menta.
Siempre que solo el backend del sitio web acceda a la clave privada, el usuario siempre tendrá que pasar por eso. Simplemente no estoy seguro de cómo evitaría que el usuario acuñara una vez más si usa un mensaje hash anterior ya conocido, pero supongo que también podría resolverse.
Algunos recursos que también podrían ser útiles: https://solidity-by-example.org/signature/ https://blog.chainsafe.io/how-to-verify-a-signed-message-in-solidity-6b3100277424
actualización: puede evitar que el usuario acumule fuera del sitio web incluso si conoce un mensaje hash anterior agregando datos dinámicos como parte del mensaje hash requerido, como por ejemplo, el msg.sender y su nonce. Por lo tanto, incluso si el usuario intenta acuñar nuevamente con un mensaje anterior, no será válido porque el nonce es diferente y ya no es válido, una vez que el contrato requiera un mensaje hash con el último nonce del msg.sender.
No es realmente posible. El contrato inteligente no puede saber de dónde proviene esa transacción. Su mejor apuesta es permitir mentas solo en un momento específico.
Bueno, no creo que eso sea posible. No se puede comprobar esa condición. A menos que tal vez cree otro contrato y restrinja la acuñación solo para ese contrato. Utiliza ese nuevo contrato para interactuar en su sitio web y no lo verifica en Snowtrace, por lo que no puede interactuar con él directamente desde Snowtrace.