在 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翻译&校对: 安仔 & 阿剑