Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号
: t: G4 ]0 M$ a$ n' x4 {- _
  f0 J& z+ x' h' h* ]% Wiban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
5 L# j; S! K" X9 y3 |/ L! n  Z6 [- x7 q  F/ R. y3 h# K* ]
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS# l( @- {) j2 _6 \
, Z1 ?2 H3 U* S
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:# q# j: G' T# d, [

' W" |, A6 Q4 x. ?) b国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
: o2 D! ~' T; Z' I( X
9 b  Q; I7 a' {: Y; T+ g错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
4 q/ f2 F) [1 n" z& s1 K
4 o- _& y0 u4 y. W# s8 z6 Y3 R& |" |基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码
- l# _6 X( M8 d/ Q& ^2 l# \; I* P3 `3 s
以太坊iban:新的国别码和BBAN编码方案: p- s, q; f' g8 ~! l1 w3 J

0 @# ^- N+ `! V  c以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。. w7 `8 n( ]% U
$ T( d1 G* o- B1 Y3 P
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。2 b5 N0 ~/ @5 ^' z. d! K4 M- _$ R
( z( o0 G: N# \1 f1 {
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:. @6 H+ F; F: d5 @: F. ~& I8 V
2 }) _, J6 E: P7 k$ q) Y
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
  H' o: p3 Q& z: O) {
* h: t! H# N. ]' R0 b9 Y$ |* vconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS) n! B' Y, U* i

( ]6 H. m& ^7 @0 Z3 B5 K5 j$ Wbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。
2 u' A" u: _) S3 t9 q
# f% Y# |5 I. ^9 ?, |; @indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:
/ X3 H* L6 ]9 `- V+ q
# b3 m/ ^) J: z资产编号,由3个字母/数字组成
  s: X+ z# {2 n( H- s& R
, Q7 |. \0 r5 @" N; M1 C机构编号,由4个字母/数字组成6 a" I; L& j5 i* L
: w6 c  q0 ^7 [9 Z' G
机构内客户编号,由9个字母/数字组成& \) F1 ?( \+ }& R& Y9 Y
1 Y8 ~4 {! C7 V( S* a) z
例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:: ]9 P! N" t( F: m6 ]0 L3 I
+ N: F( U* x$ J& }; k! \# ]6 Q
XE81ETHXREGGAVOFYORK
+ ~/ m7 {' r$ A" g' ~. u; X2 x/ G# N$ ]  N2 A
前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
, X) ]# d3 p" \7 T3 s
# m& ~8 B3 x; ]) }& |% g7 eETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号9 D& h8 k, `. @, d3 Q

- R7 g0 B3 Z( q2 o! W( J9 D" o9 xXREG:机构编号,XREG表示以太坊基本注册合约
  s5 Q9 [2 P! t' [1 d, g/ {) ^; i7 _( m2 X
GAVOFYORK:机构内客户的编号. B2 Z1 O9 Q/ E0 S0 o3 J

/ W' ~& I% c$ N: J' y  Qiban账号与以太坊地址的转换% N+ c- J- x* w; K- `2 |

, w* d2 Y! A' n如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:( _. X4 M. O' G0 n; \; a! u2 n
( C' ]( b1 j5 L# Q$ `% d9 h- W) J
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")  z# j2 k. K% a; B( o
' \& v. m$ f: j5 j. Q8 |
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8. F# b; B$ |) c; L) |3 j4 ~

$ D: V/ x( ~# u8 ~; d% N检查iban账号的有效性
6 t) `5 ], M# C4 H7 Y! N
! g" t6 c, t% J$ K3 f2 ~+ Liban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
1 j$ U) ?) `/ q( E- p: n& D% |' M9 ^9 z8 l; ]
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
) X8 s7 G0 `: L
& \  o+ K1 Z/ m: u/ nconsole.log(isValid) // true
$ w% L6 R3 i( s* ^: ~- g7 Q5 C+ g; ^& {( L2 I; o
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
8 }7 c- X: x2 V& ^5 j2 \
& P. r1 w; z2 C3 Z) W, R& Wconsole.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5