简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念,web3.js中提供了以太坊地址和iban地址之间的转换方法。
iban:国际银行账号
iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number
,即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban
中包含以下信息:
- 国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
- 错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
- 基本银行账号,即
BBAN
(Basic Bank Account Number),用来标识银行机构、网点及客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码
如果你希望马上开始学习以太坊DApp实战开发,推荐在线互动教程:
- 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
- python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
- php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
- C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
- php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
- java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
- EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
以太坊iban:新的国别码和BBAN编码方案
以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊地址00c5496aee77c1ba1f0854206a26dda82a81d6d8
转换为direct方案的BBAN账号,就得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
。
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress()
方法来执行这一转换:
let myiban =
web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案不兼容IBAN。
indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:
- 资产编号,由3个字母/数字组成
- 机构编号,由4个字母/数字组成
- 机构内客户编号,由9个字母/数字组成
例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
XE81ETHXREGGAVOFYORK
前面的XE
表示国别码,81
为校验和,后面的16个字符就是indrect编码的BBAN,其中:
- ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号
- XREG:机构编号,XREG表示以太坊基本注册合约
- GAVOFYORK:机构内客户的编号
iban账号与以太坊地址的转换
如前所述,使用web3.eth.Iban.fromEthereumAddress()
方法,可以将一个以太坊地址转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法,将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
检查iban账号的有效性
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用web3.js中的web3.eth.Iban.isValid()
来进行执行校验。例如:
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
console.log(isValid) // true
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
console.log(isValid) // false,因为校验和无效