Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

一杯浓咖啡
183 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号' ^0 ^. X- s1 u6 Y# Y* j% A. q
. V0 \( B; |( s% o" K
iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:9 Y2 b; |4 ?" k7 h- }* d
$ R* e5 ~+ S- u0 J! s1 v' z
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS) P" ]% `# `9 W% t: [
* a* e7 ]& v# J2 C
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:! r5 b& R6 |: `0 R( V6 f% w0 e
1 o: @- Y+ g, c: ^3 |
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
) `' Z7 v! d9 E# N6 R8 y. ^8 H$ u/ z2 o7 `3 s- F- m
错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
5 W% `; T9 L* u8 F- ~% K' V: Z2 Z- Z6 ?  m4 t9 b! K2 Y; J6 v' A* E
基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码) P" }0 |3 p6 {: a/ q
, ^; g, L  o( V! Q3 R2 a6 I5 Y
以太坊iban:新的国别码和BBAN编码方案
1 H" F  k' ^2 b
4 T2 ~' p0 k) u1 i& O以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。: w, A6 S7 c' @7 H8 f, \

- ?  G% M+ x# f; Pdirect编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。
' J/ V( X3 U1 a/ C1 X8 g% j( s  H0 h3 x8 x- `: \
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:: l3 Q2 {, C% _' Q" b& _7 g- K
7 a, P* c5 ?' W& V4 E" z5 ~
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
: l  u2 p( \5 \3 b, R: a5 k; e' A! k9 o
console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS1 G; D4 x( v( f" N( m$ K) y; B& w

5 l9 ^# T) p& Wbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。
  r' a2 x. G- ]' J9 m6 t% X5 A' k5 ~1 t3 u5 @8 D
indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:
' i2 z: B- n) g' a$ N0 {- a( p/ {8 u8 M, `
资产编号,由3个字母/数字组成
1 x3 t0 p+ Q4 n, }" N
5 R4 D1 `$ ^% s8 ~8 K& g机构编号,由4个字母/数字组成6 h6 B: z& D; A  F% I
1 p6 |3 N; F! W& F* g7 h
机构内客户编号,由9个字母/数字组成# u6 S2 J5 B$ Z5 R

' b% b# |% X6 B! T" H例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
/ ]3 ?( J0 M+ {* Q) a1 U% ]: T0 t
XE81ETHXREGGAVOFYORK
) m1 [# @0 c7 E/ F% \
5 E5 D: ~" m8 n3 V前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
) x3 J% ]; f4 l4 [& H1 O1 A" q' F  i1 u9 d
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号4 T; n. a2 ]# W& R5 q
0 k& N, P- }2 K+ b+ _' s
XREG:机构编号,XREG表示以太坊基本注册合约
$ k; y' L' d0 H" \- e
( m! s$ v( O/ S: D: gGAVOFYORK:机构内客户的编号
2 j! b7 c4 A7 m' |- I4 {. F! A0 |
2 @) n+ d( F% ^3 s8 Jiban账号与以太坊地址的转换
. H1 {1 X. S1 L  J  Q* j1 \. e) h% m9 }6 S( G& U- A
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
- O) M# h9 `- J9 m; R% H0 ?( }
( X8 _8 V% |4 T0 A& L! Klet myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS"): F  I3 m6 e6 N( b/ B# S1 m3 q6 q

: p7 d6 }" `2 Q, K. Z6 X% ]" Gconsole.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
) F- e0 M8 z; [: q9 B/ @" x- o
# ~& b+ l' d8 R检查iban账号的有效性8 I$ F* g! O8 o3 U% |, ?
+ P; L0 ]$ `% ^& C! n) c
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
7 r. V7 n; h  W1 q* A" Q% s' e- ?* _& y: T, f3 w
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")7 w* K7 x9 g  \6 v9 ?! O
& m) o1 v- z" y8 Z/ |( r
console.log(isValid) // true
1 B# P" m2 E& k; ?0 s* b; Z# T: i$ N9 w+ ]; a4 ]
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
- q  ]4 C7 X7 U! D/ w
8 ?  |! D* P8 ~( M2 n3 y' v! Q! uconsole.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5