Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

一杯浓咖啡
184 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号
. r  h5 u2 H9 h
1 U: l- Q. O+ ?) e8 Diban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:. X6 M. E9 Q% M/ T$ j6 W! A( [, h
" x9 h; p: ^$ ~; I
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS) ^4 `8 f0 Q  M7 o3 g  t( c% X* a4 Y
  S- r% W1 ]5 }; _" D2 H/ s) M
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
& S- N1 Y9 P* E& h  b! R7 N/ ]- i* m6 Q( B* w) M5 L8 b
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
, H1 d( y8 k# I5 k+ B( f' `: P* S2 m: G- w; v$ I
错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准3 Y# i, N2 v/ Z. T0 i

( Z" u' _3 ]6 U# a9 a6 Q基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码! m) }6 n6 @" X' ~
) D3 v2 Q+ f1 S0 P5 ^
以太坊iban:新的国别码和BBAN编码方案+ k1 i- u1 Z: i# C$ y6 c$ w1 G

/ F) ?$ W* d: \# h( P以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
+ U) I- o, A$ U2 y+ u( D5 L( }; p) I" G/ W* H3 m/ m8 Y
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。* z' f. b* y- u5 D' X6 b! }! ]
: ]3 |& D- {& ~" X2 N* H' K4 Q
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:
# x4 ?% I6 |3 L  D3 B+ o4 g8 U. C; Z! j2 C
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8'), i( B, K2 s, l8 f! t7 ]0 p1 G

$ q& U/ d3 T) u% a( T8 Aconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
6 f( f4 p+ D6 m# m. T# R2 w- Q" B; ^" \5 a% b3 Y
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。5 C% `8 E$ R2 h% n  }' ^& f" y

( v) r6 P; C7 A% ~; oindrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:0 B* c/ U  w, R' |/ d3 O
  n' `1 R  y) Z9 G2 C
资产编号,由3个字母/数字组成
, k+ K3 f- `( ?8 o1 j% `3 ]4 i1 y% M6 J: @% H8 I2 w* f
机构编号,由4个字母/数字组成( e/ N- Q( y+ J& m: X6 S& i# j. @
+ G; `5 }% g2 E( L0 _
机构内客户编号,由9个字母/数字组成
/ w, J2 D! x) \; n% J& z& k/ E* C0 D' r$ `7 V$ z1 v
例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:& f: |* v1 _- R" Z! b! s0 l  e
9 g3 A; V! [! S2 N9 {. T1 o, j
XE81ETHXREGGAVOFYORK
/ z3 o9 ], a- {, }* E% _8 \8 [
. W+ ]/ W$ T7 u$ t- t4 F前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:+ U- T* N1 d0 T
: l0 E( w. |( m& u+ G& O4 L
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号
2 E! d$ j' x# u" F, e
4 t3 s8 E9 n# V; I) c0 JXREG:机构编号,XREG表示以太坊基本注册合约  v7 h$ j8 H% k* A5 |- Z

& H. R2 l) M) n8 b: HGAVOFYORK:机构内客户的编号
& i' Y1 X) k4 c: U# @/ Y' F
- V: X" P& a7 B9 l8 n$ G- ]iban账号与以太坊地址的转换
# n) N) {) K( @5 Z( H3 i+ ]* V! M8 P# `. B
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
9 u5 n; ~, \# v1 x, A! V! A
! E- ~. p" R9 S# s$ I' w# i; M2 ulet myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
+ L! d; K; [& I! X/ K6 `* Y( o$ P$ X9 M
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
/ [. ^! L  R3 M
5 X5 N$ |, H7 o1 _# c' k检查iban账号的有效性
( [3 `$ j; ~: n
9 E$ J2 m0 k  N9 E4 ^# Z$ ]! qiban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
+ _6 w& i8 Z$ R" ?- f0 x- w5 p* K7 X2 G
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")( D) d+ q# r( Q0 J9 m; g: C" T* K
+ I3 v; B+ h: V! Q' K
console.log(isValid) // true% a7 r* _9 M2 z- q  E" b! x$ k
* P9 F9 ]3 E7 c2 R
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
+ ]$ D( s4 W) y9 s' ~5 R* T; X9 I7 w8 t- y1 w# h% s! a  c, n
console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5