如何验证neo 地址有效性

☆KeyLove! 8月前 333

如题 

有一个地址,如何验证它的有效性呢.我了解到,地址不是随便打出来就是合法的.是可以验证的

代码上有验证的逻辑,能否详细解释下这些加密逻辑?

//  代码有点长,但做了点排版

let address="";

var array: Uint8Array = Neo.Cryptography.Base58.decode();


var hexstr = array.toHexString();


var salt = array.subarray(0, 1);

var hash = array.subarray(1, 1 + 20);

var check = array.subarray(21, 21 + 4);


var checkdata = array.subarray(0, 21);

var hashd = Neo.Cryptography.Sha256.computeHash(checkdata);

hashd = Neo.Cryptography.Sha256.computeHash(hashd);

var hashd = hashd.slice(0, 4);

var checked = new Uint8Array(hashd);


var error = false;

for (var i = 0; i < 4; i++) {

    if (checked[i] != check[i]) { 

        error = true;

        break;

    }

}


if (error) {

    var newarray = new Uint8Array(25);

    for (var i = 0; i < 25; i++) {

        if (i < 21) {

            newarray[i] = array[i];

        }

        else {

            newarray[i] = checked[i - 21];

        }

    }

    var newaddr = Neo.Cryptography.Base58.encode(newarray);

    return false;

}

else {

     return true;

}


最新回复 (2)
全部楼主
  • 0 2
    地址base58解译之后有25字节长,后4位为验证位,前21位为数据。前21位sha256两次之后取前四位和验证位比较。如果一样就是合法地址。
  • ☆KeyLove! 8月前
    0 3
    咦~這裏有只豬 地址base58解译之后有25字节长,后4位为验证位,前21位为数据。前21位sha256两次之后取前四位和验证位比较。如果一样就是合法地址。
    感谢
    我再看下代码根据这个逻辑
返回