Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号0 K* x4 i' d! w$ P* D

2 A2 E6 ?0 V' d. o) j. @iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
/ L' X, e1 r0 v' m7 W; [8 J6 E
" p, H6 h3 j6 BXE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS- f1 h. }6 T! P: G  B
. v) J: p- z& b8 k( Z4 S3 L
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
2 ~3 z3 z8 p" z( j8 F: N8 T; m( J. ]% p5 U" P) o; w
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
5 C6 j6 f' r2 t% }" |6 I: E( ]' b. K9 X
错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准4 r8 ~# [* J7 W* _& Y2 o# k; c1 J7 x4 o/ V

8 m5 @9 g: D& s$ `5 C基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码7 f" V7 f* t" U) E
  I' S+ z6 {: e: ~- Q6 f6 c$ p
以太坊iban:新的国别码和BBAN编码方案
8 K) |0 u$ r; W5 ]% g3 g( Q
! L4 b. @- v& y; G以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
% j# u4 X& ?0 o" J. n6 w
* Q! N/ E% p- I' ]8 u# Rdirect编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。2 o; {$ j' \% l9 [" }- [0 u
/ J( p6 f7 Q1 q% A9 f
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:" b+ [1 L2 P- q* ]

! M  i  ]: a% Q/ J  Olet myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')) I8 n" ^& [. k
+ S1 v4 Q4 P2 m0 o; L& D5 ~
console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
/ ]/ L$ a7 Z6 l+ ^; s/ a% F2 \5 y5 k% l3 q: R
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。7 v' e. D! e$ B2 Y$ L, P

+ s2 K; u. ?# ?5 E: e& \indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:" `1 n- h7 t0 l5 k, f+ f0 m/ D
+ y9 l3 s$ U: @$ s  e: b
资产编号,由3个字母/数字组成
$ N& s. V) u* ?/ q& h$ x1 I* @) X# G- w7 g
机构编号,由4个字母/数字组成
( z/ ]( ]9 @& G
8 m# s" B5 d% U; v9 G5 k& U机构内客户编号,由9个字母/数字组成
; K% G# m' H! ]( c
  @; j* c, T1 f  N. }/ U. |例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:" P2 `' ^" r) U8 ?/ O$ Q: k# o

: j; |- l6 X  hXE81ETHXREGGAVOFYORK
& d: N/ M6 j4 T  _3 v
* b# P6 v. V/ ~  Q1 n. P' W1 y# s前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
6 w. g& x* L8 n  k- [# i& [
; r/ {. |- O0 L  }7 k# GETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号
$ q% e" M' d, M% h7 ?0 W) x' l  K0 o6 @
XREG:机构编号,XREG表示以太坊基本注册合约
# w! x/ T( b9 @- H, o4 r7 a& K" j0 B9 C5 x5 C
GAVOFYORK:机构内客户的编号
( K( A; r1 G6 a- F! t3 o7 E% p" z
iban账号与以太坊地址的转换
3 G/ X- H( R5 u/ j
  i( _* ]' a9 l% n2 X6 H如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
2 T# l& A9 o, \$ [( v
; p' a4 j, c  Z* |let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
7 f' q- X8 N3 _1 P9 W* T1 h) e) k& ]9 x7 t' c1 x$ f' F) v- `
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8- j7 y: t" ?  X9 s1 |

1 _' c: x& k! T% r2 \) k3 @检查iban账号的有效性
5 d  k* d2 b1 s, {* m) O0 e3 I. ?
2 d: o! ?6 P! A3 @iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
" b  F( J! \2 U2 D4 N8 p( G
1 B; u3 i2 ]+ I. D% o) Rlet isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK"), S5 C- y& M/ B* Q- \, V1 J

5 ~3 o8 X" @# O) T9 gconsole.log(isValid) // true
2 |# X3 _+ U) K. z6 V& L! G
# p" ~" P! ~6 T5 Z- RisValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
- i. r6 s, y3 X6 K- I- ~; l7 M+ v- F  E& P
console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5