<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>KozukiOden</title>
        <link>https://paragraph.com/@kozukioden</link>
        <description>undefined</description>
        <lastBuildDate>Tue, 14 Apr 2026 18:54:02 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>KozukiOden</title>
            <url>https://storage.googleapis.com/papyrus_images/9051b662aefb4a9f9275b83160dcef8c205ecdb05ec894e4502bab676d9bd3f3.png</url>
            <link>https://paragraph.com/@kozukioden</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[The Anything Chatbot]]></title>
            <link>https://paragraph.com/@kozukioden/the-anything-chatbot</link>
            <guid>dPvNvP2RMx8y2n28ywFb</guid>
            <pubDate>Sun, 01 Oct 2023 22:01:41 GMT</pubDate>
            <description><![CDATA[Creating a personalized chatbot has become relatively straightforward using libraries like LangChain. In fact you can develop your own full-stack javascript/typescript application in a few hours using the LangChain library. In the text below I will explain the steps I took. In this case I used service that also does the predictions. If you have a GPU with enough RAM you can run the model of your choice directly on the GPUTypical Chatbot StructurePrepare Vector StoreWe will be using the langch...]]></description>
            <content:encoded><![CDATA[<p>Creating a personalized chatbot has become relatively straightforward using libraries like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://js.langchain.com/docs/get_started/introduction">LangChain</a>. In fact you can develop your own full-stack javascript/typescript application in a few hours using the LangChain library. In the text below I will explain the steps I took. In this case I used service that also does the predictions. If you have a GPU with enough RAM you can run the model of your choice directly on the GPU</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e51d80b5a6c2adac2e049a0b772a58dbbf62aa03871e1d0e9a15a5466f555faf.png" alt="Typical Chatbot Structure" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Typical Chatbot Structure</figcaption></figure><h2 id="h-prepare-vector-store" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Prepare Vector Store</h2><p>We will be using the langchain conversational retrieval chain, to use a conversational retrieval chain we need to create a vector store. To do this I used pinecone as the index for the vectors.</p><p>Create a PineCone account then create an index with the dimensions of the embeddings you will be using. In this case the dimensions are 768</p><p>First initialize pinecone make sure to do the necessary python installs to get the pinecone module</p><pre data-type="codeBlock" text="!pip install langchain==0.0.189
!pip install pinecone-client
!pip install openai
!pip install tiktoken
!pip install nest_asyncio
"><code><span class="hljs-operator">!</span>pip install langchain<span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-number">0</span><span class="hljs-number">.0</span><span class="hljs-number">.189</span>
<span class="hljs-operator">!</span>pip install pinecone<span class="hljs-operator">-</span>client
<span class="hljs-operator">!</span>pip install openai
<span class="hljs-operator">!</span>pip install tiktoken
<span class="hljs-operator">!</span>pip install nest_asyncio
</code></pre><pre data-type="codeBlock" text="import pinecone 

# initialize pinecone
pinecone.init(
    api_key=&quot;PINECONE_API_KEY&quot;,  # find at app.pinecone.io
    environment=&quot;ENVIRONMENT_NAME&quot;  # next to api key in console
)
"><code>import pinecone 

<span class="hljs-comment"># initialize pinecone</span>
pinecone.init(
    <span class="hljs-attr">api_key</span>=<span class="hljs-string">"PINECONE_API_KEY"</span>,  <span class="hljs-comment"># find at app.pinecone.io</span>
    <span class="hljs-attr">environment</span>=<span class="hljs-string">"ENVIRONMENT_NAME"</span>  <span class="hljs-comment"># next to api key in console</span>
)
</code></pre><p>Load the data to be used in the vector store, this example uses a pdf loader</p><pre data-type="codeBlock" text="import nest_asyncio
nest_asyncio.apply()


from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader(&quot;/Path/To/PDF&quot;)
pages = loader.load_and_split()
"><code><span class="hljs-keyword">import</span> <span class="hljs-title">nest_asyncio</span>
<span class="hljs-title">nest_asyncio</span>.<span class="hljs-title">apply</span>()


<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">langchain</span>.<span class="hljs-title">document_loaders</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">PyPDFLoader</span>

<span class="hljs-title">loader</span> <span class="hljs-operator">=</span> <span class="hljs-title">PyPDFLoader</span>(<span class="hljs-string">"/Path/To/PDF"</span>)
<span class="hljs-title">pages</span> <span class="hljs-operator">=</span> <span class="hljs-title">loader</span>.<span class="hljs-title">load_and_split</span>()
</code></pre><p>Split the loaded text into smaller chunks</p><pre data-type="codeBlock" text="from langchain.text_splitter import RecursiveCharacterTextSplitter
import json

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size = 1000,
    chunk_overlap  = 200,
)

docs_chunks = text_splitter.split_documents(pages)
"><code><span class="hljs-keyword">from</span> langchain.text_splitter <span class="hljs-keyword">import</span> <span class="hljs-title">RecursiveCharacterTextSplitter</span>
<span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">json</span>

<span class="hljs-title">text_splitter</span> <span class="hljs-operator">=</span> <span class="hljs-title">RecursiveCharacterTextSplitter</span>(
    <span class="hljs-title">chunk_size</span> <span class="hljs-operator">=</span> 1000,
    <span class="hljs-title">chunk_overlap</span>  <span class="hljs-operator">=</span> 200,
)

<span class="hljs-title">docs_chunks</span> <span class="hljs-operator">=</span> <span class="hljs-title">text_splitter</span>.<span class="hljs-title">split_documents</span>(<span class="hljs-title">pages</span>)
</code></pre><p>Create the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture">embeddings</a></p><pre data-type="codeBlock" text="from langchain.embeddings import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model_name=&apos;gpt2&apos;)
"><code><span class="hljs-keyword">from</span> langchain.embeddings <span class="hljs-keyword">import</span> <span class="hljs-title">HuggingFaceEmbeddings</span>

<span class="hljs-title">embeddings</span> <span class="hljs-operator">=</span> <span class="hljs-title">HuggingFaceEmbeddings</span>(<span class="hljs-title">model_name</span><span class="hljs-operator">=</span><span class="hljs-string">'gpt2'</span>)
</code></pre><p>Create the vectors in your pinecone index</p><pre data-type="codeBlock" text="from langchain.vectorstores import Pinecone

index_name = &quot;name of index created on pinecone&quot;

docsearch = Pinecone.from_texts(split_text, embeddings, index_name=index_name)
"><code><span class="hljs-keyword">from</span> langchain.vectorstores <span class="hljs-keyword">import</span> <span class="hljs-title">Pinecone</span>

<span class="hljs-title">index_name</span> <span class="hljs-operator">=</span> <span class="hljs-string">"name of index created on pinecone"</span>

<span class="hljs-title">docsearch</span> <span class="hljs-operator">=</span> <span class="hljs-title">Pinecone</span>.<span class="hljs-title">from_texts</span>(<span class="hljs-title">split_text</span>, <span class="hljs-title">embeddings</span>, <span class="hljs-title">index_name</span><span class="hljs-operator">=</span><span class="hljs-title">index_name</span>)
</code></pre><h2 id="h-create-javascript-app-to-use-the-vector-store" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Create javascript app to use the vector store</h2><p>The frontend is a simple ui written in react that a user can type questions and see responses from the model. When the user types a question and then clicks on the senf button. A POST request to an endpoint within the application with the user’s question and the chat history for additional context. The backend is written in typescript.</p><p>The backend has two parts.</p><p>First, The API endpoint that calls the conversational QA chain</p><pre data-type="codeBlock" text="import { NextResponse } from &apos;next/server&apos;;
import {chain} from &quot;@/utils/chain&quot;;
import {Message} from &quot;@/types/message&quot;;

//endpoint to call the conversational qa chain
export async function POST(request: Request) {

    const body = await request.json();
    const question: string = body.query;
    const history: Message[] = body.history ?? []
  
    const res = await chain.call({
        question: question,
        chat_history: history.map(h =&gt; h.content).join(&quot;\n&quot;),
    });

 
    return NextResponse.json({role: &quot;assistant&quot;, content: res.text, links: &quot;&quot;})
}
"><code><span class="hljs-keyword">import</span> { <span class="hljs-title">NextResponse</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">'next/server'</span>;
<span class="hljs-keyword">import</span> {<span class="hljs-title">chain</span>} <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@/utils/chain"</span>;
<span class="hljs-keyword">import</span> {<span class="hljs-title">Message</span>} <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@/types/message"</span>;

<span class="hljs-comment">//endpoint to call the conversational qa chain</span>
export async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">POST</span>(<span class="hljs-params">request: Request</span>) </span>{

    const body <span class="hljs-operator">=</span> await request.json();
    const question: <span class="hljs-keyword">string</span> <span class="hljs-operator">=</span> body.query;
    const history: Message[] <span class="hljs-operator">=</span> body.history ?? []
  
    const res <span class="hljs-operator">=</span> await chain.<span class="hljs-built_in">call</span>({
        question: question,
        chat_history: history.map(h <span class="hljs-operator">=</span><span class="hljs-operator">></span> h.content).join(<span class="hljs-string">"\n"</span>),
    });

 
    <span class="hljs-keyword">return</span> NextResponse.json({role: <span class="hljs-string">"assistant"</span>, content: res.text, links: <span class="hljs-string">""</span>})
}
</code></pre><p>Second, the conversational QA chain also written in typescript; it utilizes the LangChain.js package. In this example I will be using the AI21 jurassic model as the llm for the conversational retrieval chain, here are some other <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://js.langchain.com/docs/modules/model_io/models/llms/integrations/ai21">options</a>.</p><pre data-type="codeBlock" text="import {pinecone} from &quot;@/utils/pinecone-client&quot;;
import {PineconeStore} from &quot;langchain/vectorstores/pinecone&quot;;
import {ConversationalRetrievalQAChain} from &quot;langchain/chains&quot;;
import{AI21} from &quot;langchain/llms/ai21&quot;
import { HuggingFaceInferenceEmbeddings } from &quot;langchain/embeddings/hf&quot;;

async function initChain() {
    const model = new AI21({
        model:&quot;j2-ultra&quot;
    })

    //initialize pinecone index
    const pineconeIndex = pinecone.Index(process.env.PINECONE_INDEX ?? &apos;&apos;);

    /* call vectorstore*/
    const vectorStore = await PineconeStore.fromExistingIndex(
        new HuggingFaceInferenceEmbeddings({}),
        {
            pineconeIndex: pineconeIndex,
            textKey: &apos;text&apos;,
        },
    );

    return ConversationalRetrievalQAChain.fromLLM(
        model,
        vectorStore.asRetriever(),
        {returnSourceDocuments: true}
    );
}

export const chain = await initChain()
"><code><span class="hljs-keyword">import</span> {<span class="hljs-title">pinecone</span>} <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@/utils/pinecone-client"</span>;
<span class="hljs-keyword">import</span> {<span class="hljs-title">PineconeStore</span>} <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"langchain/vectorstores/pinecone"</span>;
<span class="hljs-keyword">import</span> {<span class="hljs-title">ConversationalRetrievalQAChain</span>} <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"langchain/chains"</span>;
<span class="hljs-keyword">import</span>{<span class="hljs-title">AI21</span>} <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"langchain/llms/ai21"</span>
<span class="hljs-title"><span class="hljs-keyword">import</span></span> { <span class="hljs-title">HuggingFaceInferenceEmbeddings</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"langchain/embeddings/hf"</span>;

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">initChain</span>(<span class="hljs-params"></span>) </span>{
    const model <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> AI21({
        model:<span class="hljs-string">"j2-ultra"</span>
    })

    <span class="hljs-comment">//initialize pinecone index</span>
    const pineconeIndex <span class="hljs-operator">=</span> pinecone.Index(process.env.PINECONE_INDEX ?? <span class="hljs-string">''</span>);

    <span class="hljs-comment">/* call vectorstore*/</span>
    const vectorStore <span class="hljs-operator">=</span> await PineconeStore.fromExistingIndex(
        <span class="hljs-keyword">new</span> HuggingFaceInferenceEmbeddings({}),
        {
            pineconeIndex: pineconeIndex,
            textKey: <span class="hljs-string">'text'</span>,
        },
    );

    <span class="hljs-keyword">return</span> ConversationalRetrievalQAChain.fromLLM(
        model,
        vectorStore.asRetriever(),
        {returnSourceDocuments: <span class="hljs-literal">true</span>}
    );
}

export const chain <span class="hljs-operator">=</span> await initChain()
</code></pre><p>Run your application and you have an llm that can answer questions from the documents in your vector store.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Public Blockchains and Truth]]></title>
            <link>https://paragraph.com/@kozukioden/public-blockchains-and-truth</link>
            <guid>cnSskqHGR3YQMteAD3Zw</guid>
            <pubDate>Wed, 25 May 2022 00:42:11 GMT</pubDate>
            <description><![CDATA[It’s easy to get distracted by the ‘technology’ when assessing a public blockchain i.e. how many transactions per second it can process and how cheap it is to use, while these are nice to have, in my opinion sacrificing on the ability for individuals to be able to run a node and verify transactions in their home is not worth whatever improvements in scalability are achieved at the base layer. If performance and cost are super important to you, then might as well run it on AWS or use a rollup ...]]></description>
            <content:encoded><![CDATA[<p>It’s easy to get distracted by the ‘technology’ when assessing a public blockchain i.e. how many transactions per second it can process and how cheap it is to use, while these are nice to have, in my opinion sacrificing on the ability for individuals to be able to run a node and verify transactions in their home is not worth whatever improvements in scalability are achieved at the base layer. If performance and cost are super important to you, then might as well run it on AWS or use a rollup with a public blockchain for consensus and security.</p><p>To understand why public blockchains are important let’s look at the current method of maintaining a ledger. Whether it is the ledger of your federal government’s spending or even the database that stores your instagram account information. The problem with most ledgers today is that they tend to be a double entry system where whoever controls the books/database can always go back and edit the records without anyone being aware and with no consequences. This is why there is a multibillion dollar industry of auditors to ensure what an individual or corporation reports is on the up and up and even these auditors occasionally get it wrong see <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.wikipedia.org/wiki/Enron"><strong>Enron</strong></a>.</p><p>Public blockchains solve this problem by introducing a triple entry accounting system, where after a few confirmations it is highly improbable a transaction entered in the ledger can be edited or reversed, instead of having human auditors who might get it wrong the nodes that verify transactions are the auditors ensuring the transaction meets the protocols requirements before it is recorded in the ledger. This, to me is ultimately one of the key changes introduced by public blockchains. you can trust what you are seeing is the truth and has not been altered.</p><p>The potential this presents to change how we fundamentally interact as a species is immense.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Basic Wallet Security]]></title>
            <link>https://paragraph.com/@kozukioden/basic-wallet-security</link>
            <guid>LdaBnMgllccTT01rAK5i</guid>
            <pubDate>Thu, 14 Apr 2022 22:32:11 GMT</pubDate>
            <description><![CDATA[While having a public ledger is useful in many cases but in some cases addresses with non zero balances can become targets for scammers or hackers to relieve users of their funds. Your wallet is the interface used to interact with your private keys on a blockchain. If you own crypto assets worth more than $200 and you have made the decision to self-custody, you should absolutely own a hardware wallet! Hot wallets are just not good enough! With Hot Wallets such as a metamask wallet, if the pas...]]></description>
            <content:encoded><![CDATA[<p>While having a public ledger is useful in many cases but in some cases addresses with non zero balances can become targets for scammers or hackers to relieve users of their funds. Your wallet is the interface used to interact with your private keys on a blockchain.</p><p>If you own crypto assets worth more than $200 and you have made the decision to self-custody, you should absolutely own a hardware wallet! Hot wallets are just not good enough!</p><p>With Hot Wallets such as a metamask wallet, if the password for the account or email address is compromised, the keys may also be compromised and a bad actor can sign transactions without the owner knowing.</p><p>However with cold wallets the keys never leave the wallet and any transaction that need to be signed with the keys in the wallet need the user to physically interact with the wallet.</p><p>The two top choices are <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://trezor.io/">Trezor</a> or <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ledger.com/">Ledger</a>. Personally, I prefer the Trezor for its simplicity.</p><p><strong>Pro Tip: Keep your main stash in the cold wallet and use the hot wallet for day to day interactions or experiments.</strong> <strong>Also never enter your seed phrase anywhere!</strong></p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Importance of Self-Custody]]></title>
            <link>https://paragraph.com/@kozukioden/importance-of-self-custody</link>
            <guid>OMIbMkf0KzAqk5VnxWJq</guid>
            <pubDate>Mon, 11 Apr 2022 04:02:36 GMT</pubDate>
            <description><![CDATA[Today, the easiest way to buy and store your cryptocurrency is through an established cryptocurrency exchange like coinbase or binance, however owning any digital asset or digital representation of an asset through a third party can be risky as the only way to know if the balance is real and not just numbers on a screen is by trying to redeem all your funds. Bank accounts are useful because they made it easier for people to manage their cashflows without having to touch physical cash, however...]]></description>
            <content:encoded><![CDATA[<p>Today, the easiest way to buy and store your cryptocurrency is through an established cryptocurrency exchange like coinbase or binance, however owning any digital asset or digital representation of an asset through a third party can be risky as the only way to know if the balance is real and not just numbers on a screen is by trying to redeem all your funds.</p><p>Bank accounts are useful because they made it easier for people to manage their cashflows without having to touch physical cash, however, the user still has no way of knowing for sure whether the current balance they see on the screen is real till they try to redeem their funds.</p><p>Blockchain assets are useful because the owner can take custody of their assets by using a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.gemini.com/cryptopedia/crypto-wallets-hot-cold">hot or a cold wallet</a> with minimal physical constraints. The balance of this wallet is also easily verifiable by checking the address on your preferred block explorer or you can participate in the network by running a node which can also check balances.</p><p>Traditional financial primitives such as swaps, yield farming, borrowing and lending being facilitated by blockchains and their asset enable the individual to retain full control of their assets while using these primitives. The implications of this might impact how individuals interact with traditional bank accounts and the existing methods of accessing the associated primitives.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Supporting A Decentralized Blockchain]]></title>
            <link>https://paragraph.com/@kozukioden/supporting-a-decentralized-blockchain</link>
            <guid>joTVllZ22x1l4UgBpL8I</guid>
            <pubDate>Wed, 06 Apr 2022 01:33:30 GMT</pubDate>
            <description><![CDATA[One of the reasons decentralized public blockchains are useful is because theoretically, anyone can download a copy of the ledger(blockchain), sync up to the present block and then validate current transactions. What better way to make sure the cryptocurrency you just bought isn’t all smoke and mirrors than running your own node and participating in the network. However, depending on the computing requirements of the protocol and the length of time the protocol has been running, it can become...]]></description>
            <content:encoded><![CDATA[<p>One of the reasons decentralized public blockchains are useful is because theoretically, anyone can download a copy of the ledger(blockchain), sync up to the present block and then validate current transactions.</p><p>What better way to make sure the cryptocurrency you just bought isn’t all smoke and mirrors than running your own node and participating in the network.</p><p>However, depending on the computing requirements of the protocol and the length of time the protocol has been running, it can become difficult for most people to run computers or buy enough storage to keep up with the information stored in the chain. i.e. is the protocol socially scalable(easy for most people to run a node) or computationally scalable(can handle a large throughput but requires special computers most cannot afford).</p><p>The current size of the Ethereum Classic ledger is about <strong>300GB</strong> and it can be run on a computer with <strong>4GB of RAM</strong>. The storage will have to be a SSD drive as mechanical drives can not keep up with the disk read/write requirements of mainnet.</p><p>PS: I initially tried syncing to the tip of the chain which was about block 14,000,000 with a mechanical drive. it’s been a week and I am only at block 3,000,000.</p><p><strong>My Setup</strong></p><ul><li><p>Computer: 16GB RAM M1 Mac Mini</p></li><li><p>Ethereum Classic Client: Hyperledger Besu, this <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/etccooperative/how-to-setup-an-ethereum-classic-node-142a8d3c401c">guide</a> explains how to setup the node</p></li><li><p>Storage: Samsung T7 SSD</p></li></ul>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[MILE XII Guide]]></title>
            <link>https://paragraph.com/@kozukioden/mile-xii-guide</link>
            <guid>BBTDBKaE4LDvHo42Hoza</guid>
            <pubDate>Sat, 12 Feb 2022 13:15:46 GMT</pubDate>
            <description><![CDATA[Make sure your MetaMask Network is set to Ethereum Classic. Here’s HowOpen Mile XII in the MetaMask browser on your mobile phone or Google Chrome with the MetaMask extension installedThe home page shows all listed NFTs. The ‘Buy’ button won’t work if you have insufficient funds in the wallet. The wallet will always ask before you confirm any transactionGo to List NFT, to mint an itemThere is a 0.02ETC listing feeOnly 1 NFT can be minted at a timeGo to My NFTs to see items you ownOnce the NFT ...]]></description>
            <content:encoded><![CDATA[<ol><li><p>Make sure your MetaMask Network is set to Ethereum Classic. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherplan.com/2021/03/02/how-to-connect-metamask-to-ethereum-classic/15512/">Here’s How</a></p></li><li><p>Open <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://milexii.vercel.app">Mile XII</a> in the MetaMask browser on your mobile phone or Google Chrome with the MetaMask extension installed</p></li><li><p>The home page shows all listed NFTs. The ‘Buy’ button won’t work if you have insufficient funds in the wallet. The wallet will always ask before you confirm any transaction</p></li><li><p>Go to List NFT, to mint an item</p></li><li><p>There is a 0.02ETC listing fee</p></li><li><p>Only 1 NFT can be minted at a time</p></li><li><p>Go to My NFTs to see items you own</p></li><li><p>Once the NFT is minted the market address owns the NFT till it is purchased</p></li><li><p>When the listed item is purchased, the amount the item was listed for is transferred to the wallet that listed it</p></li><li><p>Dashboard shows all items listed by the creator</p></li></ol>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[How to create a token URI]]></title>
            <link>https://paragraph.com/@kozukioden/how-to-create-a-token-uri</link>
            <guid>TxwfxGV87bgoVeZoYEOu</guid>
            <pubDate>Wed, 09 Feb 2022 22:20:25 GMT</pubDate>
            <description><![CDATA[Creating an NFT using the ERC721 standard means that the token created also needs a token URI Things you’ll need. This list is not extensive and will depend on how much metadata you want your token to haveThe image fileThe image nameThe image descriptionAn IPFS path for the image e.g. ipfs://QmVDae8m3X6HZf9v2Jnyqe53Xpj64vEvQDUci1NpX1KrcsThe first thing you’ll need to do is upload the image to an IPFS node. You can create a pinata account to do this. Once the image is uploaded and pinned on Pi...]]></description>
            <content:encoded><![CDATA[<p>Creating an NFT using the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.openzeppelin.com/contracts/2.x/api/token/erc721">ERC721</a> standard means that the token created also needs a token <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.wikipedia.org/wiki/Uniform_Resource_Identifier">URI</a></p><p>Things you’ll need. This list is not extensive and will depend on how much metadata you want your token to have</p><ol><li><p>The image file</p></li><li><p>The image name</p></li><li><p>The image description</p></li><li><p>An IPFS path for the image e.g. ipfs://QmVDae8m3X6HZf9v2Jnyqe53Xpj64vEvQDUci1NpX1Krcs</p></li></ol><p>The first thing you’ll need to do is upload the image to an IPFS node. You can create a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.pinata.cloud/">pinata</a> account to do this. Once the image is uploaded and pinned on Pinata you will get a CID that looks like this ‘QmVDae8m3X6HZf9v2Jnyqe53Xpj64vEvQDUci1NpX1Krcs’</p><p>Then create the json file that will contain the metadata. e.g. the metadata defined below only has three fields - name, description and image.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b26cf3ae6a57f88eaa2372c242391e7dfbfa3c670848f3f1fc6af13d126236ab.png" alt="sample metadata" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">sample metadata</figcaption></figure><p>Upload the json file to a folder on an IPFS node as well, you will also have a CID for the file. Once this is done your token URI will be in the format <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ipfs.io/ipfs/folderCID/metadata.json">https://ipfs.io/ipfs/folderCID/metadata.json</a> . This URI can now be used to mint your token</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6cfb1b53e40f305c710ad9cd3775ed87cee195e832f36cc7b7e30dcd24d68955.png" alt="Minted Token" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Minted Token</figcaption></figure>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Smart Contracts without the website]]></title>
            <link>https://paragraph.com/@kozukioden/smart-contracts-without-the-website</link>
            <guid>9aDA5FMhpOlm4bkGLX5W</guid>
            <pubDate>Fri, 28 Jan 2022 01:45:00 GMT</pubDate>
            <description><![CDATA[A typical Ethereum Classic web application has two main parts. The first is the client side which is what you see when the website loads in a browser. The other is the back end or server side which is typically written in solidity and lives on the blockchain. There are two ways I know of that you can interact with a smart contract on Ethereum Classic without the client side. The First - Blockscout In blockscout find the contract address for the application and then go to the write section of ...]]></description>
            <content:encoded><![CDATA[<p>A typical Ethereum Classic web application has two main parts. The first is the client side which is what you see when the website loads in a browser. The other is the back end or server side which is typically written in solidity and lives on the blockchain.</p><p>There are two ways I know of that you can interact with a smart contract on Ethereum Classic without the client side.</p><p><strong>The First - Blockscout</strong></p><p>In <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blockscout.com/etc/mainnet/">blockscout</a> find the contract address for the application and then go to the write section of the contract address e.g. the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blockscout.com/etc/mainnet/address/0x59E34EF31049565D041Aec6137F40f518c2D47c1/write-contract">write section</a> of this NFT smart contract. All of the write functions available on the client side will be accessible.</p><p><strong>The Second - MyEtherWallet</strong></p><p>You can also interact with the smart contract using its <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.quicknode.com/guides/solidity/what-is-an-abi">ABI</a> and the contract address. To do this:</p><ol><li><p>Connect your Ethereum Classic wallet to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.myetherwallet.com/">myetherwallet</a></p></li><li><p>Go to the contract section and click on interact with contract</p></li><li><p>Enter the smart contracts ABI and contract address</p></li><li><p>On the next screen you will have access to all the available write functions in the smart contract</p></li></ol>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Decentralized blockchains and the interactions they enable]]></title>
            <link>https://paragraph.com/@kozukioden/decentralized-blockchains-and-the-interactions-they-enable</link>
            <guid>8eb4EXuWXVSQzzOpvG1A</guid>
            <pubDate>Thu, 27 Jan 2022 01:31:43 GMT</pubDate>
            <description><![CDATA[The more I research the popular blockchains today, I keep coming back to the principle that the point of this whole movement is decentralization. The challenge will be maintaining decentralization (social scalability) while having computational scalability. Decentralization means the blockchain will stay censorship resistant, trustless, permissionless and be able to stand the test of time. The invention of Bitcoin has shown that the issuance of a digitally native means of exchange can be done...]]></description>
            <content:encoded><![CDATA[<p>The more I research the popular blockchains today, I keep coming back to the principle that the point of this whole movement is decentralization. The challenge will be maintaining decentralization (social scalability) while having computational scalability. Decentralization means the blockchain will stay censorship resistant, trustless, permissionless and be able to stand the test of time.</p><p>The invention of Bitcoin has shown that the issuance of a digitally native means of exchange can be done without any trust assumptions for its issuance schedule or the balances of its participants. There are many working parts that makes this possible but the main part is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/nakamo-to/nakamoto-consensus-21cd304f96ff">Nakamoto Consensus</a>. Most digital assets backed by a blockchain can be assigned a dollar value because they are traded on some type of cryptocurrency exchange and hence go through the price discovery process(some say this somewhat cheapens the assets by only looking at its dollar value).</p><p>Then Ethereum came along, also with the ability to issue digitally native means of exchanges as well as a public ledger of transactions. This time however, you can write any software application you can think of and deploy it to the blockchain. The implications of this are significant. Decentralized blockchains are trustless and permissionless meaning anyone, anywhere in the world can deploy a smart contract to Ethereum Mainnet and is able to start generating income from that application without having to ask for access or file any sort of documentations.</p><p>For as long as the Ethereum blockchain stays active, the user’s application can not be censored or de-platformed. Many many more verticals will arise from this but the largest of them today is the decentralized financial applications we see today that enable asset swaps and lending.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Gas Prices & Nonces]]></title>
            <link>https://paragraph.com/@kozukioden/gas-prices-nonces</link>
            <guid>3e13Adfo5jgxlZTS1KoP</guid>
            <pubDate>Sat, 15 Jan 2022 13:47:03 GMT</pubDate>
            <description><![CDATA[If you have interacted with a smart contract on Ethereum Mainnet, you have probably heard of gas or had to pay gas for your transaction. Gas is typically measured in gwei. Demand for block space on Ethereum Mainnet currently outpaces its supply, so the richest users tend to pay a premium to put their transactions through first. Many believe this will likely be an end-state for many of the monolithic blockchains existing today that claim to solve scaling. Block space will continue to be a prem...]]></description>
            <content:encoded><![CDATA[<p>If you have interacted with a smart contract on Ethereum Mainnet, you have probably heard of gas or had to pay gas for your transaction. Gas is typically measured in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gwei.io/">gwei</a>. Demand for block space on Ethereum Mainnet currently outpaces its supply, so the richest users tend to pay a premium to put their transactions through first. Many believe this will likely be an end-state for many of the monolithic blockchains existing today that claim to solve scaling. Block space will continue to be a premium and as more users are onboarded, the richest users will outbid others for block space.</p><p>If you’re like me and counting your coins, for low priority transactions, you can edit how much gas you’re willing to pay for the transaction through <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metamask.zendesk.com/hc/en-us/articles/360015488771-How-to-adjust-Gas-Price-and-Gas-Limit">Metamask</a>. This sounds nice if you could keep sending limit gwei transactions where the sequence the transaction was submitted does not affect the execution order; you would never have to pay high gas fees again. However, because of something called a transaction nonce, this is not possible.</p><p>A nonce is what the Ethereum Virtual Machine uses to keep track of the number of transactions an address has sent, the virtual machine does not let a pending transaction with a higher nonce execute before one with a lower nonce e.g. transaction with nonce 2 will not execute before a transaction with nonce 1.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[How to 'backup' your NFT]]></title>
            <link>https://paragraph.com/@kozukioden/how-to-backup-your-nft</link>
            <guid>EZeDKGCoD5DFmpvIFQK0</guid>
            <pubDate>Sat, 08 Jan 2022 23:26:21 GMT</pubDate>
            <description><![CDATA[While a blockchain can cryptographically prove which address a token belongs to, if this token represents a digital image then it is likely the file displayed is stored on a server that may not have/keep having the data availability of a mature, socially distributed blockchain.Punk 8694 File URLTo prevent losing this image due to unforeseen reasons the simplest way would just be to right-click + save to your computer. Another way would be to also setup an IPFS node and pin the images. To do t...]]></description>
            <content:encoded><![CDATA[<p>While a blockchain can cryptographically prove which address a token belongs to, if this token represents a digital image then it is likely the file displayed is stored on a server that may not have/keep having the data availability of a mature, socially distributed blockchain.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ea9f7ce12fbc6ae8cc968a7fb10b8c7121b4a72dc53f34429a995dd196db55f9.png" alt="Punk 8694 File URL" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Punk 8694 File URL</figcaption></figure><p>To prevent losing this image due to unforeseen reasons the simplest way would just be to right-click + save to your computer. Another way would be to also setup an <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ipfs.io/#why">IPFS</a> node and pin the images.</p><p>To do this:</p><ol><li><p>Download and Install IPFS <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.ipfs.io/install/command-line/#system-requirements">Here</a></p></li><li><p>Initialize IPFS and run the daemon with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.ipfs.io/how-to/command-line-quick-start/#initialize-the-repository">This</a></p></li><li><p>Once your daemon is running use the Web Console at the webui url to upload your files</p></li><li><p>Pin these files to your local node</p></li></ol>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Market Making in a Decentralized Economy]]></title>
            <link>https://paragraph.com/@kozukioden/market-making-in-a-decentralized-economy</link>
            <guid>vYnBfcYqltbHajkuEckU</guid>
            <pubDate>Sun, 02 Jan 2022 19:50:14 GMT</pubDate>
            <description><![CDATA[In traditional financial asset exchanges, there are typically a few market makers that help provide liquidity and depth for trades. These market makers are usually highly regulated and KYC’d with only a few people being able to participate. In this structure these market makers gain significant advantages in return for providing this liquidity and are able to see client trades as they make them and can take a position to take advantage or profit from this. On a decentralized exchange this liq...]]></description>
            <content:encoded><![CDATA[<p>In traditional financial asset exchanges, there are typically a few market makers that help provide liquidity and depth for trades. These market makers are usually highly regulated and KYC’d with only a few people being able to participate. In this structure these market makers gain significant advantages in return for providing this liquidity and are able to see client trades as they make them and can take a position to take advantage or profit from this.</p><p>On a decentralized exchange this liquidity/depth can be provided by anyone with an internet connection, a web3 wallet and some money. These market makers are paid for their services in the fees earned from each client trade. Transactions on the biggest decentralized finance blockchains are broadcast before they are included in a block, this also provides an opportunity to see client trades as they happen. This time though, anyone can take advantage of this, not just market makers.</p><p>The impact this may have on how we raise/pool funds as a society will likely be significant. Finance is currently the most popular application of how decentralized blockchains can democratize access to economic activity, in the coming years, there will likely be many more applications.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[The Crypto Economy and its Incentives]]></title>
            <link>https://paragraph.com/@kozukioden/the-crypto-economy-and-its-incentives</link>
            <guid>FgBrxcf3GEuqypML0TeB</guid>
            <pubDate>Mon, 27 Dec 2021 16:03:07 GMT</pubDate>
            <description><![CDATA[How do you effectively bootstrap a community around a project or an idea in a decentralized way without providing some form of incentive or value for the participants? You don’t. In the crypto economy these incentives are typically in the form of digital tokens. These tokens do not all have the same function or distribution mechanism, however once the tokens can be traded, a price or perceived value can be determined as exchanges are just an aggregate of demand and supply orders which determi...]]></description>
            <content:encoded><![CDATA[<p>How do you effectively bootstrap a community around a project or an idea in a decentralized way without providing some form of incentive or value for the participants? You don’t.</p><p>In the crypto economy these incentives are typically in the form of digital tokens. These tokens do not all have the same function or distribution mechanism, however once the tokens can be traded, a price or perceived value can be determined as exchanges are just an aggregate of demand and supply orders which determine price in whatever the token is traded for.</p><p>Digital Token functions can be broadly classified as</p><p><strong>Native Tokens</strong></p><p>These tokens come with the blockchain or the protocol and help pay for transaction fees as well as reward users that participate in the protocol. The way users can participate and how participants are rewarded in the native token varies from one protocol to another and depends on what the protocol is trying to facilitate.</p><p><strong>Governance Tokens</strong></p><p>Native tokens can be governance tokens but not all governance tokens are native tokens. Like the name implies these tokens grant holders the ability to vote on protocol improvement proposals. The more governance tokens a user has the more votes they get.</p><p><strong>Liquidity Pool Tokens</strong></p><p>Liquidity pool tokens are issued when a user contributes to a liquidity pool. The number of LP tokens the user receives represents how much liquidity contributed to the pool and how much of the pool fees they earn.</p><p><strong>Non Fungible Tokens</strong></p><p>All previously mentioned tokens are fungible i.e. are interchangeable. Non Fungible Tokens represent items that are one of one i.e. not interchangeable. The most popular NFT application is currently digital art, however the potential applications are many. For example a birth certificate, or a driver’s license can be represented as an NFT.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Ethereum Classic, an asymmetric bet]]></title>
            <link>https://paragraph.com/@kozukioden/ethereum-classic-an-asymmetric-bet</link>
            <guid>1IniSZRvZkWuaT10UUv4</guid>
            <pubDate>Mon, 27 Dec 2021 14:32:49 GMT</pubDate>
            <description><![CDATA[A bullish thesis for Ethereum Classic. A lot of the thoughts touched on are inspired by reading a few Etherplan posts, listening to Nick Szabo on podcasts and my intuition for a potential evolution path for decentralized blockchain economies. ps: I have Ether and Ethereum Classic bags and might be slightly biased. The thesis for this bet starts with the Bitcoin protocol. The Bitcoin protocol enables the consistent decentralized issuance of a digital token(bitcoin) which can be used as means o...]]></description>
            <content:encoded><![CDATA[<p><em>A bullish thesis for Ethereum Classic. A lot of the thoughts touched on are inspired by reading a few Etherplan posts, listening to Nick Szabo on podcasts and my intuition for a potential evolution path for decentralized blockchain economies. ps: I have Ether and Ethereum Classic bags and might be slightly biased.</em></p><p>The thesis for this bet starts with the Bitcoin protocol. The Bitcoin protocol enables the consistent decentralized issuance of a digital token(bitcoin) which can be used as means of exchange and can hold its value over a period of time. Digital currencies have been created before bitcoin but there was always the problem of keeping an accurate track of how much of the available tokens each participant owns in a decentralized/trustless manner. The Bitcoin protocol solves this with its proof of work algorithm to obtain consensus on processed transactions and update participant balances. Based on known human history, the creation of accepted means of exchanges has rarely been outside the control of a few people sitting in a room. Trust is implicitly defined in this process and also the backing of violence is required. The implications of having a digital, open, trustless and permissionless monetary supply will be significant and far reaching.</p><p>Building on this innovation, the Ethereum protocol was created. The Ethereum blockchain is also open, trustless and permissionless with its own native token, the ether. What makes it different from the Bitcoin protocol is that it has a virtual machine that can run code. This code can be written and deployed to the Ethereum blockchain by anyone with a computer and an internet connection. Reading from the Ethereum blockchain is free, however writing to it will have an associated cost as writing to the Ethereum blockchain typically involves a state change which can be thought of as a transaction that needs to be included in a block so the blockchain has the most recent state of its participants.</p><p>After its launch in 2015, Ethereum is currently the dominant smart contract platform and the Ethereum Virtual Machine (EVM) / Solidity appears to be the smart contract standard. The Ethereum blockchain, its side-chains, L2s and rollups lead all other smart contract platforms and ecosystems in economic security, total value locked, developer contributions, daily transactions, active users and many more metrics.</p><p>Where does Ethereum Classic fit in? Ethereum Classic is the original Ethereum blockchain. In 2016, there was an application(smart contract) deployed to the Ethereum blockchain which was exploited, resulting in some participants losing their funds. When this exploit happened, some of the Ethereum community decided to make the participants who lost funds whole and forked the blockchain to create what is called Ethereum today. The rest of the community did not agree with this and continued to maintain the blockchain where participants were not refunded. This blockchain is called Ethereum Classic.</p><p><strong><em>A case for Ethereum Classic</em></strong></p><p>Ethereum’s success will be Ethereum Classic’s success. I believe Ethereum Classic will benefit from the EVM/solidity being the smart contract standard as a significant number of developers can write solidity and even the competing smart contract platforms typically build in EVM compatibility. There is also a significant amount of effort that has gone into auditing and ensuring code security assurances for solidity smart contracts.</p><p>Ethereum Classic will also likely benefit from the Ethereum blockchain’s migration to Proof of Stake. Both blockchains are currently Proof of Work blockchains and use the same mining algorithm. It stands to reason the miners from Ethereum looking for other profitable opportunities will mine Ethereum Classic increasing the security and money soundness guarantees of the Ethereum Classic blockchain.</p><p>Finally, it appears the modular blockchain approach is the most effective way to scale transactions on decentralized blockchains i.e. separating consensus, data availability and execution. Ethereum Classic stands to benefit from this by serving as an economic security/consensus layer for execution environments(read rollups) or even other blockchains that do not want to bootstrap their own security and consensus network.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
        <item>
            <title><![CDATA[Crypto Investment Thesis]]></title>
            <link>https://paragraph.com/@kozukioden/crypto-investment-thesis</link>
            <guid>NPfbh7YeDfCIWZp63uf3</guid>
            <pubDate>Mon, 27 Dec 2021 00:34:04 GMT</pubDate>
            <description><![CDATA[An approach to investing in crypto protocols that have issued/not issued a token using five broad metrics Utility/Adoption Nothing says this new project/protocol might survive one or several bear markets and continue to grow through them like adoption from other crypto projects and a continually growing developer community as well as a real world use case. Utility is not strictly necessary however, as can be seen with Doge, sometimes community is more important. Market Capitalization Market c...]]></description>
            <content:encoded><![CDATA[<p>An approach to investing in crypto protocols that have issued/not issued a token using five broad metrics</p><p><strong>Utility/Adoption</strong></p><p>Nothing says this new project/protocol might survive one or several bear markets and continue to grow through them like adoption from other crypto projects and a continually growing developer community as well as a real world use case. Utility is not strictly necessary however, as can be seen with Doge, sometimes community is more important.</p><p><strong>Market Capitalization</strong></p><p>Market caps are more of a reference point as this is all new and it is difficult to accurately say how big these projects can get. However, when trying to narrow down your investment decision, the lower the market cap the larger the potential upside. The larger the market cap, the investment poses less risk but also has less upside.</p><p><strong>Circulating Supply</strong></p><p>Protocols with a maximum supply of less than 1billion units are a digital scarcity dream. I try to optimize for coins with small supplies. There are exceptions to this however, if the protocol has a large supply of tokens but has useful mechanisms to lock up or burn these tokens to control potential sell pressure; this is also a good sign.</p><p><strong>Interoperability</strong></p><p>We live in a multi-chain world. User experience still has a long way to go when trying to move assets or transact from one blockchain to another. I firmly believe in a few years most users may not even know which chain they are using. Chain selection will be abstracted away by better and better user experiences. Protocols that facilitate a smooth multi-chain world have the potential to generate significant value.</p><p><strong>Income</strong></p><p>Income or staking rewards are a good way to hedge against negative price action. This income is usually in the form of a reward in the protocols native token; if the user locks up their tokens for a certain amount of time.</p>]]></content:encoded>
            <author>kozukioden@newsletter.paragraph.com (KozukiOden)</author>
        </item>
    </channel>
</rss>