Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

太坊地址和iban地址之间的转换方法

一杯浓咖啡
154 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号
: g9 d6 {" R/ Y% j6 X% n0 C% ~2 g
3 h( {0 @, i" Z4 G/ y9 ]/ Giban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
  A7 d8 A+ [2 D6 C% P: J3 Z% U4 R, F
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
  V* a1 T5 h' }
8 g; }" g* x) J* _iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
, ]7 y9 |, F% E, U- F& U0 O( ^, i& V7 {: M; [
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
  q: M$ g% Z* f2 n0 w3 ~' N0 d( t% K1 P: _
错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准3 M% i# e$ M, `9 w$ ?
3 |6 O, B; g2 D9 ^/ F
基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码
, z: p1 ]% r3 c  y, d$ N9 w  X  |& l( _9 W7 K: a& S: n0 ^6 w2 D
以太坊iban:新的国别码和BBAN编码方案- `) W5 S% @1 B1 \' S* v

' @5 f2 h4 g' _9 t+ d5 H* b以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
9 ^8 V% A) E8 Q# N$ S* [/ Y2 k" e6 ?
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。) I3 x* y' Q5 |( M' E; i! A

2 E8 B+ B, z+ q可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:
. `. f. w* I  {8 s" X* q
* U% n) t8 O: _) L* H( R4 ylet myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
1 o& @: P7 _  O0 h# y9 e. E& H/ g" f( B* ]- @- }- w* h0 U
console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS# ]5 v% g& S: W5 l; ?0 `+ _

* v" G/ K8 @8 }8 g7 l; L- Gbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。
/ |1 i7 M2 C) o; P' }/ B
5 _& p, ~& O& E/ Kindrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:6 ?+ R- w% `! n  r

$ `, C0 D; _5 y资产编号,由3个字母/数字组成
3 i# ~4 [$ d  ^6 N: I
) j' U# q0 L8 `. i1 l机构编号,由4个字母/数字组成
/ E$ \1 M# q, ^, [+ H1 r
- b0 ]! E6 m8 F. ]% F机构内客户编号,由9个字母/数字组成: R/ D9 n) E) [% n- ?, [0 v

2 L! l6 ^! r+ ~例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:$ I1 i& I3 H5 \) D+ u
6 ^( \1 L$ Q  u/ u+ m
XE81ETHXREGGAVOFYORK8 |3 U+ v) ?' \% h+ G% J9 N# H

) ^$ _2 a" _2 L% ?1 M- |前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
; z- l/ R, M/ b% a0 ?1 Y$ M1 y! i; I5 x; h9 J2 S' x: k$ ~
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号  b0 W$ Y9 x+ ?3 Q, i1 S; a( X( K

, C  o; H+ u  H: g8 sXREG:机构编号,XREG表示以太坊基本注册合约
0 ]- v) x5 B3 u. m3 A5 Q$ R1 p6 r- w1 F! x: M4 K3 ?
GAVOFYORK:机构内客户的编号
1 n- Q7 H9 T5 A6 M1 b$ r, ^: E8 d" i& d. s1 y( A) `1 ?3 w3 X4 V
iban账号与以太坊地址的转换
+ _; \) f' p2 `( h1 T5 X- f: U- E6 J5 B6 d
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:  m9 b7 r4 P  J
1 g- t8 L( e, _' v( ?; C
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")6 f/ E. i4 |6 Q6 U" t# X

* }8 J8 l8 \; U. F$ Jconsole.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D87 ?. K  \+ Y6 h2 s" @2 ^6 M
& O$ l/ _* U- e/ c5 K' P) S
检查iban账号的有效性( x# a% R. Z  F* u4 M) p

+ X. _; a2 g" H/ A& X8 d( Biban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:" d, S; @, a! a3 G9 o

+ J7 F2 M% U' P; `let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK"): f$ {7 p; ~: l' l# S3 u

  T; x6 {+ a3 bconsole.log(isValid) // true
0 K- D* @  P) }5 B
8 E7 w+ D7 ^4 H1 Z. WisValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
3 l) s5 |; E9 s2 ]( Y3 F
+ B$ p/ J2 b3 [, j% O0 Iconsole.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5