Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号4 h3 c* y. Y  C2 u
' B7 K7 D. y; P  e: q
iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:6 h" }9 b; @, \+ \
$ f* O( |2 ^3 Y( ]7 C" b/ d
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS8 @# k/ ~" |$ Y( e1 U* J8 D/ J
: w, c7 x5 u4 N+ Q3 C9 l) |$ I: A
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
8 X6 v& f  a! s1 l. Q8 A
9 T$ D7 k2 J1 ^% X7 V7 P国别码,用来标识国家,遵循ISO3166-1 alpha-2标准6 r' Z4 p  g: [9 m/ ]# K9 p

7 G- }7 L* h4 ^/ T* r错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
1 h7 T: z/ {0 h* R) X2 A
) Q0 U1 K$ j& @$ p0 q$ x5 a基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码
0 d4 s2 @0 W* |% h6 P* ^- H% ]5 R; b+ G. H+ V0 r0 X
以太坊iban:新的国别码和BBAN编码方案, m! `  @) J0 y& `/ B6 t3 ?: ~+ |

4 U1 ?  v# L- r0 e以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
) K1 c/ i/ Z- F, D! S) j$ t
- X. p  Z8 Y, b: p. W0 ]direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。" R2 N& Q0 ~  a! B( s
8 T3 z6 |% M  u/ j5 ]# T5 z3 e
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:
' c/ k7 U! X  F& {9 G, t& [( ?* ]# U2 f8 A- A- F4 r
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
: c. U3 x6 C7 Y
& i2 r3 e3 L' Z& ?" Yconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
7 r# P) W6 C' F$ l3 p7 V
$ B: t5 l- t; p  z# s0 T8 zbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。' h  G  B1 t6 A) a/ v6 Y7 U. p

& u0 p/ e- Q7 Pindrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:! `& [) A( @8 p4 |/ O; H' W$ L# _
) i0 V" S5 [( M0 B
资产编号,由3个字母/数字组成
/ K) K6 G4 F$ y5 l( M+ C$ Z+ x9 e" S4 n5 I& W
机构编号,由4个字母/数字组成
+ t4 @9 i5 a: t' U: D8 |* a; U6 y' R7 s; a: l- w( x
机构内客户编号,由9个字母/数字组成
2 G$ I7 b: X' W7 F: o3 g: P0 o3 H2 d% r" S6 p0 J
例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
3 }3 r; ]' x& P% V6 y  y6 b4 U1 O) Y
3 @# Z; B2 q9 r( L( \$ QXE81ETHXREGGAVOFYORK
2 x- C' S# z% J, V
1 g* \- O  R' E- k6 Z5 X前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:& z5 ]' w) _6 S
" ?6 C$ S8 L# u% _
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号* [; v" N5 z. j" T0 |3 d/ M
. b- w" J  i' s& i, O* {9 \
XREG:机构编号,XREG表示以太坊基本注册合约
% k! L2 M: F9 n. {" F2 J3 C
! J2 f: D, K9 x+ K! f" XGAVOFYORK:机构内客户的编号
+ |" G1 W% P/ ~2 a) L: \, H) v4 J8 b1 T; ~# r# c/ L' d- _' ]
iban账号与以太坊地址的转换
  q& Y7 w. B) ^4 [6 R% h4 M( u* t  M1 S& S, q2 U
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
/ z/ _, C$ C3 T1 x1 a( M6 j7 O$ M8 q0 k" a# b) z3 c4 F6 m$ ^
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")0 I* E# A7 F. J! [& H

" z7 x4 T, V& @7 U7 i" zconsole.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
( Y9 X9 l. {7 u9 r, I( m+ c2 ]" ?% O6 u( k; e0 U( _& W
检查iban账号的有效性
3 Z! g/ V* A3 s$ F& v" ^0 H: I. G$ ?' K! i1 P
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:' Z. s# `6 c$ `% k; {
% q' h( s2 r# o7 a7 D5 `1 ]
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
% k8 x7 [( |/ c2 L  K. W; |2 A1 l" Q! [6 z
console.log(isValid) // true2 I$ s: C/ I2 F
7 `: u% t' o0 h6 |' i, @3 A
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
5 d1 c  P6 Q" j5 H9 K8 }" v6 Z# u2 a4 x) z6 }) H
console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5