Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

一杯浓咖啡
153 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号
' Q' J) I' z( T: ?8 y0 M- N- z
0 x1 T, F) M( V1 h$ V+ eiban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
' n* G5 U. {; K$ @) ]7 `+ c, L. c; {
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS, F/ |0 ]* R) b. s

4 ^% E& f1 |2 E* `7 siban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:$ a* n. Q. `% T$ B
7 a8 X/ B- z4 R( L9 X9 ?: g- D, ^
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
  ~6 k# d0 ]9 c  `- [" [. T) O
( I' o% S7 o$ f- Y+ C: a' Z) ]7 B错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准/ H; |' ~1 K$ _3 p1 v* A: n# {$ j/ H

: M5 x8 p- f) U8 ~基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码5 y( y$ v. Q% P3 V, i5 S
& w! x9 N! `3 P5 u6 ~
以太坊iban:新的国别码和BBAN编码方案
5 T& e5 j! t- w9 a
! u% _/ e# v" @; g2 ?/ R5 m4 J# e" {以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。7 M& E: \! y1 x* a6 Z1 F2 m+ f  S, }

1 J$ B, R" x; q- E" J* Sdirect编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。" J0 }2 K, S3 C

1 P" a# N0 s  ~8 k4 E% a3 |可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:
% k# O/ X5 e' Q2 \7 N* \. q8 I
* R( v  d0 q4 A8 d( m8 Slet myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')# }: D* j$ g; V
) v8 m! Z' r3 c
console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS$ m( [0 g( x$ U: O7 s  B

6 u. \# o7 m+ d3 K1 m3 j0 zbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。) N" I0 o6 b* }: |
$ T' F! I. Q; Y; s. R
indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:
+ C$ ?. r. d* N# k: w; @' o* P
  W6 `7 g& J, K/ ]5 `% d资产编号,由3个字母/数字组成
5 i' [2 N! F8 W& E
, {- t( L8 |! h6 q' U$ Q7 j3 x机构编号,由4个字母/数字组成
) c9 A, Q5 t$ r& t0 ?+ w: z
0 w' T6 g! E2 v机构内客户编号,由9个字母/数字组成. P4 W( ~0 t0 m& a" D) q

  O( a3 P1 n7 w4 \: u5 V例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:7 X5 U# f* B3 V$ h+ B9 @
4 @) E" U, d# q6 Z
XE81ETHXREGGAVOFYORK
: m" V( b& c4 [( h: W; F1 J6 ^: I. o* V. X: M* Z
前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
# G' ?* l, |; b5 c8 e# L( T" ]7 R) l/ [) K4 c1 M, `# p, Q% r5 l
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号  f9 s4 d0 e. ]4 [: f! V

; Y/ k# N# {0 z" U8 h1 vXREG:机构编号,XREG表示以太坊基本注册合约
8 R! i; I/ H! v, F" I! a) ?
. Z" K" R6 p* aGAVOFYORK:机构内客户的编号
5 Z& k/ _  b" E  Y: x* m
/ [. A8 {$ N9 x( H7 [! w1 wiban账号与以太坊地址的转换
0 w4 j% [6 D9 G3 m, q" X" N& h/ R) c0 ]2 T1 t
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
( M/ |- n" m" g* Q3 p& c
: k, c7 u1 r4 @4 ?3 @let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
1 W2 _1 Y) M" J' F4 K5 @( R/ ~, `$ N8 n" M
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D83 l/ B# H% P; f6 e7 O- K

4 I  U+ \$ J) F; d9 G3 U检查iban账号的有效性
% G( V1 q' N5 ]: I
3 r$ e& |" {& p/ R& W1 Yiban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
5 t7 j/ \4 G( _$ r9 E& S# F
; a+ i7 Q: S# O% vlet isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
- m/ U# Q* |; m/ G' W; \
7 ^7 z0 c. W  c# l: Sconsole.log(isValid) // true0 c# M, G0 K! F9 E/ t( P
! o& W+ y9 D  x- e! r0 q9 Z8 m
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
; F8 Z/ K$ S/ P  ^. G& ?/ M+ E% j3 B! V8 U! G1 _) q. L
console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5