知乎专栏 | 多维度架构 |
以太坊官网的说明: https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol
iban其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
XE039RBH0XKV9FZMTH2701Q37FLX10NTWXU
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。
iban 中包含以下信息
以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。
可以使用web3.js中的web3.eth.Iban.toIban() 方法来执行这一转换:
var Web3 = require('web3'); var web3 = new Web3(); web3.eth.Iban.toIban("0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8"); 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。
indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段
例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
XE81ETHXREGGAVOFYORK
XE81ETHXREGGAVOFYORK
如前所述,使用web3.eth.Iban.toIban()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress()方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
var Web3 = require('web3'); var web3 = new Web3(); web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"); '0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8'
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
> web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK"); true > var iban = new web3.eth.Iban("XE81ETHXREGGAVOFYORK"); undefined > iban.isValid(); true > web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK"); false