Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

一杯浓咖啡
117 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号- C! s; o, f. g" y+ Z
4 {6 _) F2 z) W8 G7 ~5 D3 Z
iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:
& ?6 u# v0 i; N1 w& J$ m3 U) X8 O1 d  `. Y1 ~
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
/ m$ t3 M3 f' S  \9 m( K- [
$ n2 {" q! f! H7 j/ w5 E2 ^& aiban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:
. J* `) l' K5 b0 g. v% b# I2 z: |) |2 P# {' _, g
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
! [/ T; P, ~* \- c% ]! h
4 s9 X4 t/ I3 ^7 _. U错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
; C; x  a9 V0 o! D' c1 h; H' o5 |1 G& c7 g% D' E
基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码4 c6 |; x: W# Z: _7 H% x

1 k5 j) @8 S, x3 T3 L以太坊iban:新的国别码和BBAN编码方案) X: Z" k' Q! m# A
- _2 \/ B6 M$ e. u, d9 U
以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。
* h* u' S0 R/ s0 t4 {
* _4 g7 _( q) i9 u$ D' q- Sdirect编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。
8 b! Z5 ?' Y! g$ B" f
& r! V  T2 d# g  b: X) ~, _) V可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:+ o2 E" Y' @0 O8 b8 x
/ h7 b  Y! g- Y7 a* B
let myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
; W# |, g# g4 R" ]. I
' h5 ^; d2 A. ]& z( uconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS2 B# u( S0 P+ k1 q. _  G

% r/ a  d5 s7 pbasic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。
3 c% E2 Z4 Z4 V7 E) |' m$ y1 U2 D+ \9 o
indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:
6 r) r4 Y; a  Y0 l6 z
! U, l5 a- X# k" w/ V资产编号,由3个字母/数字组成( K7 c0 j% _8 ~7 ]- b$ F9 i( V& J
- C7 K& l& m# K% _6 O" c# |
机构编号,由4个字母/数字组成; c! ?  j% I5 m4 f" s7 Q" `

- q6 M& T+ z3 z; P机构内客户编号,由9个字母/数字组成) l, v+ d2 e6 _: S

% n$ I+ O: q9 F5 ~+ ]2 ^+ B例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:. B: Y; s3 ?0 e# h- r+ m" X

: X$ ^0 b& a; @3 jXE81ETHXREGGAVOFYORK3 x  n1 a4 \; w# t# K1 m
( c! a3 h, q) V% b* O
前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:* [1 M& z5 `7 o$ b

) c9 ^* F' a5 a. ]ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号+ a% ~& }9 [3 s& Y9 {% [

( y' ~  ~- a& R4 v, G& t1 RXREG:机构编号,XREG表示以太坊基本注册合约
- L. N+ \$ w0 S0 G3 S) f$ ?% c* z0 {
GAVOFYORK:机构内客户的编号( {# y- ~: |* k) {0 Y2 q' J0 e4 ]5 t
. v/ v. ^& w" w( O  X+ C* d7 `
iban账号与以太坊地址的转换9 f) \6 L1 ]# @" k
8 l; w( y1 B# y  b
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:) k! b5 E7 K1 f9 X5 R
2 q5 a' J, B7 w7 z
let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
! L# d4 i/ X' z) W* Y9 r
) [4 P: ^0 [9 i3 G4 m9 m) t, T# F+ zconsole.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8& O1 Z- s* _* H% \- V0 o+ x8 b# T) U

6 `- r7 ^5 W9 v/ B' O检查iban账号的有效性
* H. ?$ u0 f& l3 m" P) Z1 X! H1 g- H8 w7 Q! J& n4 F
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:4 X+ o0 ?, R+ x! g/ a5 y
9 A: A( M1 }+ W$ e6 F0 A0 \, J0 H
let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
9 u* `) s4 \( c4 d$ N1 d# @" f( C& [9 L# n4 p; l( b; g
console.log(isValid) // true& G7 n6 H3 ]5 E  `) B$ z
/ }8 J0 h' B! d; S) m: E
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
, p# v# u! ~8 N3 z* g7 z  J
* X2 N3 |; \& J  Bconsole.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5