在 Devcon5 上文书了多币种接济特色后,咱们很快就在 ENS 处治器上达成了这一功能。
很多钱包也紧接着启动接济这一特色。
开辟者们不错通过阅读 EIP 、文档以及咱们的 JavaScript 地址编码库来了解最新的达成细节。
在这篇著述中,我将先容咱们把多币种接济特色接入到我方 app 中的素质,为其他钱包开辟者投砾引珠,提供简陋思绪。
\r\n通晓器\r\n
由于这个特色是全新的,很多以太坊库都尚未接济(目下 ethers.js 、go-ens 以及 ethreal 接济)。
为了平直妥协析器合约交互,你通过 npm 下载咱们的合约,并导入以下 abi 。\r\n
import {abi} from\r\n '@ensdomains/resolver/build/contracts/Resolver.json'\r\n当先咱们来望望缔造/赢得以太坊地址和其它数字货币地址的辩别。\r\n
## 赢得并缔造以太坊地址 \r\nfunction addr(bytes32 node);\r\nfunction setAddr(bytes32 node, address addr); \r\n## 赢得并设多币种地址 \r\nfunction addr(bytes32 node, uint coinType); \r\nfunction setAddr(bytes32 node, uint coinType, bytes calldata a);\r\n最大的辩别在于 getter 和 setter 函数量下都要附加上 coinType 参数。请钟情目下 setAddr 函数的参数是 bytes 类型而不是 address 类型。
\r\n地址编码器\r\n
address-encoder 是一个 js 编解码库,对存储在 ENS 通晓器中的纪录进行处理。它有两个函数,包括 formatsByName 以及 formatsByCoinType 。\r\n
import {formatsByName, formatsByCoinType} from '@ensdomains/address-encoder'; \r\nformatsByName['BTC'] \r\n{coinType: 0, decoder: [Function],encoder: [Function],name: 'BTC'} \r\nformatsByCoinType['0'] \r\n{coinType: 0, decoder: [Function],encoder: [Function],name: 'BTC'} \r\nFrom now on, we only use formatsByName.\r\n底下咱们只使用 formatsByName 函数。
\r\n赢得接济的币种列表\r\n
好像你想接入我方的接济的币种列表。若是你想平直接入咱们照旧达成了编解码的代币,你应该通过以下代码构造这个币种列表。
export const COIN_LIST = Object.keys(formatsByName)
\r\n赢得地址\r\n
底下是咱们在我方的 React 组件中达成 getAddr 函数的超等简化版块。
通过第一转代码,咱们赢得到了 coinType 以及 encoder 函数。接下来会用到 coinType 和 namehash 参数从 Resolver 合约中赢得到某种代币的具体地址。
第四行代码是把地址传给译码器之前先检查是否是旷地址,若是是的话就平直复返。因为若是把一个空字符串平直传给编码器,就有可能抛出某些代币类型的失误。
第五行代码把地址的二进制抒发表情传给编码函数,将地址以文本表情浮现。
\r\n树就地址\r\n
以下是咱们 setAddr 函数的简化版块。
和咱们在 getAddr 函数中的处理相通,当地址为空时,咱们提前复返这个成果,而不传给解码器。第五行平直用空字符串的二进制暗示就行。
\r\n考证\r\n
考证地址是否适大意应币种的身手相称要道。
若是向 address-encoder 库坑害传一个无效的文本,就会抛出失误。
本例中,咱们拿获了这个失误并展示了出来。
\r\nBCH 贴士\r\n每每情况下,对团结条规本先解码再编码,依然会得到相通的文本。但比特币现款推崇的不太相通(想要酌量具体的本事原因,不错参考这条 EIP 中的 CashAddr ),比特币现款在编码之后复返文本会加一个 bitcoincash 前缀。底下这个例子浮现了原始文本、16进制暗示以及查询时 BCH 编码后的圭表暗示表情(你不错在测试用例中找到它)。
\r\n回归\r\n
在本文中,咱们梳理了达成多币种接济的进程,先容了需要钟情的某些细节。事实上这和正本缔造/赢得地址的操作相称接近,只不外要多传一个 coinType 参数。此外,在波及到考证和空字符串的问题上,要稀奇禁绝。
跟着越来越多库接济多币种特色,以后钱包开辟者将很舒缓地添加这一功能。
(完)
原文通顺: https://medium.com/the-ethereum-name-service/how-to-integrate-ens-multi-coin-support-into-your-wallet-for-developers-8d3a8a37d1eb\r\n作家: makoto_inoue\r\n翻译&校对: 安仔 & 阿剑