Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

一杯浓咖啡
123 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号9 |' q; D9 P: T
6 B" U5 `9 w( Q8 n0 E
iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:1 B7 J1 c4 b; l* j4 N8 i( {
' n8 ]2 X4 n5 Y5 Y7 K/ I* ?( c
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
2 B+ Q* `7 J5 Z6 L* G; m) r7 C. G6 l, Q5 f
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
6 b; N: A9 ]4 d4 x/ r2 I# Q4 F" N3 f- Z5 {
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
+ T/ T# K# a2 \, x& ^
2 o0 ?% A: r; F, L错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
$ T$ d# R% m: ~! d$ p; Q: U2 y# ^7 E) L/ g# b1 _( Y3 i
基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码
) U; ~/ g& }& a7 R8 `) A! N2 l4 w( f1 n; W( L
以太坊iban:新的国别码和BBAN编码方案
( j5 m/ ?- w/ L: g' }$ S3 l3 B* U3 L2 G" r8 s
以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
  {, d7 B, C' w/ Y. M
4 [3 o' U1 t1 r& I" t% T, P/ m7 z* udirect编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。0 f5 R  [( L  ^4 y+ k
! v) J! G7 [8 o3 w8 l2 A
可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:  o6 ?7 w8 Z! q/ S; ?8 f

* s5 H, W$ g+ F6 w* a) s6 clet myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')( G' q: I6 ^, p4 T

- N% ~* H) b6 }, N- C' `" l4 Dconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS" u' d+ g8 j& `/ @. c2 [3 q7 p( q

) Q7 T. ^* a- c6 Hbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。
. B5 @, l9 B# W; a4 {- e
1 S% {9 F8 X# W3 }indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:  L$ f+ {" F7 B4 |' [6 P
+ ]$ l: N/ M7 p7 }: ~6 r
资产编号,由3个字母/数字组成* K% U4 [+ O+ x+ A
8 A6 ^: u0 K% W* l* }
机构编号,由4个字母/数字组成
9 a$ n& g2 w2 j" N" X. x. p  \0 Q2 }  h1 K* z
机构内客户编号,由9个字母/数字组成; \' l+ u# h( ~1 {

" d" s3 C1 i6 @. o. U# X' b例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:- X9 `! {0 D6 [  v

: D2 z- |5 h; r9 C$ ~; I) R* WXE81ETHXREGGAVOFYORK& l, p1 M$ |3 A3 t

6 n# F& x' a8 m5 G" L! A前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:
) \1 b6 m( X2 c0 o% v9 i9 m) b' Z$ `5 U) B& J# F; G
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号+ ?0 R. j7 _; t- q  y
" W$ ]* D' K: T' M8 G" w  d/ h8 Z
XREG:机构编号,XREG表示以太坊基本注册合约
9 n& S& s- r; {2 z5 f) w. A! R) L) c! j% J) j! B' n& W) \" ~
GAVOFYORK:机构内客户的编号4 D, Q3 _1 i* u! {- J" J1 M
+ B# u* g' M+ }) |
iban账号与以太坊地址的转换+ M- e+ B. I% a' }; X7 w0 C( N6 b& C8 c' d
% h6 P7 D$ a2 I3 ]* I0 Y
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:
% P' T1 ?$ C0 o
5 B0 x, g3 M! d  A# v% nlet myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
9 J) X# e- l  q9 }2 L" ^0 S7 N; X4 {9 ^6 Y) P+ ]& A0 Z
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8; y; x, ?* _/ \

% _6 o/ v- k+ h检查iban账号的有效性
. J9 |. d% h5 ~. w! g: t/ N  u0 h5 N9 b+ ~1 N- e7 Z) i
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:* z3 b# s5 B7 S! T2 c
, i2 g- r( U( {1 E' Q
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")& a! }! Q& m- E

+ X% v+ L& \# Z" Vconsole.log(isValid) // true
; \3 U/ x$ r0 G7 B3 P6 L& A* X" v& w8 g2 }9 q8 L6 k
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
/ T) y3 v# C! o; s  G& y# g* C& k0 S! v
console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5