Cómo integrar la compatibilidad con múltiples monedas de ENS en su billetera (para desarrolladores)

Después de anunciar nuestro soporte para múltiples monedas durante Devcon5, lo implementamos rápidamente en nuestro ENS Manager.

No pasó mucho tiempo antes de que otras carteras comenzaran a admitir.

Los desarrolladores pueden actualizarse sobre los detalles de la implementación leyendo el EIP, los documentos y nuestra biblioteca de JavaScript codificador de direcciones.

En esta publicación de blog, explicaré cómo integramos la función en nuestra propia aplicación para que otros desarrolladores puedan tener una idea general sobre cómo integrar esta nueva función en su billetera.

Resolución

Debido a que esta función es nueva, muchas bibliotecas de Ethereum aún no la admiten (actualmente es compatible con ethers.js, go-ens y ethereal).

Para interactuar directamente con el contrato de resolución, puede instalar nuestro contrato desde npm e importar el abi de la siguiente manera.

Veamos la diferencia entre configurar / obtener una dirección Ethereum y una dirección de criptomoneda diferente.

La gran diferencia es que tanto el getter como el setter ahora toman coinType como argumento adicional. Tenga en cuenta también que setAddr toma bytes en lugar de direcciones.

codificador de direcciones

address-encoder es una biblioteca js para codificar y decodificar el registro almacenado en el resolutor ENS. Tiene dos funciones, formatByName y formatByCoinType .

De ahora en adelante, solo usamos formatByName .

Obtener una lista de monedas admitidas

Puede tener su propia lista de monedas para apoyar. Si desea admitir las monedas que admitimos para decodificar / codificar, puede construir la lista de monedas,

Obteniendo dirección

Esta es la versión súper simplificada de nuestra función getAddr en nuestro componente UI React.

En la línea 1, obtenemos la función coinType y encoder . Utilizará coinType y namehash para obtener una dirección específica de moneda del contrato de resolución.

En la línea 4, devolvemos una dirección vacía antes de pasar al codificador. Si pasa una cadena vacía al decodificador, puede arrojar un error para algunos tipos de monedas.

En la línea 5, pasa la representación binaria de la dirección a la función encoder para que se muestre como texto.

Configuración de dirección

Aquí hay otra versión simplificada de nuestra función setAddr .

Como hicimos durante getAddr , omitimos el decodificador si la dirección está vacía. Simplemente coloque la representación binaria de la cadena vacía en la línea 5.

Validación

Es importante validar el formato correcto para cada tipo de moneda.

La biblioteca address-encoder simplemente arroja un error si pasa texto no válido.

En nuestro caso, detectamos el error y mostramos un error en consecuencia.

Una nota sobre BCH

En la mayoría de los casos, recibirá el mismo texto si decodifica y codifica la representación del texto. Sin embargo, Bitcoin cash funciona de manera ligeramente diferente (para la explicación técnica, consulte la sección “CashAddr” del EIP), y devuelve la representación de texto con el prefijo “bitcoincash” cuando se codifica en texto. El siguiente es un ejemplo de cómo se ve el texto, binario (hexadecimal) y su versión canónica codificada para BCH (que puede encontrar en las pruebas).

Resumen

En esta publicación de blog, analizamos lo que debe tenerse en cuenta en términos de compatibilidad con nuestra nueva función de monedas múltiples. Es bastante similar a cómo establece / obtiene la dirección, excepto que debe pasar coinType . Además, debe manejar las cosas con un poco de cuidado cuando se trata de validación y una cadena vacía.

A medida que más bibliotecas admitan la función de monedas múltiples, será más fácil para los proveedores de billeteras agregar la compatibilidad.