Надписи
Inscriptions inscribe gros with arbitrary content, creating groestlcoin-native digital artifacts, more commonly known as NFTs. Inscriptions do not require a sidechain or separate token.
These inscribed gros can then be transferred using groestlcoin transactions, sent to groestlcoin addresses, and held in groestlcoin UTXOs. These transactions, addresses, and UTXOs are normal groestlcoin transactions, addresses, and UTXOS in all respects, with the exception that in order to send individual gros, transactions must control the order and value of inputs and outputs according to ordinal theory.
Модель содержания надписей соответствует модели содержания web. Надпись состоит из типа содержимого, известного также как тип-MIME, и самого содержимого, которое представляет собой байтовую строку. Это позволяет возвращать содержимое надписи с веб-сервера, а также создавать HTML-надписи, использующие и переделывающие содержимое других надписей.
Содержимое надписей полностью находится on-chain и хранится в скриптах taproot script-path spend. Скрипты taproot имеют очень мало ограничений на содержимое и дополнительно получают скидку свидетеля, что делает хранение содержимого надписей относительно экономичным.
Поскольку траты taproot script-path spend могут осуществляться только из существующих выходов taproot, надписи делаются с помощью двухфазной процедуры commit/reveal. Во-первых, в транзакции commit создается выход taproot, фиксирующий скрипт, содержащий содержимое надписи. Во-вторых, в транзакции reveal созданный транзакцией commit выход расходуется, раскрывая содержимое on-chain надписи.
Сериализация содержимого надписи осуществляется с помощью data pushes внутри неисполняемых условий, называемых "конвертами". Конверты состоят из OP_FALSE OP_IF … OP_ENDIF
обертывающих любое количество data pushes. Поскольку конверты являются фактически no-ops, они не изменяют семантику скрипта, в который включены, и могут быть объединены с любым другим блокирующим скриптом.
Текстовая надпись, содержащая строку "Hello, world!" сериализуется следующим образом:
OP_FALSE
OP_IF
OP_PUSH "ord"
OP_PUSH 1
OP_PUSH "text/plain;charset=utf-8"
OP_PUSH 0
OP_PUSH "Hello, world!"
OP_ENDIF
Сначала вводится строка ord
, чтобы отделить надписи от других видов использования конвертов.
OP_PUSH 1
указывает, что следующий push содержит тип содержимого, а OP_PUSH 0
- что последующие push-файлы содержат само содержимое. Для больших надписей необходимо использовать несколько push данных, так как одно из немногих ограничений taproot заключается в том, что размер отдельных push данных не может превышать 520 байт.
The inscription content is contained within the input of a reveal transaction, and the inscription is made on the first gro of its input. This gro can then be tracked using the familiar rules of ordinal theory, allowing it to be transferred, bought, sold, lost to fees, and recovered.
Содержимое
Модель данных надписей представляет собой HTTP-ответ, что позволяет обслуживать содержимое надписей на веб-сервере и просматривать его в браузере.
Поля
Надписи могут включать поля перед необязательным текстом. Каждое поле состоит из двух push данных - тега и значения.
В настоящее время единственным определяемым полем является content-type
, с тегом 1
, значением которого является тип-MIME текста.
Начало основного текста и конец полей обозначаются пустым вводом данных.
Нераспознанные метки интерпретируются по-разному в зависимости от того, четные они или нечетные, в соответствии с правилом "нормально быть нечетным", используемым в Lightning Network.
Четные метки используются для полей, которые могут повлиять на создание, первичное присвоение или перенос надписи. Таким образом, надписи с нераспознанными четными полями должны отображаться как "несвязанные", т.е. без указания местоположения.
Нечетные теги используются для полей, которые не влияют на создание, первоначальное назначение или передачу, например, дополнительные метаданные, и поэтому их можно игнорировать.
ID надписей
Надписи содержатся во входах транзакции раскрытия. Для их однозначной идентификации им присваивается ID вида:
521f8eccffa4c41a3a7728dd012ea5a4a02feed81f41159231251ecf1e5c79dai0
Часть перед i
- это ID транзакции (txid
) транзакции раскрытия. Число после i
определяет индекс (начиная с 0) новых надписей, заносимых в транзакцию раскрытия.
Надписи могут располагаться либо в разных входах, либо в одном входе, либо в комбинации обоих вариантов. В любом случае порядок следования понятен, так как синтаксический анализатор будет последовательно просматривать входы и искать все надписи-"конверты".
Вход | Inscription Count | Indices |
---|---|---|
0 | 2 | i0, i1 |
1 | 1 | i2 |
2 | 3 | i3, i4, i5 |
3 | 0 | |
4 | 1 | i6 |
Песочница
Надписи HTML и SVG находятся в песочнице для предотвращения ссылок на off-chain содержимое, что позволяет сохранить неизменяемость и самодостаточность надписей.
Это достигается за счет загрузки HTML и SVG-надписей внутри iframe
с атрибутом sandbox
, а также предоставления содержимого надписей с заголовками Content-Security-Policy
.