BitcoinJS (bitcoinjs-lib)
node.js 및 브라우저를 위한 순수 JavaScript 비트코인 라이브러리로, 1,500만 명 이상의 지갑 사용자가 사용 중인 것으로 추정되며 현재 생산 중인 거의 모든 비트코인 웹 지갑의 백본입니다.
특징
- Clean: 순수한 JavaScript, 간결한 코드, 읽기 쉽습니다.
- Tested: 적용 범위 > 90%, 타사 통합 테스트.
- Careful: 소규모 집중 풀 요청을 위한 2인 승인 프로세스입니다.
- Compatible: Node.js 및 모든 최신 브라우저에서 작동합니다.
- Powerful: 다중 서명, HD 지갑과 같은 고급 기능을 지원합니다.
- Secure: 강력한 난수 생성, PGP 서명 릴리스, 신뢰할 수 있는 개발자.
- Principled: RNG가 포함된 브라우저는 지원되지 않습니다(IE < 11).
- Standardized: 노드 커뮤니티 코딩 스타일, Browserify, 노드의 stdlib 및 버퍼.
- Fast: 최적화된 코드, 성능을 위해 바이트 배열 대신 형식화된 배열을 사용합니다.
- 실험 친화적: 비트코인 메인넷 및 테스트넷 지원.
- 알트코인 지원: 비트코인 파생 암호화폐(예: Dogecoin)로 작업할 수 있습니다.
이것을 프로덕션에 사용해야 합니까?
프로덕션에서 이 라이브러리의 master 브랜치를 사용하려는 경우 중지하십시오 . Master는 stable이 아니며 개발 브랜치이므로 태그가 지정된 릴리스만 stable로 분류될 수 있습니다 .
설치
1npm install bitcoinjs-lib
설정
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
browserify 사용 방법에 익숙하신 경우 이를 무시하고 정상적으로 진행하세요. 이러한 단계는 단지 권고사항일 뿐이며 귀하의 애플리케이션에 적합하지 않을 수 있습니다.
이 단계에서는 Browserify가 설치되어 있다고 가정합니다.
프로젝트에 대한 index.js
파일을 만듭니다.
1
2
3
4
5
6
7
8
9
10let bitcoin = require('bitcoinjs-lib')
// your code here
function myFunction () {
return bitcoin.ECPair.makeRandom().toWIF()
}
module.exports = {
myFunction
}
이제 브라우저용으로 컴파일하려면 다음을 수행하십시오.
1browserify index.js --standalone foo > app.js
이제 새로운 Bitcoin 개인 키를 생성 <script src="app.js" />
하여 웹 페이지에 넣을 수 있습니다 .foo.myFunction
참고 : 자바스크립트를 흉하게 만드는 경우 다음 변수 이름을 맹글링에서 제외해야 합니다: BigInteger
, ECPair
, 이는 typeforcePoint
에서 사용되는 function-name-duck-typing 때문입니다 .
예:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
참고 : 이 라이브러리는 Node LTS 기능을 추적합니다. 엄격한 ES5가 필요한 경우 단계 --transform babelify
와 함께 사용하세요 browserify
(사전 설정 사용 es2015
).
참고 : 이 라이브러리가 iOS 10 장치에서 실행될 것으로 예상하는 경우 buffer@5.0.5 이상을 사용하고 있는지 확인하세요.
Typescript or VSCode users
^3.0.0
Typescript에 대한 유형 선언은 라이브러리 버전에 사용할 수 있습니다 .
1npm install @types/bitcoinjs-lib
bitcoinjs-lib
이제 TypeScript 호환 라이브러리로 사용할 수 있습니다 .
1import { HDNode, Transaction } from 'bitcoinjs-lib'
VSCode(및 기타 편집기)의 경우 Intellisense가 해당 정보를 사용하여 코드(자동 완성, 정적 분석)를 지원하므로 사용자는 유형 선언을 설치하는 것이 좋습니다.
@dlebrecht 확실히Typed 포크 에서 타이프스크립트 관련 버그를 보고하고 , ReliableTyped 에 PR을 제출하세요.
Flow
Flow typechecker 에 대한 정의는 flow-typed 저장소에서 사용할 수 있습니다.
리포지토리에서 직접 다운로드하거나 흐름 유형의 CLI를 사용하여 다운로드할 수 있습니다.
1
2# npm install -g flow-typed
$ flow-typed install -f 0.27 bitcoinjs-lib@2.2.0 # 0.27 for flow version, 2.2.0 for bitcoinjs-lib version
정의는 완전하며 버전 2.2.0으로 최신 상태입니다. 정의는 @runn1ng 에 의해 유지 관리됩니다 .
예
아래 예는 통합 테스트로 구현되었으므로 이해하기 매우 쉽습니다. 그렇지 않으면 끌어오기 요청이 인정됩니다. 일부 예는 HTTPS를 통해 제3자 블록체인 공급자(3PBP)와 상호 작용합니다.
- 임의의 주소 생성
- SHA256 해시에서 주소 생성
- WIF를 통해 주소 가져오기
- 2/3 P2SH 다중서명 주소 생성
- SegWit 주소 생성
- SegWit P2SH 주소 생성
- SegWit 3-of-4 다중서명 주소 생성
- SegWit 2-of-2 P2SH 다중서명 주소 생성
- 주소에 대한 거래 검색 지원(제3자 블록체인)
- 테스트넷 주소 생성
- 라이트코인 주소 생성
- 1:1 거래 생성
- 2:2 거래 생성
- 일반적인 트랜잭션 생성(및 3PBP를 통해 브로드캐스트)
- OP_RETURN 출력을 사용하여 트랜잭션을 생성하고 3PBP를 통해 브로드캐스트합니다.
- 2/4 P2SH(다중 서명) 입력을 사용하여 트랜잭션 생성(및 3PBP를 통해 브로드캐스트)
- SegWit P2SH(P2WPKH) 입력을 사용하여 트랜잭션 생성(및 3PBP를 통해 브로드캐스트)
- SegWit 3-of-4 P2SH(P2WSH(multisig)) 입력을 사용하여 트랜잭션을 생성하고 3PBP를 통해 브로드캐스트합니다.
- BIP32 테스트넷 xpriv 가져오기 및 WIF로 내보내기
- BIP32 xpriv를 내보낸 후 가져오기
- BIP32 xpub 내보내기
- BIP32, 비트코인, 계정 0, 외부 주소 생성
- BIP44, 비트코인, 계정 0, 외부 주소 생성
- BIP49, 비트코인 테스트넷, 계정 0, 외부 주소 생성
- BIP39를 사용하여 BIP32 주소 생성
- Alice가 만료 후 출력을 사용할 수 있는 트랜잭션을 생성하고 3PBP를 통해 브로드캐스트합니다.
- Alice와 Bob이 언제든지 출력을 사용할 수 있는 트랜잭션을 생성하고 3PBP를 통해 브로드캐스트합니다.
- Alice가 만료 전에 상환을 시도하는 거래를 생성합니다(그러나 3PBP를 통해 브로드캐스트하지 않음).
- 중복된 R 값에서 개인 키 복구
- 상위 공개 키에서 BIP32 상위 개인 키와 강화되지 않은 파생 하위 개인 키를 복구합니다.
- 단일 키 스텔스 주소 생성
- 단일 키 스텔스 주소 생성(무작위)
- 파생된 개인 키가 유출된 경우(및 nonce가 공개된 경우) 상위 수신자.d를 복구합니다.
- 이중 키 스텔스 주소 생성
- 이중 키 스텔스 주소 생성(무작위)
여기에 나열할 수 있다고 생각되는 사용 사례가 있으면 요청 하세요 !
BitcoinJS를 활용하는 프로젝트
기여
우리는 항상 끌어오기 요청을 받아들이지만 코딩 스타일, 테스트 중심 개발 및 커밋 메시지와 관련하여 특정 표준을 준수합니다.
사소한 수정 사항을 줄이기 위해 기여할 때 이러한 사항을 준수하도록 최선을 다해 주십시오.
Running the test suite
1
2npm test
npm run-script coverage
라이브러리 보완
- BIP21 - BIP21 호환 URL 인코딩 라이브러리
- BIP38 - 암호로 보호되는 개인 키
- BIP39 - 결정적 키에 대한 니모닉 생성
- BIP32-Utils - BIP32 작업을 위한 유틸리티 세트
- BIP66 - 엄격한 DER 서명 디코딩
- BIP68 - 상대 잠금 시간 인코딩 라이브러리
- BIP69 - 거래 입력 및 출력의 사전식 색인화
- Base58 - Base58 인코딩/디코딩
- Base58 검사 - Base58 검사 인코딩/디코딩
- Bech32 - BIP173 호환 Bech32 인코딩 라이브러리
- coinselect - bitcoinjs-lib를 위한 수수료 최적화 트랜잭션 입력 선택 모듈입니다.
- merkle-lib - 머클 루트 및 트리 계산을 위한 성능 중심 라이브러리입니다.
- minimaldata - 비트코인 정책을 확인하는 모듈: SCRIPT_VERIFY_MINIMALDATA