¿Cómo limitar la cantidad de tokens que se pueden transferir en un período de tiempo determinado?

¿Cómo se puede garantizar que el titular de un token ERC20 no pueda enviar/transferir/otros tokens más de X en un período determinado Y donde Y podría ser una hora, un día, una semana, un mes, etc.

Sería mejor si esto se puede hacer sin ocupar más espacio de almacenamiento.

Respuestas (2)

Para los contratos, la única fuente de verdad es blockchain, por lo que la respuesta a la segunda parte es no.

En cuanto a la primera pregunta: puede guardar la marca de tiempo de la última operación para el titular Q y antes de aceptar la operación requiere que ya haya pasado al menos Y tiempo, por ejemplo:

now >= last_operation + Y

Puede implementar un control aproximado y permitir hasta X transferencias de tokens dentro del período Y. Puede hacer que el período comience en la primera transferencia y expire después de Y segundos. Esto solo le costará unas pocas transferencias de almacenamiento, pero liberará el bloque más tarde de lo que debería.

Para resolver el problema si está lleno, debe almacenar un registro (cantidad + marca de tiempo o número de bloque) de todas las transacciones recientes, en una matriz. En la transferencia, debe revisar esa matriz y verificar la restricción de la tasa de transferencia. Debe mantener una matriz separada por titular de token. Esto puede ser costoso y, si el remitente realiza demasiadas transferencias, existe el riesgo de que la operación de verificación de la tasa de transferencia exceda el límite de gas del bloque. Sin embargo, debería haber una forma de codificarlo para evitar la congelación permanente.

Es posible que encuentre un término medio, al mantener los conteos en intervalos diarios/por hora.

También puede investigar esto https://github.com/figs999/Ethereum/blob/master/EventStorage.sol .