Минимальная JS-библиотека для порядковых номеров и надписей поверх scure-btc-signer.
Используйте его как библиотеку в своем JS-коде или запустите встроенный инструмент CLI. Надписи позволяют загружать случайные файлы в блокчейн BTC.
Экспериментальный: может привести к потере средств, пока не будет тщательно проверено.
npm установить микро-порядковые номера
Создание надписи
API-интерфейс TypeScript
интерфейс командной строки
// npm устанавливаем микро-ординалы @scure/btc-signer @scure/baseimport * как btc из '@scure/btc-signer'; импортируем * как порядковые номера из 'micro-ordinals'; импортируем { hex, utf8 } из '@ scure/base';const TESTNET = btc.utils.TEST_NETWORK;const privKey = hex.decode('0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a');const pubKey = btc.utils.pubSchnorr(privKey);const customScripts = [ordinals.OutOrdinalReveal]; // Включение пользовательских скриптов снаружи // Это вписывается в первые сатоши первого ввода (по умолчанию) const надпись = { теги: {contentType: 'application/json', // может быть любым форматом (тип MIME)// ContentEncoding: 'br', // сжатие: поддерживается только brotli }, тело: utf8.decode(JSON.stringify({some: 1, test: 2, надпись: true, in: 'json' })), // Можно использовать ранее вписанные js-скрипты в html // utf8.decode(`<html><head></head><body><script src="/content/script_inscription_id"></script>test</html>`)};const showPayment = btc.p2tr ( не определено, // внутреннийPubKey ordinals.p2tr_ord_reveal(pubKey, [надпись]), // TaprootScriptTree TESTNET, // основная сеть или тестовая сеть false, //allowUnknownOutputs, функция безопасности customScripts // как обрабатывать пользовательские сценарии); // Нам нужно отправить несколько биткойнов на этот адрес перед раскрытием. // Кроме того, их должно быть достаточно, чтобы покрыть раскрываемый tx Fee.console.log('Address', ShowPayment.address) ; // 'tb1p5mykwcq5ly7y2ctph9r2wfgldq94eccm2t83dd58k785p0zqzwkspyjkp5'// Будьте особенно осторожны: можно случайно отправить надпись в качестве платы.// Также редкость доступна только с порядковым кошельком.// Но вы можете разобрать другие надписи и создать с их помощью общую. константное изменениеАддр = раскрытьПлатежный.адрес; // может быть разнымconst showAmount = 2000n;const Fee = 500n;const tx = new btc.Transaction({ customScripts });tx.addInput({ ... раскрыть платеж, // Это txid передачи биткойнов, которые мы отправили (заменить) txid: '75ddabb27b8845f5247975c8a5ba7c6f336c4570708ebe230caf6db5217ae858', индекс: 0, свидетеляUtxo: {скрипт: раскрыватьPayment.script, сумма: раскрыватьAmount },});tx.addOutputAddress(changeAddr, раскрыватьAmount - комиссия, TESTNET);tx.sign(privKey, undefined, new Uint8Array(32));tx.finalize() ;const txHex = hex.encode(tx.extract());console.log(txHex); // Шестнадцатеричный код передачи tx для трансляцииconst tx2 = btc.Transaction.fromRaw(hex.decode(txHex)); // Парсинг надписейconsole.log('parsed', ordinals.parseWitness(tx2.inputs[0].finalScriptWitness));console.log('vsize', tx2.vsize); // Выявление передачи должно платить как минимум такую-то комиссию
импортировать { Coder } из «@scure/base»; импортировать * как P из «микроупакованного»; импортировать { ScriptType, OptScript, CustomScript } из «@scure/btc-signer»; тип Bytes = Uint8Array; экспортировать объявление const InscriptionId : P.Coder<string, Bytes>;type TagRaw = {tag: Bytes;data: Bytes;};объявить const TagCoders: {указатель: P.CoderType<bigint>;contentType: P.CoderType<string>;родитель: P.Coder<string, Uint8Array>;метаданные: P.CoderType<any>;метапротокол: P.CoderType<string>;contentEncoding: P.CoderType<string>;делегат: P.Coder<string, Uint8Array>;руна: P.CoderType<bigint>;примечание: P.CoderType<string>;};тип экспорта Tags = Partial<{[K в keyof typeof TagCoders]: P.UnwrapCoder<(typeof TagCoders)[K]>;}> & { неизвестно?: [Bytes, Bytes][];};тип экспорта Inscription = { tags: Tags; тело: Байты; проклят?: логическое значение; };type OutOrdinalRevealType = { type: 'tr_ord_reveal'; Публичный ключ: Байты; надписи: Надпись[]; };exportобъявление const OutOrdinalReveal: Coder<OptScript, OutOrdinalRevealType | undefined> & CustomScript;export объявляет функцию parseInscriptions(script: ScriptType, strict?: boolean): Inscription[] | undefined;/** * Разбор записей из свидетеля ввода tx (tx.inputs[0].finalScriptWitness) */export объявляет функцию parseWitness(witness: Bytes[]): Inscription[] | undefined;/** * Создать раскрывающую транзакцию. Надпись, созданная при выводе расходов с этого адреса, * раскрывает скрипт Taproot. */export объявляет функцию p2tr_ord_reveal(pubkey: Bytes, надписи: Inscription[]): {type: string;script: Uint8Array;};
npm install -g микропорядковые номера ord file.jpg
Использование: ord [--net mainnet|testnet] [--priv key] [--recovery key] [--compress=on|off] [--fee 10.1] [--addr адрес]
сеть: сеть биткойнов
priv: закрытый ключ Taproot в формате WIF, будет использоваться для раскрытия транзакции. Не используйте свой кошелек, priv должен быть новым. Генерируем временный ключ, если таковой не указан
восстановление: закрытый ключ Taproot в формате WIF может использоваться для восстановления любых биткойнов, случайно отправленных на адрес регистрации, без уплаты полной платы за регистрацию.
сжать: надписи, сжатые бротли. Совместимость с исследователями. по умолчанию = включено
комиссия: комиссия сети биткойн в сатоши
addr: адрес, куда будет отправлена надпись после раскрытия. Важно: всегда вписывается первый sat. Пакетные надписи не поддерживаются.
Сетевого кода нет. Это делает пакет более безопасным, но снижает опыт разработчиков.
Вероятно, мы сможем получать комиссии автоматически, но выбор utxo станет более сложным. Например, если пользователь ранее что-то вписал или имеет редкие порядковые номера, нам нужен доступ к порядковому узлу, чтобы знать это. Кроме того, мы ничего не знаем о замороженных выводах в кошельке: они есть только внутри кошелька.
Пограничные случаи, о которых следует помнить:
пользователь добавил неправильный txid/index или закрыл приложение после отправки
мы печатаем временный закрытый ключ, пользователь может перезапустить его, указав --priv
поскольку плата/сеть/путь одинаковы, вы можете перезапустить процесс
пользователь отправил меньше суммы или несколько UTXO.
на самом деле это сложнее, потому что любые расходы потребуют полной платы за регистрацию
для этого добавляем recovery
Используйте мемпул и ordinalsbot.
Есть несколько кранов: uo1, eu, pump.
Чтобы использовать воробья на Mac:
open /Applications/Sparrow.app --args -n testnet
MIT (c) Пол Миллер (https://paulmillr.com), см. файл ЛИЦЕНЗИИ.