Manipular grandes cantidades de datos en un contrato inteligente puede volverse un problema si debemos realizar operaciones complejas con los mismos. Tanto los Array como los Mapping de Solidity nos serán muy útiles, pero sus funcionalidades pueden quedar algo limitadas en casos de uso complejos.
Extención de Arrays y Mappings
OpenZeppelin nos ofrece dos utilidades para extender el funcionamiento de los Array y de los Mappings.
Se trata de dos contratos inteligentes que nos permitirán recorrer estas estructuras de datos con más rapidez, localizar datos de forma más eficiente, borrarlos o incluso obtener la cantidad de los mismos.
Estos son EnumerableSet.sol
y EnumerableMap.sol
, tanto para Arrays como para Mappings respectivamente.
Ambos se declaran de forma muy sencilla haciendo la importación correspondiente de la librería.
contract ExampleEnumerableSet {
using EnumerableSet for EnumerableSet.AddressSet;
EnumerableSet.AddressSet private mySet;
}
contract ExampleEnumerableMap {
using EnumerableMap for EnumerableMap.UintToAddressMap;
EnumerableMap.UintToAddressMap private myMap;
}
Al implementar estas librerías, ya no necesitaremos utilizar Array y Mapping. En su lugar, implementaremos estas estructuras de datos que nos aportan grandes funcionalidades adicionales para resolver casos de uso complejos.
Tal vez no sea recomendable utilizar este tipo de librerías si tenemos que resolver casos de uso sencillos como llevar el balance de una cuenta en un Mapping o guardar datos de los usuarios del contrato.
Si al momento de estar desarrollando el contrato detectas que necesitarás realizar operaciones complejas con este tipo de estructuras de datos, es momento de que entre en juego estas utilidades para simplificar nuestro trabajo.
Contribución creada por: Kevin Fiorentino (Platzi contributor).
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?