Mantenimiento de Clicker PERL – Perlin

PERL Clicker es un juego que fue desarrollado para ayudarnos a hacer una prueba de esfuerzo de nuestra red bajo una carga extrema; permitiendo que solo un pequeño número de usuarios cree una gran cantidad de pistas.

Con solo 100 usuarios, PERL Clicker podría generar hasta 10,000 transacciones por segundo.

Después del lanzamiento, recopilamos comentarios extremadamente valiosos que nos permitieron hacer ajustes / mejoras en el juego de PERL Clicker, junto con comentarios iniciales sobre cómo podríamos atender mejor a Wavelet para escalar con respecto a DApps de transacciones pesadas.

https://github.com/perlin-network/wavelet/commit/d5f5990c4b81f865917396df67464a1e5e4f6836

Dadas las respuestas positivas de nuestros jugadores, decidimos dar un paso más para presentar un desafío en el juego donde los jugadores puedan ganar la oportunidad de ganar $ PERL reales compitiendo contra otros jugadores.

Por lo tanto, la #PERLClickerChallenge nació en 6 de septiembre de 2019.

En el lapso de las primeras horas se lanzó el #PERLClickerChallenge, nos sorprendió:

16.987 llamadas de contrato inteligente sucedían por segundo, con 487 jugadores tocando simultáneamente ¡de repente!

Con el testnet Wavelet funcionando a toda velocidad con cada nodo que abarca solo 4 GB de RAM y 2 vCPU, esto fue impactante:

De ninguna manera a lo largo del desafío, la red de prueba se cayó ni siquiera un segundo a pesar de toda esta carga transaccional producida por PERL Clicker.

Sin embargo, una cosa se rompió, lo que no esperábamos.

A medida que nuestro equipo supervisó estrictamente el estado interno del contrato inteligente que rige PERL Clicker, parece que el contrato inteligente PERL Clicker utilizó 86 veces más espacio en disco de lo necesario para almacenar el estado de cada jugador!

Cada página de memoria tiene 65536 bytes. ¡67 MB en total para almacenar solo 763 jugadores!

Al rastrear la raíz del problema, notamos:

los wee_alloc El asignador de memoria, de gran confianza y utilizado para una gran proporción de todos los programas de Rust (WebAssembly), asignó significativamente más memoria de la necesaria.

En particular, esto implicaba que los contratos inteligentes de Rust (WebAssembly) Wavelet que utilizaban con confianza wee_alloc, bajo cargas extremadamente altas, se asignó significativamente más memoria de la necesaria.

Para evitar cualquier consumo de recursos posiblemente exponencial dentro de nuestra red de prueba, inmediatamente pasamos a la acción y derribó el juego PERL Clicker y el desafío.

Habíamos controlado manualmente todos los nodos de testnet de Wavelet para que no aceptaran más llamadas de contrato inteligente a PERL Clicker en 6 de septiembre de 2019 a las 12:37 a.m. SGT mientras trabajábamos en el problema.

Para abordar una solución técnica rápida, hemos realizado de forma predeterminada que todos los contratos inteligentes de WebAssembly (Rust) en Wavelet ya no utilizarán el wee_alloc asignador de memoria.

En la siguiente confirmación, hemos cambiado de utilizar el wee_alloc asignador de memoria a la estandarizada dlmalloc asignador de memoria: https://github.com/perlin-network/smart-contract-rs/commit/f2a070f46ab292410f1229b6e929cb25fa5e73dc

Para aquellos interesados ​​en seguir utilizando wee_alloc, una simple adición del código proporcionado anteriormente configuraría su contrato inteligente Rust para usar el mismo modelo de asignación de memoria.

También se hizo referencia a un problema wee_alloc repositorio en lo que respecta a las asignaciones de memoria extrañas realizadas.

Por último, dos miembros de nuestro equipo de desarrollo principal han sido asignados para descubrir la causa raíz de wee_allocComportamiento de asignación extraño con respecto al contrato inteligente de PERL Clicker.

Todos los arreglos que hagamos serán devueltos a wee_alloc, dado que es un proyecto de código abierto.

En primer lugar, le pedimos disculpas por las molestias y el retraso en la publicación de este anuncio. Queríamos estar absolutamente seguros de la causa raíz técnica del problema y de nuestras soluciones al problema.

Dicho esto, no queremos dejar que todos esos clics apasionados que ya se hicieron se desperdicien.

Para mostrar nuestra sincera gratitud por todos los esfuerzos realizados por los errores encontrados y los comentarios proporcionados por la comunidad durante el lanzamiento:

¡Distribuiremos 5,555 PERLs a los 300 mejores jugadores durante el #PERLClickerChallenge que envíen su información!

Tras la detención tanto del juego como de la competencia, una instantánea de todos los datos del jugador fue hecho en el 6 de septiembre de 2019 a 12:37 am SGT.

Todo lo que necesitamos de ti son dos cosas:

Tu ID de referencia de Binance.Tu Wavelet TESTNET Private Key.

Como se muestra a continuación, su ID de referencia de Binance es una identificación numérica de 8 dígitos que se puede encontrar iniciando sesión en: https://www.binance.com/invite.html

Como se muestra a continuación, su Clave privada de Wavelet TESTNET se puede encontrar directamente dentro de la interfaz de usuario de inicio de sesión del juego: https://perlin-network.github.io/clicker

Con tu ID de referencia y Llave privada, complete el formulario aquí: https://forms.gle/97jLZXjmn3NcoE987

Habrá una fecha límite en 22 de septiembre de 2019 12:00 a.m. SGT en el que se cerrará el formulario. Todos los premiados procederán a ser verificados, y luego se distribuirán los 5,555 PERL.

El conjunto de datos de la instantánea también se entregará a la comunidad una vez que se alcance la fecha límite.

Hasta la próxima,
Kenta Iwasaki