2014-02-25 4 views
1

node.js javascript를 사용하여 dogecoin 주소의 유효성을 검사하려고합니다.nodejs의 Dogecoin 주소 유효성 검사

하지만 아직 알고리즘을 이해하려고합니다.

내 현재 Node.js를 버전 내가 (내가 틀렸다면 정정 해줘) 주소 도지 코인 자사가 비트 코인 주소 다르지 않습니다 이해할 수 있었는지에서 v0.10.22

입니다.

그래서 내가

  • 가의 비교를 (SHA256 두 번) 다음

    1. Base58를 수행 주소를 디코딩 된 주소의 SHA256의 반환 된 결과의
    2. 계산 SHA256를 해독하려고 SHA256의 처음 4 바이트

    때 .. 디코딩 된 주소 (내가 여기에 실수를하고 있다고 생각)의 마지막 4 바이트 결과 i는 base58 내가 디코딩 값에서 버퍼를 생성 할 때 결과가 올바른 디코딩 스크립트이 쓰기 시도는 값 하지이 정확한지

    var decodedHex = new Buffer(decodedBase58Result,'hex')

    위 발생 것을 가리키는 에러 발생 오류, 만약 내가 decodedBase58Result.toString() 스크립트를 계속하지만 예상 된 결과를 반환하지 않습니다 문자열 stringify 것입니다.

    그래서 해결책이 있습니까? 써드 파티 API에 의존하지 않고 호출


    업데이트 : 내가 많이 연구되고 난 코드의 작은 조각으로, 클라이언트 측 검증을 발견 내가 NPM 패키지를 만든

    • NPM package
    • 제 3 자 API/서비스 호출에 의존하지 않고 주소의 유효성을 확인
    • GitHub

    .

  • +0

    유효한 dogecoin 주소의 예를 보여줄 수 있습니까? – alex

    +0

    @alex an dogecoin 주소'DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH'와 그 base58 디코딩 된 값'5.868133917508844e + 59' – Gntem

    +0

    [node-dogecoin] (https://www.npmjs.org/package/node-dogecoin)은'validateaddress' 명령을 노출합니다. 당신은 그것을 사용할 수 있습니다, 비록 그것이 "써드 파티 api 호출"로 간주하는지 모르겠습니다. –

    답변

    1

    decodedBase58ResultDBKh7QAP9gkXncVK32jtfae4QXChPwsyKH1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274이됩니다. ...9a614274 - -

    crypto.createHash('sha256').update(crypto.createHash('sha256').update((new Buffer('1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274', 'hex')).slice(0,21)).digest('buffer')).digest('buffer') 
    <SlowBuffer 9a 61 42 74 97 0b 64 ae 2e 7f d6 f8 b1 81 90 12 f3 5e 3a 0b a1 f4 f2 c2 47 fe 20 7e 4f a1 27 25> 
    

    은 주소에서 마지막 4 바이트 비교 결과 해시 - 9a614274..., 당신은 일치를 얻을 경우, 주소가 유효합니다.

    아니요, 비트 코인과 동일합니다. 코드 샘플은 here입니다.

    5.868133917508844e+59은 정수로 디코딩 된 주소입니다. 문제는 자바 스크립트가 정수를 나타내는 데 52 비트를 사용하지만 200 비트 주소가 있다는 것입니다. 따라서 사용중인 디코더가 여기에서 작동하지 않습니다.

    +0

    unfornaturally이 base58 디코딩을 제대로 수행하기 위해 node.js에 스크립트 나 모듈이 없습니다.하지만 이제는이를 달성하기 위해 npm의 'big-integer'와 같은 모듈을 사용하여 개념을 어렵지 않게 이해합니다. 파이썬 예제는 너무 단순 해 보입니다. 어쨌든 나는 bash 예제를 둘러싼 무언가를 포장 할 것입니다. – Gntem

    4

    이 작업을 수행하려면 모듈 (coinstring)을 작성했습니다.그것은 당신이 사용할 수있는 많은 구성 요소를 가지고 CryptoCoinJS 프로젝트의 일부입니다. 그것은 사용하기 매우 간단합니다

    npm install --save [email protected] 
    

    예 :

    이뿐만 아니라 브라우저에서 작동
    var coinstring = require('coinstring'); 
    
    //0x1E => for public Dogecoin addresses 
    var isValid = coinstring.validate(0x1E, 'DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH'); 
    console.log(isValid); // => true 
    

    . 희망이 도움이됩니다.

    +0

    매우 흥미 롭습니다. – Gntem

    관련 문제