@abcwalletio/bitcoin
v1.0.0
Published
ABC WaaS Bitcoin adapter — MPC-based public key and PSBT (BIP-174) signing for bitcoinjs-lib (secp256k1)
Readme
@abcwalletio/bitcoin
ABC WaaS SDK의 Bitcoin 어댑터입니다. Bitcoin 생태계는 월렛 표준이 파편화되어
있어 독자 인터페이스로 공개키 조회와 PSBT 서명 기능을 노출합니다. 사용자가
bitcoinjs-lib와 조합해 UTXO 관리 및 트랜잭션 조립을 수행합니다.
Installation
pnpm add @abcwalletio/bitcoin @abcwalletio/core bitcoinjs-libPeer Dependencies
@abcwalletio/corebitcoinjs-lib>=6.0.0
Quick Start
import { createWaasSDK, LocalStorageAdapter } from '@abcwalletio/core';
import { AbcBitcoinAdapter } from '@abcwalletio/bitcoin';
import { payments, networks } from 'bitcoinjs-lib';
const sdk = await createWaasSDK({
storage: new LocalStorageAdapter(),
auth: { v2: { clientId: '...', clientSecret: '...' } },
});
// Bitcoin은 secp256k1 키 사용
await sdk.mpc.generateKeyShare('secp256k1', 'password');
const adapter = await AbcBitcoinAdapter.create({
sdk,
requestPassword: async () => prompt('MPC 비밀번호?') ?? '',
});
// bitcoinjs-lib로 주소 도출 (예: P2WPKH)
const { address } = payments.p2wpkh({
pubkey: adapter.getPublicKeyBuffer(),
network: networks.bitcoin,
});API
AbcBitcoinAdapter.create(config)
interface AbcBitcoinAdapterConfig {
sdk: WaasSDK;
requestPassword: () => Promise<string>;
keyId?: string; // 생략 시 sdk.mpc.getDefaultKeyId('secp256k1') 자동 조회
}메서드
| 메서드 | 설명 |
|--------|------|
| getPublicKey() | 원시 공개키 hex 반환 |
| getPublicKeyBuffer() | 공개키 Buffer — bitcoinjs-lib가 요구하는 형식 |
| getUncompressedPublicKey() | 65바이트 비압축 공개키 hex (04 prefix) |
| signMessage(hashHex) | 단일 해시 서명 (65바이트: r + s + v) |
| signPsbt(sighashes) | BIP 174 PSBT 서명 — 여러 입력의 sighash를 일괄 서명하며 password는 1회만 요청 |
PSBT 예제
// PSBT 조립 (bitcoinjs-lib)
const psbt = new Psbt({ network });
psbt.addInput({ ... });
psbt.addOutput({ ... });
// 각 입력의 sighash를 구해서 일괄 서명 요청
const sighashes = psbt.data.inputs.map((_, i) =>
psbt.__CACHE__.__TX.hashForWitnessV0(i, ...).toString('hex'),
);
const signatures = await adapter.signPsbt(sighashes);
// 각 입력에 서명 적용
signatures.forEach((sig, i) => {
psbt.updateInput(i, { partialSig: [{ pubkey: adapter.getPublicKeyBuffer(), signature: Buffer.from(sig, 'hex') }] });
});License
MIT — Copyright (c) 2026 Ahnlab Blockchain Company
