0.1.0 • Published 2 years ago

btc-minilib v0.1.0

Weekly downloads
-
License
CC0
Repository
-
Last release
2 years ago

A mini bitcoin libary / Мини биткоин библиотека.

На данный момент библиотека способна выполнять лишь простые переобразования и генерацию ключей, а также запросы к обозревателям блоков.

Пример

let blib = require('./node-modules/btc-minilib/btc-minilib.js');
let wifprefix = "80"; // Префикс генерации WIF ключей для BTC Mainnet
let p2pkh_pefix = "00"; // Префикс вычисления p2pkh адресов для BTC Mainnet

(async function(){
	let privkey = blib.genPrivateKey(); // генерация 32-битного закрытого ключа в виде строки HEX.
	console.log("Приватный ключ:", privkey); // "Приватный ключ: 0000000000000000000000000000000000000000000000000000000000000001"
	// Переобразование необработанного закрытого HEX ключа в WIF форматы(Для BTC Mainnet используется префикс "80"):
	console.log("Hex->WIF(51):", blib.wif.encode(privkey, 51, wifprefix)); // Несжатый WIF длинной 51 символ.
	console.log("Hex->Compressed WIF(52):", blib.wif.encode(privkey, 52, wifprefix)); // Сжатый WIF длинной 52 символа.
	console.log("Hex->Base64(44):", Buffer.from(privkey, "hex").toString("base64")); // Формат Base64 44 символа
	// Вычисление публичных адресов из необработанного закрытого HEX ключа(в скобках указана длинна адреса в символах):
	console.log("= Публичные адреса =");
	console.log("Несжатый P2PKH(34):", blib.getaddress.p2pkh(privkey, false, p2pkh_pefix)); // "Pay to Public Key Hash", "legacy" адреса.
	console.log("Сжатый P2PKH(34):", blib.getaddress.p2pkh(privkey, true, p2pkh_pefix)); // те же "Pay to Public Key Hash" адреса, только используется сжатый открытый ключ.
	console.log("SegWit P2WPKH(42):", blib.getaddress.p2wpkh(privkey)); // "Pay to Witness Public Key Hash", также "Bech32"
	console.log("SegWit P2SH(34):", blib.getaddress.p2sh(privkey)); // "Pay to Script Hash" адреса.
})();

Методы

blib.genhex(length) - сгенерировать случайный HEX ключ(быстро, но небезопасно), возвращает String.

Параметры: length(длинна HEX ключа, По умолчанию=64).

blib.genPrivateKey() - сгенерировать закрытый 32-битный HEX ключ(медленно, более безопасно), возвращает String.

blib.getPublicKey(privKey, iscompressed) - получить публичный ключ из приватного, возвращает String.

Параметры: privKey(HEX, строка 64 символа), iscompressed(генерировать ли сжатый ключ, логический).

blib.wif.encode(key, length, prefix) - получить WIF формат ключа из закрытого HEX ключа, возвращает String.

Параметры: key(HEX, строка 64 символа), length(длинна wif ключа. По умолчанию=51, Возможные:51-52), prefix(HEX префикс получения WIF, По умолчанию="80").

blib.wif.decode(key) - получить WIF формат ключа из закрытого HEX ключа, возвращает String.

Параметры: key(Закрытый WIF ключ, строка 51-52 символа).

blib.getaddress.p2pkh(privKey, compressed, prefix) - получить публичный адрес P2PKH из закрытого HEX ключа, возвращает String.

Параметры: privKey(HEX, строка 64 символа), compressed(получить ли сжатую версию адреса, логический), prefix(HEX префикс получения адреса, По умолчанию="00").

blib.getaddress.p2wpkh(privKey, prefix) - получить публичный адрес P2WPKH(SegWit Bech32) из закрытого HEX ключа, возвращает String.

Параметры: privKey(HEX, строка 64 символа), prefix(HEX префикс получения адреса, По умолчанию="bc").

blib.getaddress.p2sh(privKey) - получить публичный адрес P2WPKH(SegWit Bech32) из закрытого HEX ключа, возвращает String.

Параметры: privKey(HEX, строка 64 символа), prefix(HEX префикс получения адреса, По умолчанию="05").

blib.mnemonic.sha256(word) - получить 32-битный закрытый HEX ключ из текстовой фразы(фраз), возвращает String.

blib.mnemonic.gen(length, isfast) - сгенерировать несколько текстовых фраз для мнемоники, возвращает String.

Параметры: length(кол-во сгенерированных фраз), isfast(использовать ли быстрый рандомайзер(небезопасно), логический).

blib.request(type, data, options) - отправить запрос одному из обозревателю блоков, возвращает Object.

Параметры: \ - type: Тип данных, которые запрашиваются, доступные:\ - - "address": Запросить информацию о публичном адресе.\ - data: Данные запроса. Если type указан "address", в этом случае этот парамер является строкой с запрашиваемым публичным адресом.\ - options: Объект с параметрами запроса:

	{   syte: "blockchain.info", // Домен запроса. Поддерживаемые: "blockchain.info", "blockstream.info", "bitaps.com", "mempool.space", "blockcypher.com".
		testnet: false, // Делается ли запрос в тестовую сеть. Логический.
	}

Пример:

let blib = require('./node-modules/btc-minilib/btc-minilib.js');
(async function(){ console.log(await blib.request("address", "1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm")); })();

Ответ:

	{ hash160: '91b24bf9f5288532960ac687abb035127b1d28a5',
	  address: '1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm',
	  n_tx: 1393,
	  n_unredeemed: 0,
	  total_received: 781874268,
	  total_sent: 781874268,
	  final_balance: 0,
	  txs: [],
	  received: '7.81874268',
	  balance: 0 }

Префиксы

WIF BTC Mainnet: "80"; WIF BTC Testnet: "ef";\ P2PKH BTC Mainnet: "00"; P2PKH BTC Testnet: "6f";\ P2WPKH BTC Mainnet: "bc"; P2WPKH BTC Testnet: "tb";\ P2SH BTC Mainnet: "05"; P2SH BTC Testnet: "c4";

WIF LTC Mainnet: "b0"; WIF LTC Testnet: "ef";\ P2PKH LTC Mainnet: "30"; P2PKH LTC Testnet: "6f";\ P2WPKH LTC Mainnet: "ltc"; P2WPKH LTC Testnet: "tltc";\ P2SH LTC Mainnet: "32"; P2SH BTC Testnet: "3a";