Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

一杯浓咖啡
152 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号! f& m; x1 X6 R  @6 C1 b( U

4 Y$ `. q1 T; k! j: o4 F" qiban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:, W, @6 g. [+ p2 K

) v% ?0 o( K6 l6 C8 z4 A+ \XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
+ m5 h$ r* [9 {2 [, x1 v/ f8 n6 h, @, u+ d' Q  R
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
( K' `5 y. H. b2 }6 x* l! ?
4 Z# z9 h4 m. {国别码,用来标识国家,遵循ISO3166-1 alpha-2标准/ g: ]' l, s" Y6 o' L) q
* G. X& ?) @2 R' f7 k
错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准. h. t9 R& K" @
' F+ n5 E4 o/ ]& L% h
基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码0 l$ a1 m, d6 r8 H& P+ u2 A" j5 J4 E
! D0 ?& e% Y8 P( W- P! ~
以太坊iban:新的国别码和BBAN编码方案
( s+ b; B3 b3 ~( \: m* z) {7 r4 ~
以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。; n, I/ {$ X5 z& \- U8 m! a, I
3 Y- v6 [1 S8 a) O. |+ I, p; a
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。
4 g$ W" w$ ~, h8 P" Q1 h3 i
+ f( ]& R8 I1 _# ^) R5 V可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:6 R6 J2 A- d/ P1 `
+ Z8 ]" u: l5 E, q% O, b
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')6 g9 w' s$ @& \9 F+ Y
4 t  h& B% u3 e2 a% c9 h+ i
console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS1 c* ]" @6 V& k. m# z: r
# W1 c" i# C  P- `! W. L
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。5 a8 ^( y. A- |% n  I9 B  i

: ]3 V$ M" |5 [* qindrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:) L- ]9 p7 v" y8 U6 ~2 K0 e

  G% A: t' \8 e+ A. I# @资产编号,由3个字母/数字组成1 B) A8 M) a$ M  {0 V
; M6 m* w( Y- N- \8 k9 c
机构编号,由4个字母/数字组成
  E! N# N( z$ C! P* f) d
6 e, Z3 o2 z' k' `. o5 T* Q6 q, }机构内客户编号,由9个字母/数字组成
  C' c7 a" Q6 c2 s* h: z4 f9 V: \+ ]: Z) w- c+ e1 f2 N7 a, I
例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
2 {+ e( Y: T1 y7 b( h
8 s! u' B- N0 c  S& e! pXE81ETHXREGGAVOFYORK( Y" i, `0 v" ~5 @
+ _1 M9 _% x7 S6 s
前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
2 n1 c. x2 ]) s7 X6 m' A5 i! C. ^0 ^! K/ z4 ]( f: o
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号$ J3 H) s5 o5 j- m

' q3 b7 y) C3 t2 HXREG:机构编号,XREG表示以太坊基本注册合约
4 d( N* ^( z* _! b6 Z2 h/ K4 A
GAVOFYORK:机构内客户的编号! y: K5 ]7 |4 e

0 R+ m* [3 b9 N8 a" g- D% f4 Aiban账号与以太坊地址的转换/ ]& n/ C! _7 p  s
% _! q* V7 P+ b3 `4 m
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
* K1 I* F  P/ _  N7 I* P* h: C0 i" m; E) x( A0 c$ z
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")/ Y% s; u8 \1 Q1 B; o

, s. \, ?/ V; y6 D/ j* q' U% [console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
; G  h, a% b, Y9 I: K5 x! o* ]1 o; `  X9 D9 x, p
检查iban账号的有效性( |: Z* E: x' Y- D9 S9 f4 \

2 g" k& u1 G! g0 w; Liban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
8 f/ ^1 T1 R$ y2 c& m; L$ j: B2 L0 f
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
& P0 W  J9 o/ _; v4 S# S. O) Z
console.log(isValid) // true9 G+ O$ ]; @6 A& x

) B, Y" b. s2 R5 _( _; {5 v$ p& ^isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")0 Q' \6 N3 `5 H7 R3 N

' r$ J/ t' {: l* {; v; f7 econsole.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5