Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号$ X( u) _) [4 h. X$ `/ k( b

- c( K; U" v7 e# f9 x* P' ]6 [  k% h% Siban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:$ k& u% P3 V2 q6 }$ h( d0 F7 z! ]8 Q

4 @) e. h: E; p6 N1 S$ gXE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS6 [3 r( G, p- F9 k& Z

: ?, s& Z2 U- Tiban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
' X5 |) ~, Y* _+ Y/ G4 T/ W" F. S( H+ O: ^+ N! }  F
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
/ E( b2 |, |/ v) [' N
/ i8 c9 z' @2 W错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
4 v; I/ v. C, W; t$ C
) b. \$ V2 K) \8 M" Z$ C% e' d基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码, ^: w3 w: _  v4 R. _; G7 P

. h- G- \/ C$ e- O% Z8 {3 K以太坊iban:新的国别码和BBAN编码方案
. H2 _" K8 R/ u0 p. Y
, m1 b8 b6 Z( H3 Z以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。8 [; y% @8 g, Q& O; f7 Q

+ Q( @  [# p% B7 gdirect编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。
) Q( m3 M1 A3 i5 u5 O- m
1 g: A5 [+ }+ h2 l可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:7 z* M7 @# |7 p( }

* B8 z! {) }% Llet myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
9 q* o# i0 ]6 G0 O( ]9 E1 k( n
. t: d- V5 g6 j8 ]7 y& \+ `console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
' p8 f# U$ V8 X7 O3 g# Q
7 V+ v. j' G8 pbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。. f% s8 b6 f# D5 I6 B. a  I+ J

3 y8 a1 }( `* X! Cindrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:
  H  |+ U4 D  H. N) ?  Q% d, i* Z- Y6 ~
资产编号,由3个字母/数字组成
3 O; v* H2 B% D! _6 q- ]- u0 j' ?+ o  ?6 r  x: B1 c
机构编号,由4个字母/数字组成
  ^9 \# K) |& g5 X7 J/ T
, H& E8 n/ N; F机构内客户编号,由9个字母/数字组成! `2 T; a4 K' r4 w, e, u# E- A2 G

$ g9 m* D# X" U2 O6 a, \3 ^+ d) ?例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:' q2 e0 r( D- \. x- t

' J# j* N' S& c! J5 N! |$ j8 fXE81ETHXREGGAVOFYORK" @0 f' g4 f' ^2 t) c: z% F

& F6 G% M% i. n/ }7 K前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
8 x2 q4 n+ i1 n0 B* u8 A. q0 @0 m
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号) v6 N6 h0 C) r( {) \
" I6 h  y4 ?9 N* c& E" R0 p1 {/ ]% \  U
XREG:机构编号,XREG表示以太坊基本注册合约* x- \3 z( h/ L) g+ I3 ~' s
' T9 L: @$ e# H1 y3 F, T* t
GAVOFYORK:机构内客户的编号: K0 P. S- @. y4 j% z# s

: p/ F+ K- _9 u5 G" Y- v* v; Q/ y$ b9 e' Ciban账号与以太坊地址的转换
! H) v& }1 U: d2 R( Z5 G
% a( [7 [# j; y! d% j# |0 o) ~如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
- v+ y6 ?3 n* x: M+ o+ j$ r. J. N
6 H3 }( f* x- [/ [  B7 _let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
9 t; R$ w, ~* G& s" P' c
$ j( F$ L, C( C. b; A0 u. l; lconsole.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
6 j5 N; B, M+ F# A* h2 T; e: \  d7 M* g/ z" i+ z
检查iban账号的有效性1 Z, f, h; q4 s+ [
. ?+ D# W9 s& ?: |9 @
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
# F9 I! R# ^' N6 r
; G8 V' d! H" t9 Ulet isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
7 t0 n$ M$ K; m- b
& S: \5 E8 [( z, q, Yconsole.log(isValid) // true# ^$ q6 G0 `7 a- k7 J

4 ^* p( [( E& h& q2 |4 _isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
4 M/ Q" k: L" @4 A
+ q+ l, z$ j) B  k( r! gconsole.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5