Подробное объяснение технологии протокола Рун.
Подробное объяснение технологии протокола Рун.

В последнее время протокол Runes является самым популярным проектом в экосистеме Биткойн.,Поэтому я использовал свое время ночью,Реализован протокол Runes с использованием языка Go.,Адрес проекта:https://github.com/bxelab/runestone,Также на основе этогоRunestoneБиблиотека записывает соответствующий клиент командной строки вздесь,на основеRunesГлубокое понимание протокола,Я обнаружил, что многие проекты в Интернете неправильно используют руны.,Поэтому я напишу еще одну техническую статью.,Давайте углубимся в подробности. Если вы хотите развивать руны,,Вы можете обратиться к нему.

1. Структура данных

1.1 Травление

Травление — это структура, используемая в протоколе записи рун для создания новых рун. Он содержит следующие необязательные поля:

  • divisibility:Указывает на делимость рун。ЭквивалентноERC20вdecimalПоле,Десятичные знаки。type Terms struct {undefined Amount *uint128.Uint128 //Mint Сумма, которую можно отчеканить за один раз Cap *uint128.Uint128 //Сколько раз можно принимать Мяту? Height 2*uint64 //Разрешить начальную и конечную высоту Mint (абсолютное значение) Offset 2*uint64 //Разрешить начальную и конечную высоту Mint (относительные значения, эквивалентные высоте выданной руны) }Поскольку разрешен предварительный майнинг и последующий Mint, общее количество волос для этой руны составляет: Предварительный майнинг+Сумма*Ограничение Количество рун — uint128, а не uint256 в Эфириуме или uint64 в Биткойне, поэтому количество рун также может быть очень большим. 1.2 RuneId Идентификатор руны
  • premine:Количество премайненных。Если не установлено, это означает отсутствие предварительного майнинга
  • rune:Имя руны,Кодирование целого числа в модифицированной базе -26.
  • spacers:Представляет символ-разделитель, отображаемый между символами названия руны.。
  • symbol:Символ валюты руны。одинUTF8характер
  • terms:Содержит пункт о приведении,Например, количество, верхняя предел、Начальная и конечная высота блока. Вам необходимо дополнительно объяснить термины, которые определяются следующим образом:

RuneId — уникальный идентификатор текста идентификатора.,Формируется высотой блока и кодированием индекса транзакции.,И сBLOCK:TXтекстовое представление。

1.3 Указ-указ

Edict представляет собой структуру, используемую для передачи рун и содержит следующие поля:

  • id:Вовлеченный Идентификатор руны。
  • amount:Количество переданных рун。
  • output:указанный выходной индекс。1.4 Сообщения протокола Runestone называются Runestones и содержат следующие поля:
  • edicts:один Указколлекция,Используется для передачи Руны.
  • etching:один Необязательныйиз Офорт,Используется для создания рун.
  • mint:один НеобязательныйизRuneId,Представляет идентификатор руны, которую нужно отчеканить.
  • pointer:один Необязательныйизu32,Указывает на выход, на который следует передать Руны, не выделенные Указом. 1.5 Кенотаф надгробие

Кенотафы — это структуры, созданные, когда рунные камни не соответствуют правилам протокола. Это представляет собой недопустимую операцию записи и может привести к уничтожению введенных рун. То есть, если мы определяем руну, но она не соответствует спецификациям протокола, то руна будет помечена как надгробие.

2. Кодирование

2.1 Правила для рунических имен

  1. набор символов:RuneИмена состоят из заглавных буквAприезжатьZкомпозиция,Никакие другие символы не используются.
  2. Кодировка Base-26:каждыйбуквы представляют собойодин Мощность-26ценить,где А=0, B=1, ..., Y=24, З=25. Это означает, что каждой букве соответствует целое число от 0 до 25.
  3. Название комбинации:когдаRuneимянесколькими буквамикомпозициячас,Числовое значение каждой буквы последовательное.,И они представляют собой совокупное значение. Например,Имя «AB» не является числовой суммой A и B (т.е. оно не равно 26).,Вместо этого оно выражается непосредственно как 27 в алфавитном порядке.
  4. инкрементное кодирование:вместе сRuneУвеличение количества букв в имени,Соответствующее значение увеличится. Например,Соответствующее значение для «АА» составляет 26.,«АБ» — 27.,И так далее.
  5. специальное зарезервированное имя:некоторые конкретныеRuneИмя зарезервировано по соглашению,Эти имена обычно длиннее,И не будет использоваться обычными пользователями. упоминается в документации,Имена «АААААААААААААААААААА» и более длинные имена зарезервированы.
  6. разблокировка имени:RuneРазблокировка имен производится поэтапно。отRuneБлок активации протокола(высокий840,000)начинать,через некоторое время,Имена рун различной длины постепенно разблокируются.,Позволяет пользователям создавать новые руны.
  7. название обязательства:Чтобы не допустить опережения,Если незарезервированное имя руны — травление (травление).,травление Транзакция должна содержать действительное обязательство перед именем. Это обещание реализуется путем отправки данных, содержащих имя руны во входном свидетеле TapScript, который встречает определенное количество подтверждений (см. 3.2).
  8. Назначение имени:Если пользовательтравлениене предусмотреноRuneимя,Протокол присвоит зарезервированное имя руны по определенному алгоритму. Этот алгоритм вычисляет уникальное имя руны на основе высоты блока и индекса транзакции травления.

Благодаря этим правилам Протокол записи рун обеспечивает уникальность и предсказуемость имен рун, а также предоставляет механизм, предотвращающий несанкционированное использование или злоупотребление именами. Это правило именования не только обеспечивает гибкость протокола Rune Inscription, но также обеспечивает безопасность и стабильность системы.

3. Определите правила для новых рун.

3.1 Кодировка рунических камней

Сначала мы определяем объект Etching, затем создаем Runestone на основе этого объекта и используем Runestone для его кодирования и получения двоичных данных, необходимых для гравировки. Пример кода выглядит следующим образом:

Язык кода:go
копировать
runeName := "STUDYZY.GMAIL.COM"  
symbol := 'всегда'  
myRune, err := runestone.SpacedRuneFromString(runeName)  
if err != nil {  
    fmt.Println(err)  
    return  
}  
amt := uint128.From64(666666)  
ca := uint128.From64(21000000)  
etching := &runestone.Etching{   //Определить травление
    Rune:    &myRune.Rune,  
    Spacers: &myRune.Spacers,  
    Symbol:  &symbol,  
    Terms: &runestone.Terms{  
       Amount: &amt,  
       Cap:    &ca,  
    },  
}  
r := runestone.Runestone{Etching: etching}  // Построить рунный камень
data, err := r.Encipher() //кодирование двоичное

3.2 OP_RETURN реализует загрузку контента травления.

В протоколе рунических надписей,использовать БиткойнсценарийOP_RETURNОпкод реализованEtchingтравление Ключевые шаги для загрузки контента。OP_RETURNпозволяет нам передавать определенные данные,То есть вышеуказанное кодирование в двоичную рунную информацию травление,Встроен в транзакции в блокчейне Биткойн. Эти данные постоянно записываются в блокчейн.,нельзя подделать,Каждой руне присвоен уникальный «символ».

существоватьторговляиз ВыводиспользоватьOP_RETURNкод операции,Далее следует MAGIC_NUMBER: OP_13,Затем следуйте рунической информации о травлении. Эта информация обычно включает имя руны, атрибуты и другие соответствующие данные. Этот выход не обязательно должен быть выходом № 0.

Ниже приведен код для создания сценария OP_RETURN:

Язык кода:go
копировать
//build op_return script  
builder := txscript.NewScriptBuilder()  
// Push OP_RETURN  
builder.AddOp(txscript.OP_RETURN)  
// Push MAGIC_NUMBER  
builder.AddOp(MAGIC_NUMBER)  
for len(payload) > 0 {  
    chunkSize := txscript.MaxScriptElementSize  
    if len(payload) < chunkSize {  
       chunkSize = len(payload)  
    }  
    chunk := payload[:chunkSize]  
    builder.AddData(chunk)  
    payload = payload[chunkSize:]  
}  
return builder.Script()

3.3 TapScript гарантирует правильность фиксации обязательства руны.

В протоколе записи рун, чтобы обеспечить легальность гравировки и предотвратить фронтальные атаки (Front-running), введены понятия TapScript и Commitment. TapScript является частью структуры Taproot Биткойна, обеспечивающей более эффективный и конфиденциальный формат транзакций.

  1. Структура стержневого корня:Taprootэто своего рода Биткойнпредложение по улучшению(BIP),Это позволяет объединить несколько потенциальных торговых сценариев в один эффективный сценарий.,Тем самым уменьшая размер и стоимость транзакций.
Язык кода:go
копировать
func (r Rune) Commitment() []byte {  
    bytes := r.Value.Big().Bytes()  
    // Reverse bytes to get little-endian representation  
    for i, j := 0, len(bytes)-1; i < j; i, j = i+1, j-1 {  
       bytes[i], bytes[j] = bytes[j], bytes[i]  
    }  
    end := len(bytes)  
    for end > 0 && bytes[end-1] == 0 {  
       end--  
    }  
    return bytes[:end]  
}

Далее мы можем собрать TapScript:

Язык кода:go
копировать
func CreateCommitmentScript(pk \*btcec.PublicKey, commitment []byte) ([]byte, error) {  
    builder := txscript.NewScriptBuilder()  
    //push pubkey  
    pk32 := schnorr.SerializePubKey(pk)  
    builder.AddData(pk32)  
    builder.AddOp(txscript.OP\_CHECKSIG)  
    //Commitment script  
    builder.AddOp(txscript.OP\_FALSE)  
    builder.AddOp(txscript.OP\_IF)  
    builder.AddData(commitment)  
    builder.AddOp(txscript.OP\_ENDIF)  
    return builder.Script()  
}
  1. Использование TapScript:существоватьRuneв согласии,TapScript используется для реализации обязательств по именам рун. это значит до травления,Пользователи должны продемонстрировать свой контроль над определенным именем руны посредством транзакции. Метод расчета рун Обязательство следующее:
  2. Обязательная транзакция:Пользователь сначала создает и транслирует“Отправить транзакцию”(Commit Transaction),Эта транзакция отправляет определенное количество биткойнов на адрес, соответствующий TapScript.,Но название руны раскрывается не сразу. Выходные данные этой транзакции будут служить входными данными для последующих раскрывающих транзакций.

3.3 Интервал между отправкой транзакции и раскрытием транзакции составляет более 6 блоков.

Транзакция P2TR (Pay-to-Taproot) — это формат транзакции Биткойн, который использует структуру Taproot для повышения эффективности транзакций и конфиденциальности. Будь то предыдущий протокол Ordinals, BRC20 или текущая Rune Inscription, все они основаны на транзакциях P2TR. На предыдущих шагах 3.1 и 3.2 мы создали TapScript, на котором хотим вытравить надпись. Затем нам нужно перевести определенное количество BTC на адрес, соответствующий этому скрипту (эта транзакция называется Commit). TransactionОтправить транзакцию),Затем подождите, пока отправленная транзакция не будет успешно загружена в цепочку.,Ожидание номера подтверждения>=6,Затем мы можем инициировать Обратный Транзакция раскрывает транзакцию, которая включает только TapScript версии 3.2 и OP_RETURN версии 3.1.

  1. Первая транзакция – Подтвердить транзакцию

Эта транзакция представляет собой обычную транзакцию перепечатки, переводящую определенное количество BTC на адрес P2TR, соответствующий TapScript. Будьте осторожны, не делайте ее слишком маленькой, иначе комиссии за обработку может не хватить для второй выявленной транзакции.

  1. временной интервал

Детали этого травления не могут быть раскрыты сразу после того, как транзакция фиксации транслируется в сеть и включается в блок.

Вы должны дождаться, пока майнеры добудут как минимум 6 блоков. Этот временной интервал обеспечивает период наблюдения, чтобы гарантировать, что отправленные транзакции травления принимаются сетью и что нет других конфликтующих транзакций.

  1. Вторая транзакция — Показать транзакцию

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

Транзакция раскрытия также обычно содержит вывод OP_RETURN, кодирующий выгравированные данные в Data Push.

  1. Обмоточная надпись

Эти две операции вместе завершают процесс создания и намотки руны. Первая транзакция обеспечивает безопасность и право собственности на имя, а вторая транзакция раскрывает в сети полную информацию о руне.

Таким образом, протокол записи рун не только защищает интересы создателя и предотвращает сквотирование имен, но также гарантирует, что все участники сети смогут проверить и принять вновь созданные руны.

Благодаря этому поэтапному процессу транзакции протокол записи рун обеспечивает безопасный и прозрачный способ добавления новых рун в блокчейн. Этот механизм повышает надежность всей системы и обеспечивает гибкость для будущих расширений и обновлений протокола.

4. Использование определенных рун

Если руны, которые мы гравируем, позволяют Mint и соответствуют требованиям Mint (не завершены Mint, Mint полностью соответствует требованиям и т. д.), то мы можем отлить выгравированные определенные руны, создав транзакцию Mint.

4.1 Идентификатор руны

Гравировка руны загружается в сеть Биткойн в раскрывающей транзакции 3.3. Высота блока в цепочке и значение индекса транзакции блока, в котором находится раскрывающая транзакция, вместе составляют уникальный идентификатор руны: RuneId. мы используем {высота блока}:{показать значение индекса транзакции} Определить руны, которые нужно разыграть, чтобы гарантировать их уникальность. Мы можем использовать Runestone для кодирования идентификатора руны, код:

Язык кода:go
копировать
runeIdStr := "2609649:946"  //Вам нужен идентификатор Mint руны
runeId, _ := runestone.RuneIdFromString(runeIdStr)  
r := runestone.Runestone{Mint: runeId}  
data, err := r.Encipher()

4.2 OP_RETURN реализует цепочку Mint

Похоже на: травление,использоватьOP_RETURNбудет бросать(Mint)Запись операциисуществоватьна блокчейне。Различиясуществовать В,Нам больше не нужны транзакции P2TR в Mint,То есть,Нам нужна только обычная транзакция перевода,Вместо построения двух транзакций.

4.3 Отлив системных рун UNCOMMON•ТОВАРЫ

Runesпротоколизизобретательсуществовать发布рунычас也существовать Жесткий кодкодированиепредопределенныйодинруны:UNCOMMON•GOODS,Эту руну может откопать каждый,Что Идентификатор руныда:1:0,Майнинг по одному за транзакцию.

5. Перенос рун

В протоколе Rune Inscription передача рун осуществляется посредством так называемого «Эдикта» — специальной структуры, которая определяет, как руны передаются от одного владельца к другому. Вот подробные шаги и правила процесса передачи рун:

5.1 Определение рунного эдикта

Каждый Указ содержит три основных поля:

  • id:Указывает руны, которые будут переданы.ID。
  • amount:хотеть Количество переданных рун。
  • output:предназначен для полученияпередача Выходной индекс руны.

Конструкция Edict позволяет содержать несколько указов в одном руническом камне, что позволяет одновременно передавать несколько рун в одной транзакции биткойнов.

5.2 Создание указа-эдикта

  1. Определение Эдикт:Создано отправителемодинили большеEdict,каждыйEdictСодержит Идентификатор руны, количество передаваемых рун и указанный выходной индекс.
  2. Порядок указов:EdictДолжен следовать Идентификатор руны сортируются и выполняется дельтакодирование для оптимизации размера транзакции и повышения эффективности. Ниже приведен пример кода, который создает и кодирует Рунный камень двух указов:
Язык кода:go
копировать
runeId1, _ := runestone.RuneIdFromString("2755031:186")  
runeId2, _ := runestone.RuneIdFromString("2609649:946")  
r := runestone.Runestone{Edicts: []runestone.Edict{  
    {  
       ID:     *runeId1,  
       Amount: uint128.From64(1000),  
       Output: 1,  
    },  
    {  
       ID:     *runeId2,  
       Amount: uint128.From64(100),  
       Output: 1,  
    },  
}}  
data, err := r.Encipher() //Deltaкодирование

5.3 Построение транзакций

  1. Ввод транзакции:Выберите достаточное количество неизрасходованныхвывод транзакции (UTXO) в качестве входа транзакции,Эти UTXO содержат руны, которые необходимо передать.
  2. вывод транзакции:строитьвывод обработка, включая выходы для получения рун и возможные выходы изменения.
  3. Содержит Эдикт:существоватьторговлясередина Включать Создано на предыдущем шагеизEdictдвоичныйкодирование,Эти указатели определяют, как руны распределяются от входов к выходам. 5.4 OP_RETURN осуществляет легкую загрузку в цепочку.

Подобно травлению и процессу литья, передача руныизуказтакже прошло БиткойнсценарийOP_RETURNкод операции Обмотка。Это гарантирует, что операция передачиизпрозрачность и необратимость,Предоставляет всем участникам сети возможность проверить корректность переводов.

5.5 Передача UTXO

Передача рун соответствует модели вывода неизрасходованных транзакций Биткойна (UTXO). В сети Биткойн выход каждой транзакции (UTXO) представляет собой определенное количество биткойнов, которое может быть использовано в качестве входных данных для следующей транзакции. В протоколе Rune концепция UTXO используется для представления и передачи определенных рун.

Другими словами, я отчеканил руну А в транзакции Mint и занял 1000 сатоши UTXO. Далее я строю обычную транзакцию перевода без OP_RETURN, трачу этот UTXO и передаю пользователю Б, тогда пользователь Б получит эту руну А.

5.6 Порядок обработки нормативных актов

Когда рунные камни выполняются, указы внутри них обрабатываются в том порядке, в котором они появляются. Это означает, что если в руническом камне есть несколько указов, ссылающихся на один и тот же идентификатор руны, они будут обработаны в том порядке, в котором они появляются в рунических камнях.

5.7 Распределение нераспределенных рун

Все поступающие руны (включая вновь отчеканенные или предварительно добытые руны) не распределяются до тех пор, пока не будет обработан Указ. Каждый указ уменьшает нераспределенный баланс соответствующего идентификатора руны и увеличивает баланс, выделенный для вывода транзакции.

Если указ пытается распределить больше рун, чем текущее нераспределенное количество рун, выделенное количество указа будет уменьшено до текущего нераспределенного количества рун. Это означает, что все нераспределенные руны будут полностью выделены.

5.8 Использование специальных постановлений

  • еслиуказизamountПолеравен нулю,означает, что Идентификатор Все остальные единицы руны.
  • еслиуказизoutputПоле等Ввывод транзакцииизколичество,означает, что такая же суммаизруны分配приезжатькаждый НетOP_RETURNизвыход。

5.9 Обработка ошибок законов

Если какой-либо указатель в Runestones указывает на неверный Идентификатор. руны(Например,Высота блока равна нулю, а индекс транзакции ненулевой),илиoutputПолеиз值大Ввывод транзакцииизколичество,тогда все Рунные камни будут считаться недействительными,Это становится «надгробие» (Кенотаф).,И все введенные руны будут уничтожены.

6. Уничтожить руны

Когда Рунные камни в транзакции не соответствуют правилам протокола, например, содержат неузнаваемые теги или логотипы, введенные руны будут уничтожены, что представлено структурой Кенотафа (надгробия).

6.1 Срабатывание механизма разрушения

Механизм уничтожения рун, так называемый «Кенотаф», срабатывает при следующих обстоятельствах:

  1. Содержит неизвестные теги:еслиRunestonesсередина Содержитпротокол无法识别издаже ярлык(Even Теги), в результате чего все рунные камни будут считаться недействительными, что запустит механизм уничтожения.
  2. Содержит неизвестные флаги:такой же,Если Рунные камни содержат флаги, не распознаваемые протоколом (Флаги),Это также приведет к разрушению.
  3. Неверный номер вывода постановления:еслиуказ(Edict)ввыход编号大Ввывод транзакциииз实际количество,Это будет считаться ошибкой,Вызвать разрушение.
  4. Неправильный идентификатор руны:еслисталкиватьсяприезжатьодин Идентификатор руны,Высота его блока равна нулю, но индекс транзакции не равен нулю.,Это также запустит механизм разрушения.
  5. Данные неполные:еслисуществоватьRunestonesиз解码过程серединасталкиватьсяприезжатьусеченныйизданные,Например, теги с отсутствующими значениями или неполные данные вставляются в указателе.,Разрушение также будет спровоцировано.

6.2 Процесс уничтожения

При срабатывании механизма уничтожения будут выполнены следующие действия:

  1. Уничтожение входных рун:все как ввод Включатьсуществоватькурокразрушатьмеханизмизторговлявруны将被“разрушать”,т.е. навсегда изъяты из обращения.
  2. Создание Надгробия:Несмотря на вступлениеизруны被разрушать,Но само образовавшееся надгробие (Кенотаф) не является совершенно пустым. Он может содержать поля, отличные от уничтоженных рун и указателей.,Такие как травление (Офорт) и литье (Мята).
  3. сокращение предложения:еслинадгробиеда由Втравление Операция некогдаи производить,Тогда руна травления будет иметь нулевой запас.,и не может быть брошено.
  4. Мяту пересчитать и сжечь:еслинадгробиеда由В铸造Операция некогдаи производить,Этот кастинг будет засчитываться в лимит кастинга (Cap).,А руны, которые попытаются отчеканить, будут уничтожены. Резюме: Протокол Rune Inscription — это инновационная технология блокчейна.,Он использует безопасность и децентрализованный характер сети Биткойн.,Предоставляет уникальную и эффективную основу для создания, передачи и торговли цифровыми активами. По сравнению с БРК-20,Имеет более низкую комиссию за обработку,Преимущество лучшей масштабируемости. Есть также много специальных существительных.,Это обычно не использовалось в предыдущей экосистеме блокчейна.,Нам нужно помнить:
  5. Офорт:используется для创建新руныизструктура,Содержит делимость, Количество предварительного майнинга、Имя руны и другие поля.
  6. RuneId (идентификатор руны):Формируется высотой блока и кодированием индекса транзакции.,Уникальность рун обеспечена.
  7. Указ:используется дляпередача руны,Включать Идентификатор руны, индекс количества и выпуска.
  8. Рунные камни:Включатьуказ和Необязательныйизтравление,Он является носителем протокольных сообщений.

проходитьTapScript+OP_RETURN:Используйте две транзакции, чтобытравление Контент в цепочке,убеждаться Чтонельзя подделать。而且一定记住两笔торговля之间изблокироватьвысокий差至少хотеть达приезжать6。

А при выполнении таких вещей, как Mint, переводы и т. д.,проходитьOP_RETURN实现了руныторговляиз Обмотка。

Наконец, я также запускаю проект с открытым исходным кодом «Протокол BxE», используя улучшенную версию протокола Ordinals в качестве основы, позволяющей сети Биткойн поддерживать смарт-контракты, полные по Тьюрингу EVM. Этот проект реализован в сети Биткойн первого уровня без необходимости построения сети второго уровня и может обеспечить децентрализованную безопасность на уровне Биткойн. Официальный документ доступен на GitHub, и протокол Runes также будет подключен к проекту, чтобы открыть экосистему. Заинтересованные друзья могут присоединиться к обсуждению вместе.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.