Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号
: ~' }5 \9 K; M' N
' w5 L6 L# P; P9 e" Yiban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:7 o$ M  G: C8 M7 Z" j

3 k  h7 Y* W3 V1 d- yXE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
9 Q8 K/ ?( F) P7 A' l7 A% L% a
) H6 J7 u, t% K' Y1 J( j& ?iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
; A6 b2 _. u3 X$ T4 {  B% ^  w0 V2 \: C* i  P  y* G
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
. f1 a; u+ f8 {. p4 L  t/ N
# E9 P5 c( c( {. e1 O错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准0 T, C/ X& G% V* J" _7 O
" Q/ D& T) E* \6 T
基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码+ R$ I  g+ B7 m. d* F3 U2 `
2 c7 h4 D- z9 d/ E; @7 M/ }3 `7 S
以太坊iban:新的国别码和BBAN编码方案
5 I( b9 O* P- }
: h, l$ D( B4 ]+ m( p以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
: ^3 G5 [7 o, \7 H" c) h# T7 ^, `3 q$ D; q3 c3 b, E8 F/ N3 U0 U
direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。" B3 ]1 d3 b- D, s5 S
8 X$ I' @( F4 X
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:0 A9 p, S! D" z+ o3 w
- r2 E/ z- q0 j+ ]6 d% J" o2 ?* t; H
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')8 ?, J1 O$ E! Q) P9 O: [; n

# Y6 {0 ?# D. C8 d( Y( K5 lconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
! [; k  j; R. u1 n8 N0 A/ {( ^8 ~! p# V1 c% F
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。
$ \( G/ \' n0 l5 v; V  J  {% l' b, d* ~. r- h% S
indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:# c. B6 R) `5 J
! N- `4 d, I0 D' ]3 [$ z
资产编号,由3个字母/数字组成
& d6 d( Q+ R! V' Y& H% J  e+ j3 h% v% z" u! |% }- @4 h9 @
机构编号,由4个字母/数字组成0 J1 ?( D: J1 a; g' o* [& j1 o
9 v! W% A* r1 x7 G: ^
机构内客户编号,由9个字母/数字组成- `9 u7 `( e, j  w5 f' I

: Z; t0 X  a5 S% M# J( P+ J例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:. ~4 W7 T! l3 B# G% g
: e/ @9 Z1 Z5 ]3 d. ]1 a
XE81ETHXREGGAVOFYORK& k2 J1 k6 o( q# A: Q$ [
* ]' T& s' I3 I9 R) M
前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
. q( n9 b1 l4 D- z+ ^( H7 j2 E5 K( |6 P- I- l' G, b2 g& b, a
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号# H% ~' D5 T& s  t' C
; V' v* c, P- d( G  Q
XREG:机构编号,XREG表示以太坊基本注册合约
) }1 e+ Z7 K/ ~$ I/ K! W9 Q9 V  ]
5 X5 L8 a9 u! TGAVOFYORK:机构内客户的编号! }, A; x, O7 C

+ C2 `  x( L1 [9 b0 Y# Giban账号与以太坊地址的转换
$ d. S, j- V$ @2 S. s0 x0 o3 K
0 q0 T# z8 H- L8 [# [' {0 z$ z5 t如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:3 w! y; C8 b% R! |, A3 K+ u! A

; H, Q+ K. f; glet myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
! }1 u! y& l, g- D/ `( e+ I  G& U. B, H" o, k
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
' K5 v- p- |& T3 w
+ ]% x9 i* P) b检查iban账号的有效性3 O1 t$ A# ?: Z# W/ }- p+ x# N

5 z3 a3 u! w& t5 D6 {iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
! F6 A% K8 a9 {2 P+ D' h3 \
3 A% E: U4 G* ?; Y! A! v) |let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")$ L9 r; @; t3 C+ e' r3 X

: [" Q* l$ v& J* a+ ~$ z9 A  V" Tconsole.log(isValid) // true
% V/ y2 p" O3 [
8 f# ^& V' N+ z  Z5 eisValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")' _+ b' L  n9 @/ O2 W% c
5 U; ]  K" S& }" Y
console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5