<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: k0k0ne</title>
    <description>The latest articles on DEV Community by k0k0ne (@k0k0ne).</description>
    <link>https://dev.to/k0k0ne</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2441796%2F6a99a6b7-8756-44f5-8d35-123eb1b5eb4f.png</url>
      <title>DEV Community: k0k0ne</title>
      <link>https://dev.to/k0k0ne</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/k0k0ne"/>
    <language>en</language>
    <item>
      <title>Understand Witness of Bitcoin -- A developer's view</title>
      <dc:creator>k0k0ne</dc:creator>
      <pubDate>Mon, 18 Nov 2024 04:10:19 +0000</pubDate>
      <link>https://dev.to/k0k0ne/understand-witness-of-bitcoin-a-developers-view-3jnh</link>
      <guid>https://dev.to/k0k0ne/understand-witness-of-bitcoin-a-developers-view-3jnh</guid>
      <description>&lt;p&gt;Understanding the witness concept is crucial for developers working with Bitcoin. However, most discussions focus on a general perspective. In this post, let's delve deeper into the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Witness
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;witness&lt;/strong&gt; refers to the part of a transaction that contains the unlocking scripts (also known as &lt;strong&gt;signatures&lt;/strong&gt; or &lt;strong&gt;witness data&lt;/strong&gt;) necessary to prove ownership of the funds being spent. This concept was introduced with the SegWit upgrade (BIP141) to help solve transaction malleability and improve scalability by segregating (separating) the signature data from the transaction data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A witness is a part of a tx.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Old tx HAS "witness": &lt;em&gt;A witness is the object that contains unlocking scripts&lt;/em&gt; (&lt;strong&gt;signatures&lt;/strong&gt; or &lt;strong&gt;witness data&lt;/strong&gt;)&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"marker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"flag"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"previous_tx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abcd1234..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"scriptSig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sequence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4294967295&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"outputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5000000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"scriptPubKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"76a914...88ac"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"witness"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"3045022100...022f01e5..."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"locktime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Above we have an example of transitional bitcoin tx. &lt;code&gt;scriptSig&lt;/code&gt; contains the signature and public key needed to unlock the output being spent, alike witness, while in a narrow definition, witness is a separate component in SegWit transactions.&lt;/p&gt;

&lt;p&gt;Here is an example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For a Segwit Tx: Witness is saved separately.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"marker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"flag"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"previous_tx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abcd1234..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"scriptSig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sequence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4294967295&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"outputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5000000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"scriptPubKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"76a914...88ac"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"witness"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"3045022100...022f01e5..."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"locktime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a SegWit transaction, the witness data is stored separately from the traditional parts of the transaction. The overall structure of a SegWit transaction includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Transaction Version&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marker and Flag:&lt;/strong&gt; Indicate the presence of witness data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input and Output Lists:&lt;/strong&gt; As in traditional transactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Witness Data:&lt;/strong&gt; Contains the actual witness for each input.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Locktime&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This separation means that the witness data does not affect the transaction's hash used for identifying the transaction, addressing the malleability issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  How is the Witness Constructed and Used?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Construction
&lt;/h3&gt;

&lt;p&gt;When creating a SegWit transaction, the witness is constructed by providing the necessary unlocking scripts for each input. Typically, this includes a signature and a public key for P2WPKH (Pay-to-Witness-Public-Key-Hash) transactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verification:&lt;/strong&gt; Nodes and miners use the witness data to verify that the spender has the right to spend the UTXO.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; Witness data is stored in the witness section of the transaction but can be pruned or segregated to save space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weight Units:&lt;/strong&gt; In calculating the transaction's weight, witness data is given a lower weight, incentivizing the use of SegWit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Viewing the Witness Data
&lt;/h3&gt;

&lt;p&gt;After constructing and signing the transaction, you can inspect the witness data using a tool like &lt;a href="https://developer.bitcoin.org/reference/rpc/decoderawtransaction.html" rel="noopener noreferrer"&gt;Bitcoin Core's &lt;code&gt;decoderawtransaction&lt;/code&gt;&lt;/a&gt; or online explorers that support SegWit.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bitcoin-cli decoderawtransaction &amp;lt;serialized_tx&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will output the transaction details, including the &lt;code&gt;vout&lt;/code&gt;, &lt;code&gt;vin&lt;/code&gt;, and crucially the &lt;code&gt;witness&lt;/code&gt; field for each input, showing the signature and public key used to unlock the funds.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>bitcoin</category>
      <category>witness</category>
    </item>
    <item>
      <title>(1) Overall structure / RGB Protocol Source Explained</title>
      <dc:creator>k0k0ne</dc:creator>
      <pubDate>Sat, 16 Nov 2024 13:17:15 +0000</pubDate>
      <link>https://dev.to/k0k0ne/1-overall-structure-rgb-protocol-source-explained-2j29</link>
      <guid>https://dev.to/k0k0ne/1-overall-structure-rgb-protocol-source-explained-2j29</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As a cryptography enthusiast, I am excited to launch a new series of articles that delve into the details of how the RGB protocol works.&lt;/p&gt;

&lt;p&gt;In this chapter, we'll begin by outlining the overall structure of the RGB project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ecosystem
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;RGB-WG/rgb&lt;/code&gt; project is structured as a comprehensive ecosystem of Rust libraries and tools, designed to support the development and operation of RGB smart contracts on the Bitcoin and Lightning networks. Here's an overview of the project structure, aimed at developers who are interested in learning about the RGB project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Core Libraries and Tools:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/AluVM/rust-aluvm" rel="noopener noreferrer"&gt;AluVM/rust-aluvm&lt;/a&gt;:&lt;/strong&gt; A functional registry-based RISC virtual machine, which serves as a foundational component for executing smart contracts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/BlockstreamResearch/secp256k1-zkp" rel="noopener noreferrer"&gt;BlockstreamResearch/secp256k1-zkp&lt;/a&gt;:&lt;/strong&gt; A cryptographic library providing elliptic curve operations, essential for secure key management and transaction signing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/BP-WG/bp-core" rel="noopener noreferrer"&gt;BP-WG/bp-core&lt;/a&gt;:&lt;/strong&gt; The core library for the Bitcoin Protocol, offering fundamental building blocks for blockchain interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/BP-WG/bp-std" rel="noopener noreferrer"&gt;BP-WG/bp-std&lt;/a&gt;:&lt;/strong&gt; A standard library extending &lt;code&gt;bp-core&lt;/code&gt;, providing additional functionality for Bitcoin protocol operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/BP-WG/bp-wallet" rel="noopener noreferrer"&gt;BP-WG/bp-wallet&lt;/a&gt;:&lt;/strong&gt; A minimalistic and standard-compliant Bitcoin wallet, integral for managing assets and transactions within the RGB ecosystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Smart Contract Infrastructure:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/LNP-BP/client_side_validation" rel="noopener noreferrer"&gt;LNP-BP/client_side_validation&lt;/a&gt;:&lt;/strong&gt; A library for client-side validation of smart contracts, ensuring security and correctness in contract executions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/RGB-WG/rgb-core" rel="noopener noreferrer"&gt;RGB-WG/rgb-core&lt;/a&gt;:&lt;/strong&gt; The core library for RGB smart contracts, handling the consensus layer and providing essential smart contract functionalities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/RGB-WG/rgb-interfaces" rel="noopener noreferrer"&gt;RGB-WG/rgb-interfaces&lt;/a&gt;:&lt;/strong&gt; A collection of standard RGB smart contract interfaces, facilitating the development of interoperable contracts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/RGB-WG/rgb-schemata" rel="noopener noreferrer"&gt;RGB-WG/rgb-schemata&lt;/a&gt;:&lt;/strong&gt; Official schemata for RGB smart contracts, defining the structure and data models for contracts.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilities and Supporting Libraries:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/rust-amplify/rust-amplify" rel="noopener noreferrer"&gt;rust-amplify/rust-amplify&lt;/a&gt;:&lt;/strong&gt; A library amplifying Rust's capabilities with additional generic trait implementations and type wrappers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/strict-types/strict-encoding" rel="noopener noreferrer"&gt;strict-types/strict-encoding&lt;/a&gt;:&lt;/strong&gt; A library for strict data encoding, ensuring data integrity and correctness in serialization processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/strict-types/strict-types" rel="noopener noreferrer"&gt;strict-types/strict-types&lt;/a&gt;:&lt;/strong&gt; Provides strict types for confined generalized algebraic data types (GADT), enhancing type safety in Rust applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/UBIDECO/ascii-armor" rel="noopener noreferrer"&gt;UBIDECO/ascii-armor&lt;/a&gt;:&lt;/strong&gt; A utility for ASCII armor encoding, useful for binary-to-text encoding of data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/UBIDECO/rust-baid64" rel="noopener noreferrer"&gt;UBIDECO/rust-baid64&lt;/a&gt;:&lt;/strong&gt; A library for URL-safe Base64 encoding, particularly useful for identity and data encoding in URLs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Final Product:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/RGB-WG/rgb" rel="noopener noreferrer"&gt;RGB-WG/rgb&lt;/a&gt;:&lt;/strong&gt; The ultimate product project, integrating all the above components to provide a complete solution for developing, deploying, and managing RGB smart contracts on Bitcoin and Lightning networks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Main Dependencies
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AluVM/rust-aluvm&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;ascii-armor (optional)&lt;/li&gt;
&lt;li&gt;baid64&lt;/li&gt;
&lt;li&gt;paste&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types (optional)&lt;/li&gt;
&lt;li&gt;sha2&lt;/li&gt;
&lt;li&gt;blake3&lt;/li&gt;
&lt;li&gt;ripemd&lt;/li&gt;
&lt;li&gt;secp256k1 (optional)&lt;/li&gt;
&lt;li&gt;curve25519-dalek (optional)&lt;/li&gt;
&lt;li&gt;half&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BlockstreamResearch/secp256k1-zkp&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(ignore)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BP-WG/bp-core&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workspace.dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types&lt;/li&gt;
&lt;li&gt;commit_verify&lt;/li&gt;
&lt;li&gt;single_use_seals&lt;/li&gt;
&lt;li&gt;bp-consensus&lt;/li&gt;
&lt;li&gt;bp-dbc&lt;/li&gt;
&lt;li&gt;bp-seals&lt;/li&gt;
&lt;li&gt;secp256k1&lt;/li&gt;
&lt;li&gt;serde_crate&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[bp-core] dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types (optional)&lt;/li&gt;
&lt;li&gt;commit_verify&lt;/li&gt;
&lt;li&gt;single_use_seals&lt;/li&gt;
&lt;li&gt;bp-consensus&lt;/li&gt;
&lt;li&gt;bp-dbc&lt;/li&gt;
&lt;li&gt;bp-seals&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BP-WG/bp-std&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workspace.dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;bech32&lt;/li&gt;
&lt;li&gt;secp256k1&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;commit_verify&lt;/li&gt;
&lt;li&gt;bp-consensus&lt;/li&gt;
&lt;li&gt;bp-core&lt;/li&gt;
&lt;li&gt;bp-invoice&lt;/li&gt;
&lt;li&gt;bp-derive&lt;/li&gt;
&lt;li&gt;descriptors&lt;/li&gt;
&lt;li&gt;psbt&lt;/li&gt;
&lt;li&gt;indexmap&lt;/li&gt;
&lt;li&gt;serde_crate&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[bp-std] dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;secp256k1&lt;/li&gt;
&lt;li&gt;bp-consensus&lt;/li&gt;
&lt;li&gt;bp-core (optional)&lt;/li&gt;
&lt;li&gt;bp-invoice&lt;/li&gt;
&lt;li&gt;bp-derive&lt;/li&gt;
&lt;li&gt;descriptors&lt;/li&gt;
&lt;li&gt;psbt&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BP-WG/bp-wallet&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workspace.dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;nonasync&lt;/li&gt;
&lt;li&gt;bp-std&lt;/li&gt;
&lt;li&gt;psbt&lt;/li&gt;
&lt;li&gt;descriptors&lt;/li&gt;
&lt;li&gt;bp-esplora&lt;/li&gt;
&lt;li&gt;bp-electrum&lt;/li&gt;
&lt;li&gt;serde_crate&lt;/li&gt;
&lt;li&gt;serde_json&lt;/li&gt;
&lt;li&gt;serde_yaml&lt;/li&gt;
&lt;li&gt;toml&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[bp-wallet] dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;nonasync&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;bp-std&lt;/li&gt;
&lt;li&gt;bp-esplora (optional)&lt;/li&gt;
&lt;li&gt;bp-electrum (optional)&lt;/li&gt;
&lt;li&gt;psbt&lt;/li&gt;
&lt;li&gt;descriptors&lt;/li&gt;
&lt;li&gt;sha2&lt;/li&gt;
&lt;li&gt;rand (optional)&lt;/li&gt;
&lt;li&gt;rpassword (optional)&lt;/li&gt;
&lt;li&gt;aes-gcm (optional)&lt;/li&gt;
&lt;li&gt;bip39 (optional)&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;li&gt;serde_json (optional)&lt;/li&gt;
&lt;li&gt;serde_yaml (optional)&lt;/li&gt;
&lt;li&gt;toml (optional)&lt;/li&gt;
&lt;li&gt;log&lt;/li&gt;
&lt;li&gt;colored (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;LNP-BP/client_side_validation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workspace.dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[client_side_validation] dependencies:

&lt;ul&gt;
&lt;li&gt;commit_verify&lt;/li&gt;
&lt;li&gt;single_use_seals&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RGB-WG/rgb-core&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;baid64&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types&lt;/li&gt;
&lt;li&gt;aluvm&lt;/li&gt;
&lt;li&gt;commit_verify&lt;/li&gt;
&lt;li&gt;single_use_seals&lt;/li&gt;
&lt;li&gt;bp-core&lt;/li&gt;
&lt;li&gt;secp256k1-zkp&lt;/li&gt;
&lt;li&gt;mime&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;li&gt;chrono&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RGB-WG/rgb-interfaces&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types&lt;/li&gt;
&lt;li&gt;aluvm&lt;/li&gt;
&lt;li&gt;bp-core&lt;/li&gt;
&lt;li&gt;rgb-std&lt;/li&gt;
&lt;li&gt;chrono&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;li&gt;serde_json&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RGB-WG/rgb-schemata&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types&lt;/li&gt;
&lt;li&gt;aluvm&lt;/li&gt;
&lt;li&gt;bp-core&lt;/li&gt;
&lt;li&gt;rgb-std&lt;/li&gt;
&lt;li&gt;rgb-interfaces&lt;/li&gt;
&lt;li&gt;chrono&lt;/li&gt;
&lt;li&gt;serde&lt;/li&gt;
&lt;li&gt;serde_json&lt;/li&gt;
&lt;li&gt;sha2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RGB-WG/rgb&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workspace.dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;nonasync&lt;/li&gt;
&lt;li&gt;baid64&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;strict_types&lt;/li&gt;
&lt;li&gt;commit_verify&lt;/li&gt;
&lt;li&gt;bp-core&lt;/li&gt;
&lt;li&gt;bp-std&lt;/li&gt;
&lt;li&gt;bp-electrum&lt;/li&gt;
&lt;li&gt;bp-esplora&lt;/li&gt;
&lt;li&gt;bp-wallet&lt;/li&gt;
&lt;li&gt;rgb-std&lt;/li&gt;
&lt;li&gt;rgb-psbt&lt;/li&gt;
&lt;li&gt;indexmap&lt;/li&gt;
&lt;li&gt;chrono&lt;/li&gt;
&lt;li&gt;serde_crate&lt;/li&gt;
&lt;li&gt;serde_yaml&lt;/li&gt;
&lt;li&gt;log&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[rgb-runtime] dependencies:

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;nonasync&lt;/li&gt;
&lt;li&gt;baid64&lt;/li&gt;
&lt;li&gt;bp-electrum (optional)&lt;/li&gt;
&lt;li&gt;commit_verify&lt;/li&gt;
&lt;li&gt;strict_types&lt;/li&gt;
&lt;li&gt;bp-core&lt;/li&gt;
&lt;li&gt;bp-std&lt;/li&gt;
&lt;li&gt;bp-esplora (optional)&lt;/li&gt;
&lt;li&gt;bp-wallet&lt;/li&gt;
&lt;li&gt;rgb-std&lt;/li&gt;
&lt;li&gt;rgb-psbt&lt;/li&gt;
&lt;li&gt;indexmap&lt;/li&gt;
&lt;li&gt;chrono&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;li&gt;serde_yaml (optional)&lt;/li&gt;
&lt;li&gt;log (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;rust-amplify/rust-amplify&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;libc (optional)&lt;/li&gt;
&lt;li&gt;amplify_derive (optional)&lt;/li&gt;
&lt;li&gt;amplify_syn (optional)&lt;/li&gt;
&lt;li&gt;amplify_num&lt;/li&gt;
&lt;li&gt;amplify_apfloat (optional)&lt;/li&gt;
&lt;li&gt;ascii&lt;/li&gt;
&lt;li&gt;rand (optional)&lt;/li&gt;
&lt;li&gt;serde_crate (optional)&lt;/li&gt;
&lt;li&gt;stringly_conversions (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;strict-types/strict-encoding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;serde_crate&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;strict-types/strict-types&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;ascii-armor (optional)&lt;/li&gt;
&lt;li&gt;baid64 (optional)&lt;/li&gt;
&lt;li&gt;strict_encoding&lt;/li&gt;
&lt;li&gt;vesper-lang&lt;/li&gt;
&lt;li&gt;indexmap&lt;/li&gt;
&lt;li&gt;sha2&lt;/li&gt;
&lt;li&gt;serde (optional)&lt;/li&gt;
&lt;li&gt;serde_json (optional)&lt;/li&gt;
&lt;li&gt;serde_yaml (optional)&lt;/li&gt;
&lt;li&gt;toml (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UBIDECO/ascii-armor&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;strict_encoding (optional)&lt;/li&gt;
&lt;li&gt;baid64 (optional)&lt;/li&gt;
&lt;li&gt;base64 (optional)&lt;/li&gt;
&lt;li&gt;base85 (optional)&lt;/li&gt;
&lt;li&gt;sha2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UBIDECO/rust-baid64&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amplify&lt;/li&gt;
&lt;li&gt;base64&lt;/li&gt;
&lt;li&gt;sha2&lt;/li&gt;
&lt;li&gt;mnemonic&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Futhermore
&lt;/h2&gt;

&lt;p&gt;In the subsequent chapters, I'll select topics to explore in depth. Due to my busy schedule, the topics will be chosen randomly but will cover the material from the ground up.&lt;/p&gt;

</description>
      <category>bitcoin</category>
      <category>rgb</category>
      <category>ln</category>
    </item>
  </channel>
</rss>
