Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号0 {) c, H' ^6 X

$ A4 }4 }3 z1 V3 viban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
% x; d  V4 P3 _: z$ g( _9 p' s0 I( e0 b) u3 x' i8 q9 {
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
2 w8 r7 R* ?' L+ \, m( m2 f0 Y+ k
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:% P% a! l% o" T9 B4 `
& X$ e8 @; K& ?$ p7 K
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
2 z+ s* F/ l8 I- {2 N
6 u# h8 g6 p  j错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
4 U  v8 v6 b7 V: `1 f6 J' f6 C6 \7 G1 A& _  [2 Q
基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码9 p: X8 l5 @, ^7 F! y8 X. f

: f7 K: R! R! C; \以太坊iban:新的国别码和BBAN编码方案
& d* g# d& u& D! G6 M( z8 M0 N+ [( ^" J/ z6 w9 w3 a- U9 j- E
以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。- Z% M. C3 C3 O( c, ^6 P# N6 N1 M
3 Z" P+ d) ~1 E' f9 G
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。
- R! N: C1 b6 G) K. X8 K& u
& @2 E# O  j# R6 `+ Y可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:& X1 c' o6 m* l2 I% `
8 Y5 ~% R4 R- X7 j& O* m
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
! g# B; }1 d1 z
) l; S4 E+ U, _) L8 K9 Tconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS+ B4 @# k- Q. C5 h" T" F2 D4 H( n! \8 [

0 ]2 T6 I1 ~. Pbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。3 \' L# o. W  y% t' {4 V

: W! @9 @. j$ N# g+ a' bindrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:+ N' G2 Z6 j! x" P7 W

  o$ v  W# d- H& `, V资产编号,由3个字母/数字组成
1 \# @# l1 y  I; @* p+ w/ v2 ^+ U5 U1 K
机构编号,由4个字母/数字组成7 \2 i7 E6 c( c
/ V8 y  I! w) Z% m1 O$ {! ~
机构内客户编号,由9个字母/数字组成0 D! |2 B9 z2 Y, v

$ X" D3 E: {/ S7 Z例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
# u8 x' k  Y6 S1 o5 L5 T- \, Y! a/ I( i. j3 f  P' `, g
XE81ETHXREGGAVOFYORK
3 y9 ~+ m( Q# m5 ?
$ P" Y+ Z  g8 j1 R" w前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
' Q0 k7 j6 e+ Q5 [, N0 X. X. [
/ S' O! v9 C: ?* d) d7 T4 ~, bETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号3 u0 x( D# O, X! J+ x$ V. r
. {/ W% Y0 K5 A# \/ M* M8 m7 l
XREG:机构编号,XREG表示以太坊基本注册合约
: p* Z) v+ X1 W: @: Y
* W# ?" n- V- J. eGAVOFYORK:机构内客户的编号
/ I/ W! [$ ^4 p6 E$ N
1 f3 {6 Y/ n6 j# s( viban账号与以太坊地址的转换
; J6 i% E3 M" a
" y' D) w4 T9 i& H: @. \6 }3 |如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
" K; o" p+ b$ C6 I+ ?' L/ {$ J7 C5 T
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"): N& U2 j8 a  D: }+ n+ \

1 A4 `: u$ b1 G! [console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D85 g* G6 L; x& f

& H4 G  m/ ]1 F; ~7 {检查iban账号的有效性8 N! n; N  p5 P' Z
+ n% K0 Q5 E" c" v
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
6 V- y% A( y# y( O5 Y; ^$ D, e4 n. w: X  ]1 W1 ?
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
) ]) k9 [$ Z8 r
3 h0 ]5 P+ ?( y% f, sconsole.log(isValid) // true. B3 ^' u3 n- M$ y
# G! a9 R6 ]( }4 g" K9 D/ }
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK"). L2 j) t" T+ _) [( T4 y
5 h( R' ~4 p. T! V* L: S
console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5