Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

一杯浓咖啡
160 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号
# X& `2 ]( B1 P3 l# a5 c" @- ^! n, w) s( R0 {% y
iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
6 L2 A8 `& N7 P; \' p4 P, e0 ]
7 s3 k; j; F* [0 eXE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS" U  f, A9 k/ r& Q: _9 ]
" P" M' F% |5 v( E
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:' O  ^7 K# o; ^& h

+ A( ?6 Y5 O( R) H7 f  }. T国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
6 H$ b2 z1 T( H5 Z
6 H. D! i% t% ]% t+ c错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准4 k& x+ Z0 I6 V- i% {1 B: D3 B

3 E& o( j7 N# Q) c基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码
, V7 F( i; Z9 w2 y9 d
0 `6 }8 x& C  d1 p) V以太坊iban:新的国别码和BBAN编码方案  \$ m  L1 b6 r4 u2 l

) H9 Z9 j$ l1 s& ]: b以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
" O; Q$ R7 K* {/ f3 Z3 x
; L6 N0 |/ Q! r' u" P7 j' {/ M) I; `+ `direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。5 p2 e+ W6 D) T8 n- k' h! j: _
3 @  j  N2 Y. C5 k* g
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:
9 ]  ]! U1 o! E2 l/ z* I5 [% L1 c, x+ K+ |
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
& @0 ?" E8 h/ n6 N: b0 s% z% e2 k4 P" Y8 `1 B: n& {$ |
console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS$ ~" B! A; ?) o& f# }. B+ g1 F1 k& v" r8 ^
% a8 e! p8 k+ Y% u1 O$ y/ d
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。0 J0 N; c* [+ t

$ T7 }: k! T( ]( B- [' C5 rindrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:1 ^# I8 U* Q" I- m1 }7 W+ e
# T! ?6 u. ]& T6 ~
资产编号,由3个字母/数字组成( k" d3 M% i" @" ?) z* K
8 e4 k: w- n; y" G6 J# H
机构编号,由4个字母/数字组成$ e0 O7 b8 B# w5 s$ O6 O6 L9 a
! P8 p! s+ x- }' C
机构内客户编号,由9个字母/数字组成
3 q8 F6 ]& j7 \9 ~; _- o8 N
% `, `" b! k$ b" o' l例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
* X; x; f/ _% K6 I
- u# E2 {! V. }$ {XE81ETHXREGGAVOFYORK
6 K8 E: P6 g6 ^6 z! g* H0 }; k
3 |. _% r* w, ~5 ?前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:9 \5 _8 `  ^  p4 S# s, y' y0 s2 x% C9 C
% W4 {! G) B5 `' \, f: L6 T) m% C9 h
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号
; k2 k4 c* U: u9 N, K2 `* C% J* ]5 ~  z4 o" q. S6 n% Z
XREG:机构编号,XREG表示以太坊基本注册合约# F1 D1 W: X  c- U

2 s% V# J+ W+ I- s8 Z* q- }GAVOFYORK:机构内客户的编号
% C2 g5 d& R' c5 Y; I
/ V% C2 {' {6 }9 C$ v4 f$ }8 Liban账号与以太坊地址的转换
3 @0 L8 k2 g$ S/ L8 D
* K# J% l9 g; R! D8 }如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:3 o' k. I6 |/ D3 y
7 u  w# ]5 N) d/ L* B4 f& Y  |
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
' y) }, L  Z  k; K
$ ]$ N& N7 F; S" j! l9 v% bconsole.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D88 Z4 N0 U5 t5 l) i
0 v; ]- Q& m6 u7 {; q8 U
检查iban账号的有效性+ o9 {: o5 r& F: \6 z# f& K6 u

: Z! h+ D+ j( D% D8 siban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
9 r: \2 m2 y6 Z6 p8 s" I9 h" ?; i; `1 |
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
$ S3 P, @, x% Q! o# j5 a& ]
5 E' R' I4 x! K* A( ^console.log(isValid) // true
% B+ k' j0 i2 F3 c6 S0 x$ u# K; \- L; v0 E
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")- X) T7 L5 L! g" b/ _2 b

4 R- u. ^# T" L3 kconsole.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5