Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

9.2. IBAN (International Bank Account Number)

以太坊官網的說明: https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol

9.2.1. iban:國際銀行賬號

iban其英文全稱為International Bank Account Number, 即國際銀行帳號。iban的作用是為全球任意一家銀行中的任意一個賬戶 生成一個全球唯一的賬號,以便進行跨行交易。一個iban賬號看起來像這樣:

		
XE039RBH0XKV9FZMTH2701Q37FLX10NTWXU		
		
			

iban地址最多可以包含34個字母和數字,其中的字母大小寫不敏感。

iban 中包含以下信息

  1. 國別碼,用來標識國家,遵循ISO3166-1 alpha-2標準
  2. 錯誤識別碼,用來對地址進行校驗,採用mod-97-10校驗和協議,即ISO/IEC 7064:2003標準
  3. 基本銀行賬號,即BBAN(Basic Bank Account Number),用來標識銀行機構、網點及 客戶在該機構內的賬號,這三部分信息的編碼方案依賴于前面提及的國別碼

9.2.2. 以太坊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.toIban() 方法來執行這一轉換:

			
var Web3 = require('web3');
var web3 = new Web3();
web3.eth.Iban.toIban("0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8");

'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'
			
			

basic編碼方案與direct方案的唯一區別在於,其BBAN長度為31個字母/數字,因此該方案 不兼容IBAN。

indrect編碼方案中的BBAN長度為16個字母/數字,包含三個欄位

  1. 資產編號,由3個字母/數字組成
  2. 機構編號,由4個字母/數字組成
  3. 機構內客戶編號,由9個字母/數字組成

例如,一個採用indrect編碼方案的以太坊iban賬號,看起來是這樣:

			
XE81ETHXREGGAVOFYORK
			
			

XE81ETHXREGGAVOFYORK

  1. ETH:在本例中,表示客戶賬戶內的資產編號。目前ETH是唯一有效的資產編號
  2. XREG:機構編號,XREG表示以太坊基本註冊合約
  3. GAVOFYORK:機構內客戶的編號

9.2.3. iban賬號與以太坊地址的轉換

如前所述,使用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'
			
			

9.2.4. 檢查iban賬號的有效性

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