Cómo guardar y enviar tokens

Tengo algunas preguntas básicas sobre la implementación de tokens. Quiero usar el estándar ERC20, que define las siguientes interfaces:

  • balanceOf(dirección _propietario) rendimientos constantes (saldo uint256)
  • transferir (dirección _a, uint256 _valor) devuelve (bool éxito)

Por lo tanto, debo guardar de alguna manera, qué dirección tiene cuántos tokens. Busqué en Internet y lo implementan siempre con una matriz definida por "mapping (address => uint256) public balanceOf". Sé cómo implementar la función de transferencia (...) con esta matriz, pero todavía tengo dos preguntas:

  • La matriz balanceOf se vuelve más y más grande cuando más direcciones poseen Tokens. ¿No existe el riesgo de que la matriz se vuelva tan grande que ya no pueda buscar usuarios en ella debido al límite de gas de un bloque?
  • La matriz balanceOf es una especie de registro de usuario, que no quiero. ¿Hay alguna forma de enviar tokens directamente a la billetera de un usuario? En caso afirmativo, ¿cómo se vería en solidez?

Gracias por tu ayuda, DerBär

Respuestas (1)

  • Un mapeo es similar a una tabla hash , por lo que no debería tener problemas con respecto a la búsqueda/escalado a medida que más usuarios usen su token. A diferencia de una matriz en la que es posible que necesite buscar un elemento, una asignación utiliza la clave (dirección en este caso) como un índice definido para el lugar donde se ubicará el valor (saldo uint256) en la memoria.
  • Un error común es que los tokens se "almacenan en la billetera del usuario". Esto no es verdad. Un usuario que "posee" un token es exactamente equivalente a que el usuario tenga una cantidad distinta de cero en el balanceOfmapeo al que nos referimos anteriormente. Incluso cuando intenta verificar qué tokens tiene un usuario, primero debe mirar la dirección del token en cuestión y luego realizar una consulta en el contexto de ese contrato. No hay ningún lugar (dentro de Ethereum) donde, a nivel de cuenta, obtendrá una lista de todos los tokens que posee el usuario.

Además, probablemente no debería reinventar la rueda en términos de implementación del estándar ERC20. En su lugar, use algo como esto de una fuente confiable .