<?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>Satoshi Fan Club</title>
        <link>https://paragraph.com/@satoshifanclub</link>
        <description>All things blockchain related, we're covering Bitcoin, Ethereum, Solana, Hashgraph, and all those good stuff</description>
        <lastBuildDate>Sun, 26 Jul 2026 01:20:52 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Satoshi Fan Club</title>
            <url>https://storage.googleapis.com/papyrus_images/3a16a58ee4e1854d923a2f334908b042.png</url>
            <link>https://paragraph.com/@satoshifanclub</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Create a Polygon Network Wallet]]></title>
            <link>https://paragraph.com/@satoshifanclub/create-a-polygon-network-wallet</link>
            <guid>j6QPxwWPRdKX0FTAQB8Z</guid>
            <pubDate>Wed, 28 Aug 2024 13:27:26 GMT</pubDate>
            <description><![CDATA[If you’ve dabbled with Ethereum in the past, you’ve probably come across Ethereum’s high fees. Layer 2 networks like Polygon are perfect if you want to still deal with Ethereum assets in a cheaper manner. Today OpenSea allows you to mint NFTs and transfer them for free if you use Polygon, there’s still a fee but it’s so low OpenSea is able to cover it.Note: If assets are created in Polygon they sit on Polygon’s network but can easily be bridged over to Ethereum.If you want to do anything with...]]></description>
            <content:encoded><![CDATA[<p>If you’ve dabbled with Ethereum in the past, you’ve probably come across Ethereum’s high fees. Layer 2 networks like Polygon are perfect if you want to still deal with Ethereum assets in a cheaper manner. Today OpenSea allows you to mint NFTs and transfer them for free if you use Polygon, there’s still a fee but it’s so low OpenSea is able to cover it.</p><blockquote><p><strong>Note:</strong> If assets are created in Polygon they sit on Polygon’s network but can easily be bridged over to Ethereum.</p></blockquote><p>If you want to do anything with Polygon, the first thing you need is a Polygon wallet. Luckily this is fairly simple with MetaMask (a popular Ethereum wallet).</p><blockquote><p><strong>Note: </strong>The below instructions are specific to Chrome but you can apply many of the same steps with other browsers. The only major difference is installing the browser extension.</p></blockquote><div class="relative header-and-anchor"><h2 id="h-install-metamask-chrome-extension">Install Metamask Chrome extension</h2></div><p>(<a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af ox" href="https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en">https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en</a>)</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/98ef2e381ff3cce18a107781f06b66cc.webp" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACHElEQVR4nLWUz2sTQRTHXylWIz2IjcauhZJQ2540KlJoPIUWFSS6GN8hk2zGrBsngcgc/Qf04E2qB1NCG0pTFTRQpFiEtCwExIs/WEYWFoRINaggoj1Xki055BcmoZ/LPBh4n/kybwbwmqyqKiISQhAxGAxqmsZ7RpZlSiljDFJVOOe1olb3CK/2AbtjlGrxOItSjURUxhghRFXV3nNwzncFewfYy+VZ38Xz5xBRluVAIICIXfS6dJX0uacdHl+fe7pe4JX2TQwCpTH7qgkhnPNk6nZHgivXwyOnZkdPz4yeuVAvSCZuJZIszhIkopLwTQzROEvEVEaiMcaSXaSpF9ggot/vR0RFUSqzG6IYqoyaoii0Sq+CvQDab6f+Y9i7FJCIekNj6y9XNzY29dbkcjlCSBtTSwFjrJLAL73ZfK3rej6fLxaLOw0IIdo/yd2voimMMcuytv9u77TGMAxFUdo0aS5we064jo2MjU2WSiXLsoQQpmkKIex6a2urJigUdIB+x4CTUtqB4PjQkf3QP3DgqGmahmG8+/ihXC43TfDi+SpUQSQdCA4Pe12Sd3zSZwvsgwshGjXrazrAQQAXCUU7EDilqUPS1PjJmcYjf/v++/PXnz9+/XkrSu8/fXm1VgBwAQxHwrEOBJ4Jv2Po7KDTO/8g8zi9lFlYXsw+WVx+lllaya48nU9nH84tzD1K371/j8XvAEgA7laCf9M4NYyvFhfNAAAAAElFTkSuQmCC" nextheight="370" nextwidth="674" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-2-follow-the-prompts">2. Follow the prompts</h2></div><div class="relative header-and-anchor"><h2 id="h-3-select-the-2nd-option-because-we-are-creating-a-brand-new-wallet">3. Select the 2nd option because we are creating a brand new wallet</h2></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aa6aff41878b60041554e1d393429133.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAATCAIAAAB+9pigAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACbUlEQVR4nM2UTWsTQRjHJ1/Jg5BzwPYo6FEP4tEX8KAHRcGAYkVQvPQLlAYC62ItpS+S1l7sqVrJNpXM2uwm2beZnenGriRm5hnZTW1j2GDBCP0flnn5z/z2mWeeQfl8/sbVi3du37w7pHsTEkIIFYvFr68vNT5v1et10zQxxoZhqAkpl8slgEltd1YBURSZpmnbtuu6tVrNsqxqtYoxZoxNBiD6IoqiTqcTRVEcx5zzOI5Dznq93pGDR7BvgeuB6GcD4NRSSh21hJRrq6JcFpomKxXY3pZbH+XCotA0US4rSgbmE4A6nWCg2q6YL6lxRyRBrr0XC28BYCxA9AXjUTZg54vcWP/7vxAi5ktjAd/jOBsgpCiVRgZ/ChFQkmGu4/yg0ADAT2Wa5t7enm3bGGPXdU3TbDabhmFYltVqtZLoKxXF6B8BpZJSZoZ77RgwModTndyT3xK63lcnZsdxbNt2HKdarTYaDdu2h5cAwK1jACGEMM45d3zPJ6HjEcaYT4KAEsYOHI8ElPR6PbmxfvhtnxAS0NANfMZYQInjJ+7UkywMaJgeBwWA6+Mi4JwHNMzOwdxoDsYJasb5EcDTrbighwWdTWm0oIcX0saVJfZDiOOoYbcmV5aVUrOfEvN06pnS6LTOCnp4eeGAdZN8QKspyuXRW4RmXXS/jYpt9NxDMx56lnYft9rxEAAAMBZzc+deGOhBEz1x0SsPzTjopY8ettEjZ8frysV3cmU5uw5Aqr6CfrrV4AvDs0Nd+WFTaLrQdLm4JDc25eqq0PWkkvU3qtMZmP/hqRge7HYVZeqwo+SoOQEghHL/TQihXxc14LLXLNwjAAAAAElFTkSuQmCC" nextheight="404" nextwidth="680" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-4-create-a-password-for-your-wallet-and-accept-the-terms">4. Create a password for your wallet and accept the terms</h2></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/57ede05ea73824e4982fcb1c507acdb2.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAgCAIAAACO148VAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACuUlEQVR4nNWUS0gbQRyH55JTLoHmUA855BTwlkNgD4LHUnUFkeiERFpY2kYQtSL20DZpAzENCPVxaMOCYh4oVlksslW2OlVDl2bBRpnYlLI0QrctarMWy1r1sIWsFKupJTER+vFjGObxwX+YGbCT/Xbwc39784taOsCju90gB0mSZrO5q6vLbrfrdDoIYUdHB0mSxUhXl+eMALQQRlEUaZrGGMfjcYRQPB5nchQjTafTNputuroaQljE/vxStQwAVVUxxoqinJ6Ts/LGxsYZm0VRzC/lOE6v1xMEYTKZKisrrVYrAMBsNttsNovFAgCwWq0GwyWSJAmCsFgsEEKj0UjkMBgM+aWSJAEALldUaDq9Xq9dBgAAhBBjrNPpwClqampMJlNVVdVfyy854P+RIoSuXK2953nQ2NTc2NTscLputbY5nK629s7aunrqpru2rr7l2vXunjtt7Z0Op+vs+6AB5O8/hJQopMS55QSfXNf6y8Ian1w/Hm0c8W+FlJhMZ45HlL6qfwJWP2TU85FMZy5E+k78lExntOqKC59cPylVywDged7r9ZIk2dDQQNM0RVFut5uiKLvdLklSkVI5K09MTCCEOI5jGCYcDmvfKMMwkiTJWfmfOf0ZATkrn7PY7M7ORUnl82Vze+ukVC0D4PDwUMlRSqmS02ntSDjKcRxCSBAElmVHoxGe5xmGmWFn2RwY49j4mLYswi7OLK2Mzb4WUuLw9Pzw9PxCAueRIoQeDwz6/AGWZX3+QG+w79nU5JNQaHKKcThdPn9gNBrpDfZxHOfzBxYSuD/Gjjx/RU+9nFla6Y+xPQORI6lmLHH5ahkAqqpGphc8g9G8CY2/UPYPCpauvf8Ibwe1tD586h2KeQaj7f7Q78HFN0fHX4B0V9k7rjiRG/eHPm8V/OSOznRX2cubQnWa9Bdf9zBDhIse9AAAAABJRU5ErkJggg==" nextheight="1012" nextwidth="896" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-5-backup-your-recovery-seed-phrase-12-word-phrase">5. Backup your recovery seed phrase (12-word phrase)</h2></div><p>This is one of the most challenging problems in crypto, securing your wallet. Make sure this phrase is saved in a secure place, treat it like your birth certificate document or SSN card. If you detest physical storage, an easy option is a password manager like 1Password.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/352fed523aecd07a9ffa015582b1404c.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAIAAADlZ9q2AAAACXBIWXMAAAPoAAAD6AG1e1JrAAADkElEQVR4nK2WTWvjRhjHZTC+bU/FDsS5hKQ5mFziT5IP0UtpoXQpJQ3e0lOg0B5zCfQUEiislWQFwR2tRbURI2QURVmZGsWDjLEiv0Xyy1jZ2FZU7PEG1W6Ja/rjYdAMmvk/byNE3VUrV8yvjt1otVoYYzIOh0P/f4Jqlf/87fPPZElECCmKcn5+LklSvV6fZ7Pnec8LuK4LISwUCgt4p2maYRjPCHieZ5pm0Kln9zzRbDYxxrVardVqdcZgjJ9G8g5lWdb3qdSrVz/u7+/v7KTS6fS3L79LpX44ODjY29v76Zefv/7m5eHhoeM4/gwXFxcAgLOzM4ZhaJrOZDIAAI7jNE2zLGsi4Pv+MIA3JjgdDoe1Wm32dN/3McaO45im2el0XNet1+uO42CMg++MIvjiy69oms5ms8fHx0dHR/7cyLKsKArP8/JHEEKCIKiqWiqVJgKu61qWZRiGruuiKGqaNr+AoiiCIGiaJoqiJEkIISIZrOIoRYv1nz/uIghhPp8n50IIVVUlXiqKMhHAGAuCwPM8hJBlWQihKIoXYyRJEkVRURSyX5IkCOFTe5AiZ7NZjuMAANlslud5AIAgCAAAmqbz+fwkRdcfUVVV07RCoUCmz143COHpGABAOp3OZDI8z+u6bhhGpVIhjTSKQBRFUiJ9THGMMaZYLCKE8vk8QqhYLE51SP+h77ouxth13U6nQz4zU05Q9XqdZVkSKcdxLMsCABiG4Tju9PRUEASO4xiGybxlSdcHb6UsyyRvTw+zPUI5jkMiIDfg3+rszVf2Wf65i+ZELjlyyRFumhDZxHKG/Q45ENm61Z0ImKa5Mx+7u7tTApflNkS2XHIkZP+h372vdISbJldokLFw2xsJyLK8tLQUiUQoigqHw2RcW1uLx+MURYVCoUgkEgqFXrz4ZHl5eSpRwk3z7OqWvrIYtfo6Z77Ome/GMpfltlxymt2HiUAsFqMChMPh7e3tZDJJpqFQiCzOCrTxoNR0datrtR6MRs+0e97wcboGJIJoNLqxsZFIJLa2tlZWVtbX1+PxeCKR2NzcTCaTq6ur0Wh0VmAeKEVRlv5ONBr9dEwsFguuLyjQHzw22vfNths0u3tvVLuXN3dB0832fz19JNB1B57nQWRfldvvKx21PCqO3Rv8fl09kcwTyQTX1Te5yolkvsndLiLg+37XHbR6D0HrDx4/9L1G+z5o3Q+L/Gr8BRhoVQ2LmKKrAAAAAElFTkSuQmCC" nextheight="1008" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-6-re-enter-the-backed-up-phrase-by-selecting-the-words-in-the-order-they-were-initially-presented-to-you-and-hit-confirm">6. Re-enter the backed up phrase by selecting the words in the order they were initially presented to you and hit ‘Confirm’</h2></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eab7544eca9cce649a4ee482b54d5495.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAIAAADCaIt+AAAACXBIWXMAAAPoAAAD6AG1e1JrAAACoUlEQVR4nO2UQUjbUBjH36Uy1ssGskPBW1nAHXYN7CAIY+C89PAgsCgMkXW8Q/AJ5qKE5dCiG2Go4KBdBxUp7dZ5sITNzlW6OWVhpchqGTPbwbhJJyuiPA85vLFGS2t1LTW97U8IX7583/t935e8B17MPhvu7y0cixBS/F0khFCbBEbv9gIAMMaCIHg8Hp7nWZbFGNsG0HUdQijLsl0rnhCofCgUCvTcItXjBYIg8Dzvdrs7OjoAAN3d3Q6HA2Psdru7uroGBgZEUQQlQQgto6enBwDQ1nbR4/GwLMswTHv7FYZhFEWxAlwuV2dnp9PplCQJbG9vI4QwxqFQKBKJJJPJWCymaRrHcT6fDyGkaZogCJIkiaKoKIrP51NVNRwOy7IsiqIsy5aNENJ1XdO0cDg8OTkpCALGOJVKVY2oFQKqqnIcJ0kShNDr9WKMZVmGECKErJIhhIqiiKLI8zwuKRAIYIwRQqlUqj6AUmraJ1oLIISYpkmq1TSA1OzQI0BeN/zB+Oj0XHRxxeqpuYmTswB1Oz0XoNHsBvQf0CTARpk1P0jrjwp62k4GN+4A5lb5unz7XnPb+C+g/EKaib79+NnigRqZpbDnr99LM1HLtu7zS2uViQ13cPUmuHANXLp+dGfheTuYX1qbXViOLq4U9w6saGNnN5HOzC4sV+Yn0plEOlOOoZRqOT3y6kNeN+p0kNeNvG5kcl/LyfvkcP3L99XsRmWNq9mNT/nNfXJY9nzb+pnO5n78Kp7VROuPa/PY+/Rl0tjZLfMopf5g/PGcWukJxN+MTs9VfuR32ro/GK8/ohNVnFqa2YDndEBLBfK60T+icEPjfcOPBsemLPv+gyfFvQObAJtbfcMTJcDE4NhU38hDbmh8cGzKNoAtq/wD8AfWmxHtaYWgCgAAAABJRU5ErkJggg==" nextheight="1303" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><blockquote><p>Now your Metamask wallet is created, congrats! This is the biggest step in your crypto journey.</p></blockquote><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/544f0bb83ab7378df7bdab69fb69cfe1.webp" alt="" blurdataurl="data:image/png;base64,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" nextheight="933" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Photo by <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af ox" href="https://unsplash.com/@adam_whitlock?utm_source=medium&amp;utm_medium=referral">Adam Whitlock</a> on <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af ox" href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-7-pin-your-metamask-plugin-on-your-browser">7. Pin your Metamask plugin on your browser</h2></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9936205da828af132c7a12bf26ffd2aa.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACIElEQVR4nLWUz2+TYBjHOXlY/DFvzvkj25zuZkyNPczEgxcTLx48+Sd43B/gH+DBww7emjR69GaisTFpSWoHoYRQpIUURlkhTSgvlLJCw1p5TCGrP8palmWffEOevC/kw/PC+2LYhavnG2z5Gnb5XHNz89KNO2fP6taD+HplfWv14eNXr3c2sk8yz15gF6+vJ2ZpZe1U2cxkl1bWNu4/Wr5971Zm+83bd3e3n2afv8R2cx9mkn+f+2ggMz3G8c0GMrsW6iL7QNe+4z92c3ms13en6VpOF9mGae23VADgeV6SJPUYz/MgNZ1OB6GJ6Y+gaznFVksxDFFShOY+ADSbTVEU2+22IAiKoliWlV4AAAghw7T+EiD7kyTymsY3BIKqAkAYhrOPJQ6mEsSOeIlkpQUAhUKhVCrhOE5R1LeIYrEoCMLpBP1D/7847uBA6wAAwzAsy3IcR5JkvV4nIyiK4jiOZdl4sFarMQxTrVZlWaYjZFn+R5C4CAihuPZ9P+X7jsfj5A7mCIT8zmFH1nWdJEmWZWmaVtXJ3zUHUZbiwnXdxQJH2vvlO6Oj0WAwcCOGw+F8QRAE02KBYHxmDMOYCGYnRkcj0zQB4PPXL0EQqKqK4zhBEDzPl8vlSqVCEARN07Ztz+9mXgfxnpr2C1E9+xkXCiY7OXHO8zxd16eHRCKNpviz3jgpfENQVM3uOcmCMAwXLrHjRmfXybF7Tq/v/gbytAomvuHflAAAAABJRU5ErkJggg==" nextheight="598" nextwidth="1052" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Now you should be able to see it in the corner of your browser, it’s the little fox.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3129426dd8a475d10b72f86a1a368202.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAANCAIAAABHKvtLAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACQElEQVR4nGNQNLSkKWKgndFaFk6qpnYMeo7eYOSJSuJB3nqOnqbOPnqOnkbO3qbuAe6hUe6hUQ6BMRa+kc5h8c5h8ZaeoRYewdZ+keY+EQyG9u5kIK+wWEN7d5+IBDOPoPLkoJKk4MyKhpTyurCMwsyKhtDkXN/oFJfINLugeAYlWfeU5NoLV26Qhy5du3Xp+p3T5y8vWL5RWc5TWc5TRcELgiBcBgEG85TIhgfXLj7dP//S3lUfv3yFo3fvP+JBHz59uXT+8aHIOaf33Xn34fPj+y8FGMyFGMwEGMz5YCQfgxmDAINlSmTDs3Nbb2Qy3J6RiGzBrsdP9j1+dOnarQtXr127fQeCLt249fL12yfPXr57//HilpmPYiQP5ay4cuV2hFuZAIMlxFABBnOEBW31s5cv3nb+9JlbVy9+ePkYxQcfPuPxwccvX++/er/o0t07j98dOXQOYigcgU03BVmQGlk3rX/ZvQeP3314/+PXbxj6icH4jQedPH5ZCMnt8FASYDBnsFSLaqmc8R8HePTo0ePHjx8+fPjgwYOHDx9iVfPv379rl25bq8daqkVZqkVZqEZaqEZC2KIMtgz/////9evXx48fX79+/RIMnj9//uzZM4jmP7//vHv37gMYfPz48e/fv5gW3Lhx49evX1jtzo5tYXj89NmzF69x+eDr168fv3z+8ePHh09fnj9//vHjR6zK0Cz4+/fvh09f/v//X5jczvDu/cdPnz79pQz8/PkTLdA+fvn6////Kd3LAS/v80Kc7n2MAAAAAElFTkSuQmCC" nextheight="430" nextwidth="1030" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-8-add-polygons-network-to-your-metamask-using-polygons-block-explorer-httpspolygonscancom">8. Add Polygon’s network to your Metamask using Polygon’s Block Explorer (<a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af ox" href="https://polygonscan.com/">https://polygonscan.com/</a>).</h2></div><p>As you start transacting in Polygon, be sure to remember this site. You can view all transactions on Polygon in Polyscan.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ff25d8ced27dae4280c0b5c57dbf54a5.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAIAAAAzPjmrAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACyUlEQVR4nLVT30sUURS+RA8GkkkUZFAyuylYQcQu6y8EiejZxNVVejD8N/xH1CcfhYh8SE2CQhfXaUerhwyWbdXddXdnZy7uzM6Pe+fHidkZx3GVeig/Pi5nzp37nXvON4MWFxfT6fSXAFiWXX6/mkxura1++rC2sZ3cZbc4juN2dnZWlz+uv+NWlrj1t19Xlri1N9z2ppNvgi81OzuLUqmUHYBlWaZhWpZl/w/Mzc0hlmVVohcr1VJFKFUEnRJKaVXEqmzyWahmQcyDVAYXuVxOLFBhH6o5h7gIwqFtW9AEWVFKFQHX6l6B8x2IuEYIwccSPpaCJ8tFLOYd3WoWhH3gM2CozeoAcKaDVCplGiY9gWmYLi9s2WqMzjLBDUzjVCsIX8TrgBBS5sVSRSjzIiHOiPLFoxo28j9I4SetZqEmOkIA8P3bXmGPHuzav9J2jrMPdm0+A6bR3EFdVcu8WJMlr4PzIyKEmIapqqqsaMFdpa4p2NYVUGuWKoFaA0rh7ya7HfAC5gVMGq2pRNdUGxcBFxyT6/jUZHxk8BnHg0qm4XMBzpus6BovYKmueAXcW/uklDqfk27Isq7UqaHb7jUB4BgrCrZlHhRsS2WnMKUXmOzqWJblFNjc2NZU2ychBqVmMKOdUNfAi2Xw2JQ/S6I3RrTxmT09IINXIJDRzlKVnKGJh95/8Ic3dQ2cAslkkhDDp/ulBjPkHzg/P+94AJeGhYWFyy/Qc/dFLJyIhRPR0EQ0NOHHESYeDU26yQiTiDDxxuoE7m6EcV4bCY3GmZHx0FiceTnWORILJ3rDU71dU67O/Vsx1Ioet6P+NjTQjvpdunEbGmgEfY110F3dwGcIxV7f7ht6+Gr4ycxQz/QoM/as7fnw05nBR9PR0OTTe+M3UBe6ijpaEOPzGgoHH0+SF+dbENOKmAfoTjfq6EYd11Fn0+4VdPM33yscmjkUPM4AAAAASUVORK5CYII=" nextheight="722" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-9-in-metamask-approve-adding-in-the-polygon-network">9. In Metamask approve adding in the Polygon network</h2></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8dab770acdfb6ac589159dfbfca3153a.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAIAAACQHr+mAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADqElEQVR4nJWUT2jbVhjAH4UwdtoOhQ5GL93YZTvskG4wSsi6rZCsNaNbQnYIGzksZGQDgzB4BG9tWqPUYNBBh0ygCgQJqbq3yVE0nDy/yYmMlqSO5/6Jg4zsLvIUBy/OUpIUUYGG7CaNs651fnyXT3w/ffree3oAvPLWax9+duzsxZOdfSc7+1448+lLZz8H711saetuaesGpy+0tHW/+FHvwQCvtoKx70N3lR9/GL8sSzFhbOzK5UvnPnjfd/7jb7/5+hOf74veXt/5C6Gh7/jr7K+x2HxKLa+uZuYXgGVZrusihPr7+wmC8Pv90Wi0q6uLpmmCICKRiN/vJ0myp6eHJEmEkOu65v1VYJqm20gwGGxtfae9vb2jo+PUqdeHhoYOFfxZKADDMA49tSzLMIxcLmeapq7r1Wr1UIHXTdd1TdMkSRJFked5SZJkWRYEQZZlURQRQhDCespx3MTEhKZpVnH1Kd2eS7VaBVtbWwRBhEKhcA22xqXhqwzDjIxcYxjm6hUyTF6TZRlCKEkShLC0VgI72zv7r8kaa5K2nEjn47dWYvMrSrYoacvywkoinb9nlPbLHmuO49hN4ziO95E72zu2bbtNY9v2E21gYCAYDAYCgcHBwUAgQFFUUxqMidKUt/aSLMdncLPdWJYVRRFCODo6qqrqM3alQZNlWVVVhJCqqplMplKpODX+O3aDpszNyvE4TijSlDQhwNlUSpmbjc/g+kH/X42oMTw8zLLsEVbyp18mHcd5tvAUbePBruu627v2Q/vRQ/tRs1r81oq84AU/k76ZzD5fq1arW0ekXC6DrDL3V7FwJM2yLPAHVkZ8XRBCjuOi0ShN0xzHkSQZiUQoihJFMRwO8zwfiUSkGrqu53I5sJxacF1XEIT6v8SyLMMwCCFRFDmO43leFEWSJMvl8v543mx1DWOcTCYFQYAQIoQEQcAYI4S05cINZWl6Mbeklxq0O3Mp13XVdHZ8MnFDVqYULYZ/H59M8DzPMAxOLcZ/S8VQanIaZzKZ+t4+0bLGWiKdn8+VlgpWIp1XskWMsaqqyWRSVVWMcf1SqN9inmbcuWsfkUql4m13obxRrGweDHN9c+PBbiKdB+9+Bd7+8mAc6xvxuun3H5/xrLH2s3rv5tztemqub3oOOA7ACQBOA/AmAG/U0uNS6rZ34RXKG+a61+Fg/P3P9vXpRXCiE7x8riHODHrdOI5jGIamaYqi6D2oPWiajkaj5B4URTEMw/P8v+uwV7B0hQEOAAAAAElFTkSuQmCC" nextheight="1278" nextwidth="724" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-10-switch-over-to-the-polygon-network-on-your-metamask">10. Switch over to the Polygon Network on your Metamask</h2></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/195431cecb29244282a3a8325bedaf1c.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAIAAACQHr+mAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACvklEQVR4nL2UUWvTUBTHL4jKwAlzc849yF5880F88EVQHwVBRByiqB9goJ/B4UR9FH3axFFhbNROu01EKX1wpZjWhrBcc9N0zVIt69astmnTpLdJlkiS2qVdYZvCfvy5EHL+95x7z+ECcLB3BzU44KzdR/sHQNcJAI70t6irDxzubVFXHzh2snvw1PGh04cGhy5dvgDOXgFWK6VaLZ1OI4QEQaBpmmVZWZZN0/TGDPSca7cZhqHVNa8Mw2iL6QFntmxt0do2NSMvnh9u2AzDSH0vxj+J2ezqEsOmV3g2mYSIS6aWU2khvcIXCoWmU6trDZtpmlpdE35I2IOiKB2rza2Lts3v94+PTwSDwXA4/PrNZCQSmXzri0ajgUAgkUgEg0Gfzzc9PRMKhaamZiRJamRjGCbhkMvlGIZBCFEUxfM8SZI8z0MIaZqmKCqTydA0jTHeKtLLk2fPx8aePhp9/OLlq5GRB/l8vi2gs21HbJssyxzHIYRomuYcaJpmGIZlWQghx3EQQpZlSZKEECKEig7t2aDzj+M4kiQRQgzDQAi9TetcpOlgeGibrM42jLHf70+mln9mf6XSgiAI222qqnbIZrSyK9tu+I8GWPtmwxjvYzb1325SVVVQrZSVPYIxBvW8UFn67LbV+9q4U9acxmbfM5mMbdMlEa+xBEHEYrFEIhH9C0EQFEVBCGMOJEnKsuxuYdsMpWRZViQSIQgiHA5DCN0tFhcX4/H4xsbG9rM52apFY49gt28S1kVF80qu6ZZlrUnqR0b06itfbGSTsK4Z9llFWc/8VtfL9h1g3ZRrOri/AG7Ngzvz4PYCuDcP7s6Bq+9Gv6zYtmp9s1rftF9/1VgvN/LINb1a3wQPQ+DGezA8B67P2uvND+Da7MS3NXtKFEUpVaqrhbJXpUrVbZH7mRUlV2KxoiiKqqp/AORv3F7bF+wkAAAAAElFTkSuQmCC" nextheight="1284" nextwidth="742" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-your-polygon-wallet-is-now-ready">Your Polygon Wallet is now ready!!!</h1></div><p>Under Account 1, you will see something like 0xAE1…, that’s your wallet address. If you want to receive anything to your wallet use that address.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/72013824a32f319cad2839842a770a37.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAgCAIAAAB/3NSYAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADIUlEQVR4nJ1UTWsTQRgeEdGDoBY/0CoqQr1405tX8SAICnrxIOhNULzp2ZM/QETFgxFRq0WKPSjeijS0mn64cWxq0mbX3Wx2djs7+zU7nWbTHdlsTJM0FuvDwzAz7zzMO+/HgM37Dq9P0NcPNu1ocstO0Ne/bf8RsPsgAFv7/oW7Dh0D2/fuOXr8wMCJC6ePnb18FZw+dRFZeC11w2ynYS4iCy9ULKhYE18kAAA4OXDu44O7L67sxsQhjpuyrFTeDb+fkvJ5WJDyEBaKmm6YmAzfuf0QnP801lBeOndDz32QXt1ryYjjmphUqslRs42YOGPZoacPMlMzswAcBoyxIOTtZKxtybqtCYNACAGiWhTVojiORQPpRFEUSZImJychhKITjDFKqaLqoFwuU0pN09QNQ9d1z/OEEJRSz/OCIEAIUUrblZ7npTuAEFLvhbiBqBZxzrtMnPOmt6IX5r66T+8We5pSyV+VP8bJs3vz/6NcB5xzQkgPZS6Xy2Qyr9++efToSSaTGRkZsSzrn+5ECGGMbdtOR1mW0wR2Kxlj7buUJ1FtzUXnpKXknHconaUI3Pp85vmsEOLSYBHcGl0MItOPwM3R68Or0WoUTwzaqyQS8fmXhdfTphBiSLIHHudr9bhWj8++mBuS7G5v07S2kK+GJEwMKuE5LXleHMcTaqi4q8fSagUIIbFBRI1SB7ph/oeyXq+vekuXV8Zlf7rSEeoUxWJRkiRZlju81SwyZ/g9yRjjvRCGYZKVn6XexbkOojSfYRiODur3r0HP8yCE2Wx2djbJ59+gaVqzyxhjC9+9sfeo1ZDr90D850zibX2D4I2nAqfxfWz0nWJtr3DOf5bmZVVZkNXifGlBkeFcAeHuLkuyYlg9KmFC9b9Vw+kKyyoecpfW3skYA4qqCyFs2w6CgFJKCMEYh2FIKcUeWwyixbDmLCXjchTT5RW6vNKMUNplEMKZmZlyuQwhNE2zUChACFWTfKsyiFhOCyCiOS0Yl30SNv9nkP6rLvZd7BPkE0IppaVSSVX1quJUFUcrOr/mbV32DM01NNfGfhAEUS36DbSlQuPPe3vVAAAAAElFTkSuQmCC" nextheight="1300" nextwidth="786" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p></p>]]></content:encoded>
            <author>satoshifanclub@newsletter.paragraph.com (Mabel Oza)</author>
            <category>polygon network</category>
            <category>polygon matic</category>
            <category>polygon nft marketplace</category>
            <category>opensea</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9bbbb44555c561f466810af09815b3a2.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Bitcoin Halving Events]]></title>
            <link>https://paragraph.com/@satoshifanclub/bitcoin-halving-events</link>
            <guid>27BIfVcP4ZUeXJq9ab0p</guid>
            <pubDate>Thu, 04 Apr 2024 07:28:23 GMT</pubDate>
            <description><![CDATA[Unlike the past halving events, the upcoming halving (around April 16th) finds Bitcoin in a completely new landscape. Since the last halving, we’ve had ETFs, new regulatory standards, and a rally before the halving, creating a recipe for unpredictable aftershocks. Regardless of whether you’re a Bitcoin fan or hater, the effects of this halving are going to ripple throughout the economy and our politics.This event will hit our finances, regulations, and global economy. FinancesHow will establi...]]></description>
            <content:encoded><![CDATA[<p>Unlike the past halving events, the upcoming halving (around April 16th) finds Bitcoin in a completely new landscape. Since the last halving, we’ve had ETFs, new regulatory standards, and a rally before the halving, creating a recipe for unpredictable aftershocks. Regardless of whether you’re a Bitcoin fan or hater, the effects of this halving are going to ripple throughout the economy and our politics.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/abc583412292e0ce5b69e7a308251b75.webp" blurdataurl="data:image/png;base64,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" nextheight="730" nextwidth="1296" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>This event will hit our finances, regulations, and global economy.</p><p><strong>Finances</strong></p><ul><li><p>How will established institutions that recently embraced Bitcoin through ETFs react to the sudden supply shock?</p></li><li><p>How will the sudden change in Bitcoin’s supply affect peripheral financial assets?</p></li></ul><p><strong>Regulations</strong></p><ul><li><p>As miners are forced out will regulators impose stricter controls on mining oligopolies?</p></li><li><p>Will regulators require more audibility from organizational and individual miners?</p></li></ul><p><strong>Global Economy</strong></p><ul><li><p>How will this affect the overseas and U.S. mining industry?</p></li></ul><p>We’ll examine the halving events and analyze all the chaos it will cause us:</p><ul><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af pc" href="#835f"><strong>What is a Bitcoin Halving?</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af pc" href="#84b6"><strong>How often does it occur?</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af pc" href="#1688"><strong>Price of Bitcoin and the Halving Events</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af pc" href="#4b45"><strong>Economic Impact of Halving Events</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af pc" href="#070f"><strong>Halving and Gresham’s Law</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af pc" href="#6269"><strong>This Story in the Bitcoin Core Code</strong></a></p></li></ul><div class="relative header-and-anchor"><h1 id="h-what-is-a-bitcoin-halving">What is a Bitcoin Halving?</h1></div><p>Every 210,000 blocks the block mining reward fee is reduced by half. This was determined years ago when the code was first implemented. The intention behind halving the fees over time is to slow down the network growth and give it time to mature.</p><p>The halving events should continue till the year 2140 when the maximum supply of 21 million Bitcoins are met.</p><div class="relative header-and-anchor"><h1 id="h-how-often-does-it-occur"><strong>How often does it occur?</strong></h1></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c040616cc13cd3ea04119f48168b0a24.gif" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAANCAIAAABHKvtLAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEXklEQVR4nCXS3WtbZQDH8dg1Oc953s7zct7PSdPmJOlJTtqsy9vaJm3Tzk7ZYFtBQYbuQhCE6UTchvNCW2WCTJhjKjglrNWbeiGCFyoovnTrVjTMaVlllO1Ghl4U58W8UKhk/gUfvj9+MY2qGKoIqgQhDWNOqc41XbAMZw0uG0KmTZMxTQhhWa7rJf1kX9JzfYObGD5UybbPPr/47ktRGPieFwz4UX4gCHzbtqTkGEOEUIxpKkIKggAjpBHKKTWYZkme47xB+bjGUoYQnElpWJbruEnX8wd82xHUEeSJieyj9f6jj03s2zNm22Yu8KLQ70talqVLcR+AKMYpwKhbQCFitAtwSjilOcYblI1RkpQcYU3TdMt0bNu1bTfst1yd2oIeKLglBoc8efTwPilkLu0O5ZJJ1zINQ3JKEEQI3we6lEoIYZQxjNKeXSuXQiGahI5ikrWN5mg5CjNCWqbhmKYdJg2Tk6RkJV+O9fPdaWv+1DMHD8xGmb4wsD1HWoYumIYRIhjHhAYBSNhCe2S27toGhagZepOF/oCQFsJVFddT9t5iX72YsSyHc90w9YzHOYUZkwee1Qy9wXTy2Mlj8wsvHHl8LpcyPVvXBeeMYgwxQv8DisXIgVoQ5VxGqS/JzHjl0Nju8V6lCsmgISbz3kR9iFIphNAFT1lMUDxgc882TELKM7PNZplC7DpOlO3rd6QluRCEke5rYpyqEACGUTlrtcopxxAaISPD+SOHHm5pbBTjgm8cPtRaeG4u6ZiEcsm4rzODEZNR15S5Pmes2ZhqjECgco3n+l3f0TVKKUEYqRjBGKNABYpkWr+kWZOmHMOSnKo4TPfNOGYVgKwkaQqHfX28lIOI6ox3P8qpoDTly70TAeccKIARTRfcd6VrS6ZpBGMIFARhjFIAQAIj5BGQ4khoGEEEAeCUVBRU6O01gSJBPCVpPmU90KMYlFoMU7UbrUEY6FyjNBGPKwkFApUS3J0AYxUACgFBMEZwQlWUfHZwplxolHJDUThcHCpGUa1QmMsMPpgeqAzmalE4XR7ePzVWLO6sRlE+MzBa2TVSjCqF/N7dtUIYZdNBLpMNgqAQ5qMwU95ZqA4NMgIIRjGg9Nimuby8vL29/dUXn65dWfnn3+2//rx7d+uPO5u3f7x8+fT8fOfKldubm+u/rF9aWXnj9dNvnjnz68bG6urai8dP/v7bnRsb67du3bp5c3Nra+vve/fOnz+3cWP95+s/YZToFkCY0DSSy2Zmp2dq9cpIqfjU8eNPHn12bt/+p+cOfv/l52ffeqfdXvrsk+WPlz967dWFUydOvH3u3NLFxfffu7Dw8itL7aXp1tSuncOt1mRranKi2Yzy+Ymx8Xq1iiBQFCVGkEIQxAhCiBgTKJHIj9ZL03sc261F0erq2tXO9bUfrl29dOm7b7+5cOGDxYsXO51rnU7nw6V2u93+euVykAljsZiigB09PfHeOFCURG9vvGeHEo8rceU/R7DsjGIjc3sAAAAASUVORK5CYII=" nextheight="168" nextwidth="400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>A <strong>new block is mined every 10 minutes</strong>, the 10 minute time is maintained by adjusting the difficulty (if blocks are mined too quickly the difficulty increases and if they’re mined to slowly the difficulty decreases).</p><p>So if we are halving every 210,000 blocks then we should have a halving event every 4 years.</p><p>Minutes Per Year = 60 minutes per hour * 24 hours per day * 365 days per year = <strong>525600 minutes a year</strong></p><p>Minutes to Mine 210,000 blocks = 10 minutes to mine block * 210,000 blocks = <strong>2,100,000 minutes to mine 210,000 blocks</strong></p><p><strong>2,100,000 minutes to mine 210,000 blocks</strong> / <strong>525600 minutes a year ~= 4 years</strong></p><p>Below are the date of the halving events and their estimated halving events.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/79b1ef34bf1d90bdd8ca5f4f19d70af5.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAANCAIAAABHKvtLAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAC60lEQVR4nI2UMajkRBjHv+J1W7hlOOK5umAwnKDs6bLkCGc4iSAyPAYuCikGHYUDI+wTBm4Kg2yxxT5OBLeJYJAIVvFI80CenYHDhzx4zyJNqimmypRp0jzJzRoe+4rzY4r8v/kPvyH/5APVqGFJKa/L/9OpqmoymViWhRCybfumH9q2vfqvrj/rUo3a6+x5jo+PEUIY4yiKXNcty3LP3AMcx3FdlxByE9C+qKNvYJpmEARXV1dCiNFoRAgxDMNxnDzPQTWKcz6fz9M0lVJqEiHEdV3HcYQQ4/HY8zzHcSzLsm2bUmrb9nw+NwwDYyylnM1mo9HIMIwkSfI8j6LI87w4jgEgy7Ie0HVdmqZd10kpLy8vLcsKwzCKoqIopJRt2w4G7em6LgzDQWZZhhDinNd1LaWM45gxtlwuwzDsM9CxlGWpGiWEOD8/931/tVoxxpIkEUKoRjHGEEK+72uPahSlVGcohEjT1LbtJEnquhZCcM6jKKKURlEkpdwBiqJQjarrWgP0W8qyrK5r1ShCSBAECKEBsFqt8jzXR/QuY2y73QohgiAIw5AQgjEWQsBff390dgHf/wRnF/DHM8h/h3fvg/8QPj2Cn5/2nbMLOCTw/iG8h3aeZ//0u09+3MlD0suvvoFPHvXywxDufQBvvAIffwF/nr0Gvz39dr1ZPAxfWm8W8eruEbMB4M7bcOct+OyREa/urjeLV2/Dy7fg9i3Qnq8fv/7OPXAf7OTnX06P2Jt6af93P9xfbxbrzeKXX5d90HEcI4TiOF4ul5TSg4MD13Uty8IYM8Y455ZlmaYJAJxzxhghxLbt2Wym84yv1Z7cbrc7AMZYAwghADCbzUzTRAhpwHQ61YDh8xiPx5PJRB95AaAsS83Inleapp7n6ZA551mWFUVBKfV9fzqd5nmeZRljjFKKMS6KQhuG2pOnp6f9f3BychIEQVmWwyQJw7CqqmHyVFUVBMH1WZSm6SDbtlWNap/XzVn0L+Em5zlvUPh7AAAAAElFTkSuQmCC" nextheight="558" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-price-of-bitcoin-and-the-halving-events">Price of Bitcoin and the Halving Events</h1></div><p>There isn’t a direct correlation between the price of Bitcoin and the halving events. Usually the trend is that Bitcoin is fairly stable then there is an uptick after a halving event, but this time (3rd halving event) we’ve seen the uptick before the halving event.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9dbca8854f140ade37b902ce998ec483.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAIAAAAzPjmrAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADiElEQVR4nGOYvfXR/D0vZm6+3zD71IRVtyasutG34kpK87b5e16UTjg8e+ujyWtvdS250jL/XMvCCz3LrnUtuTJh1a2c9p2V0443zT+7+vC7pvlnG2afsojox4oYdpz5dvj2/zPP/h++/f/gDRC68OL/7gvfTtz/v+LAy3OP/u+79nv3hW/P/4IF7/7fe+n7ibsgwZ3nvhy88X/Lqc+7L3w7eOP/7M33sCKGkrLOyqpJ1bVTyiomVlZNKquYWFzWU1jSnZXTFBtfSjZKSK4oKevMK2xlUJXx15QLU5YK0pAJleO1FGO3kuEy52Gw4GSwpATxMFibaSYoS3kxcDOYU2gWJw4LfBxKtZSD0S3QkAn1d6/SlAvWUgjnZbDhZLAU5nVxMMkJ8qo2Uo/XUgiHKBNgs7c1yvSwKVCXCVSWCuJksORnc7Q2yLDUTY7xb3K1LtCUCzbQiJMQcmbgYbbgYUBBbpZZBRlT/BxLjdVjICJSAh6RAfV+jqW2xilwQTlR3zCfit3z58+oqcsJydKTtnfUcFUTtwv3qy3OnlYYFPVhRZqTnhuWIDLTSzbSSuBlsIH4gJPBUkrAw840U03MsTk1rjA0Jsjary45oTkrc/mkSZMbmhvzixrzi5py8+pzC/QVvaxN0qxN0oR5XXzMI4Q5zbFYICPszclgGe8e5GHsoylmoydtF+QYHu4WWZCclZlQBEeVhfXIXAhSk/GEaOdhsLYwSuFhMMFigaacT3pIQmxESVhQQWRoYVhQQUJcTURYaVhwATJKSagPCypAQwoSXnALNGRCeZgtEBaYqXi463s46HkmhBa4uucho8Dgag/vQjTBkLB6NBFX9zxJUYQPZIS9ET7gZjDzdYyxtMk0s8518a40s85FRo7ulRa2BWiCmMrMrHPFBD3gFqhI+iMs8DDxV9dNgSBzm2I4Wx2MTK0KtQzS0QQxlanrpvDxuUkJeEAskOB3Q1ggLhsmpRRFOeJid4RnNBQLeMV8+SSDUFEIEhmEFyHUsDPbwy0AkyagjKYi6S8o5MnL7yYs4s3B7Swm7sfG4Sgm7gdh8/K7CQp5Cot48/K7wQU5uJ0lJAIgWiB6IYIifG48DNbCvC58DNY8DNagVGRs7Gts4q+sai8pbaGgYCsuaaKsai8qbqSq5gghpWWtFRRsIVKqao5wUl3DGaJFQcFWWtYaWQpCioobSUgaAQAcf7rHlhUkyQAAAABJRU5ErkJggg==" nextheight="746" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-economic-impact-of-halving-events">Economic Impact of Halving Events</h1></div><p>The intention for the halving is to slow down the rate of Bitcoins coming into the market, and in turn keep the currency</p><div class="relative header-and-anchor"><h2 id="h-impact-on-crypto-related-stocks">Impact on Crypto Related Stocks</h2></div><p>The companies that would be directly impacted by the halving are mining pool companies and companies that supply mining infrastructure. Marathon, Riot, and Clean Spark are some of the biggest miners today, halving the Bitcoin reward might remove many miners from the market and allow some of these larger mining companies to expand. Companies like NVIDIA and AMD will see negative affects from their mining equipment sales because there will be less miners.</p><blockquote><p><strong>Note</strong>: NVIDIA and AMD are growing their AI business and might not be deeply impacted from a stock perspective.</p></blockquote><p>The companies that are crypto adjacent have been Coinbase, Block (Square), Microstrategy, Galaxy Digital Holding, Paypal, and Reddit because they have a large holding of Bitcoin and some provide crypto utilities. Their growth is indirectly impacted by how the halving impacts the fiat value of Bitcoin and the movement of Bitcoin.</p><div class="relative header-and-anchor"><h2 id="h-impact-on-other-pow-coins">Impact on other PoW Coins</h2></div><p>Since the halving event reduces the reward for mining Bitcoin PoW (proof of work) miners would have more of an incentive to mine on other PoW networks. As of today some of those networks are Dodgecoin, Bitcoin Cash, Litecoin, Ethereum Classic, Kaspa, and Monero. It doesn’t mean that the coins associated to these networks will increase in value, but there might be more activity around mining, which will eventually lead to trading in these networks.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f6598fa4c215a81af30ca657aa232153.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADeUlEQVR4nKWUTWwTRxTH50IvidRKkeASyqGHSI048XEqqvoBx55bqQcOSPQASICEKiWkBBcrJmgNYRMQH03AGz6WVE6FFZpxbQXTdR1WiTyRO0mcCcSDncXrOGYZITGnQZtBE5NQUcGTD0/PHv/n9/7vDdixcxcAoKVla0Nj08ZNzQCA5k8/AwA0NDYB8NHGTc0NjU2dga5xO/t+H1BcdBhjt38fTv2d1vU+ti4ghL0XLqLp+Zu3zGBX97nz+tzjJ9cGIsGubi3s5+Fwj1/vvVRcdGTdRtPybHHRAW7Z5Svh1ZZTY0nbtvmHRc3zCk6pPxrf2xEm89QXsG2bMTb/78Ne7WQ8nhRvRjjcYxiGbdtCCM55MvpH+UlRCGFZlq7rGGMhhGEYoVCIUjqRn0mMZ4QQYMd3AHxijj7wBTDGlNL8dPZ8T/fhI0cJIfU3IoQYhiGLNc+7OTpScEqcc0rptYEIxphzblmWYRiU0rniQmI8U3BKG779EYAtQ3/e9wUYY5xzxp5ls5OZjH/T+uCcyzbKvOZ5Kld1xpjM1bcn+wa/2Pdzboa8bhHGOPLXSMuer9s7ThiGUS9ACNE0TbZIEjjVJSGErveZpkkIEUJgjAOBgCSAD/8pOCUAtgAA+qPxVZNXIHyUD4+a5z0uPs3kZivVGqi4y5IgdPZi67Zd7R0n1rRICBEInkIIrSGglEZuDEqTfYLgKUmQziGnugQ+bgUAXDZHfAFKqXTi9tCdzs5fNU2LRqP1N0IIKdCF2dnnz/xGY4zl+EkzEEKMsYJTSqNswSn90HYGfL47ZU/5AmQlGGPxRIJSuh4ZQqhGK5NMLrkVWTRNU/6eUgohdMuuU12SM/bN/jbQujthTa6anM6h/ceOXbn82/oW6bouW1R96kavDsg9ME1T0zRlsq7rag8KTkkerLjLPkG9ye/0WawM6P8MX0ARDBv9X27feuDgoTXXJ4QoAs752PBdtcmnT59RBOFwD6U0MZ4ZvBdLo+xbCF6+fJEai0MI5XK+d0zl83PFhVUCOaaTE6hafhS5fglCyBhbAxEKhdRbNGoOSYJYLFZPIA2fInNodlodfC2AEHqQstyy23uhL9jVfbztF/l3MiCE6lGrF4AQKgFN06TARH4mZt33N/mr7wHY7L9FFXdZGUsIeeuY/pfzqr4+OXs9uuen9twMeQWsV50TUErLwQAAAABJRU5ErkJggg==" nextheight="805" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Image from: <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af pc" href="https://crypto.com/price/categories/pow">https://crypto.com/price/categories/pow</a></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-halving-and-greshams-law">Halving and Gresham’s Law</h1></div><blockquote><p><em>bad money drives out good</em></p></blockquote><div class="relative header-and-anchor"><h2 id="h-a-little-bit-about-the-gresham-law">A little bit about the Gresham Law…</h2></div><p>The idea behind the Gresham Law is if two forms of money are in circulation at the same time then people will use the bad money and save or hoard the good money, eventually driving the good money to appear less in circulation. An example is gold and fiat currency, gold it’s considered (even today) good money, but how many times did you buy something with gold or receive it?</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2fcea25111c63ec5a63d02a6db8be515.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAWCAIAAAAuOwkTAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAFGUlEQVR4nI2VbUxTVxjH/4NkY5MpS5aZfXAxvoC8NUZGhzQgQQWWER0uvmW6TTdkwmTrdKVgBTNLZVsFV4uiVWq5KrZaWtrSlpd2rGGxoW65Xdq4+6Gam6UxWW2M6QdJCOlyjq1SzZxPntz873PPPb/zPM+552Lm4cz/Os/z4XD4b2o8zweDwXA4HIvFXuRdvMggjuO0FweYS1cuMoxzbOKqwXiRYX5n/3whQCgUMhgMzuea5pxaKcv4sRWPXdq0KL8tL1+WmydblS/LzZflrhLndu5d0N2Q1t2QdqI+40R9hmLPIo7jwLIsz/PxePzBg/utLS1SqVSj0chkMrlcrlAo5ubm4vH46KjpcjuYNpQtRU0hLrdDugtoB+RAESCk4kuoqyFdjXXAWqD9XZyqhs/nIwCWZaPRaCQSCYVCt27d4qmFQiG/3x+lZrg60C2BqgUd+yH/Gj1SNOwAJCCTrab+AfAFjm5EcwnWZqBqMcQiHK3B9PR0IoM/bt5U9ZxUKBRms1mv1zMMo9PpLly44PV64/H4yKh15RRWTAFNZLFEqLFynIpDwBEiXhnA22YaaSXsFVN4c4gCfD5fiBrHcT6fLxgMBgIBn88383BmNmmWEdPKcSxzAT8BDBUqvOOg4hSgISL9LN4YpBE10EfEgsvzABzHeTyesbExe9Iezz47O2t1DIvHIXZjey8+7idicw+WjtDpThNGCkBL8CmAO3fu3Ljxm0qlOnbsmF6vn3vGRp3Dt6fxsxzf1KPlAOyXMKhBrhPZk4CYFCR7EpnnSU2WTtLeHCKRhdfnZTDpdvf29iqVykdLfgpgdQxnu5DtAhpJD3LdeK0HrBsnFWiux8FGDOlgZvC6gWYgIW1Y5kLaYBLAcVwkErl79+6jLzYcDj/1sdgdFo0bcj26ruGHazg7AYkafhd+NeGGDd4RBNywDCRKlDYIDD7TA5Zlu7u7DQbDQL9WpVL5/f75PXDYh4OTMJzBETEUbaREzGkCGOzD0W/xfQusAzBryYwkAwVwOBXA87zH41Gr1SazUa/Xm0wms9k8NuY0Go06nY5hmL4zJ29PQy3Hd41oa8a4Adf78dcUzp2ApBHSZjivYFRPepDYpoeQ60ndpizLMgwzMTFhMpmMRoLxer2PM7APDR0EDgK7gE+o2A1UOLDeBbRhsRKVLhSeSWbQQfqUkgHHceFwOBAI8DzPcZzf7w8EAvM74bSatCKcL4ZKiH4R+ktwOAfb1mDXe6jLw6Zs7C5B9apEDxZeBy6lAtxut1arlUgknZ2Krq4uuVwulUqVSmVHR4dKpeI4TqfVTGtx/HPsXY+GGjDt6GtBA3AA2AhUU7EVWHMcZWexcBteqiOisDMJyMzMLCoqqq6urq2tLS+rqKysLC8vF4lEJSUlFRUVGzZsWED3ZyPwIbCDip0ga0wcFa2Jo6KJPtoKfETFV0gCsrKycnJyCgoKBAJBUVFRXl7eW6n2ahLwGbCHiu1U7AO2UOo+YDOwToyaIxDUoXAnEWWN8zJYvny5UCgUCATFxcUCgeC/AJ8C+5OAptTIbiSPCiZxFD7pQXp6ekFBQVVVlVAoLC0tFYlEpaWllZWVS5YsyaIGOl0TUANsomILrUAT8D5QS8VO0APVSh/UE/GylgIikYjFZrPY7M9xs8VqtljnRWypt0/GzHeLzR6JRBCLxcjf5h/i0Xv3H4mnbqP37vcxJuOIe/QXr8HqsrmmhhyTzx9PrtFoLBb7F7qSMIegjoZoAAAAAElFTkSuQmCC" nextheight="952" nextwidth="1380" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-gresham-law-and-bitcoin">Gresham Law and Bitcoin</h2></div><p>The supply of Bitcoin won’t decrease with the halving but it will slow down the supply, making it somewhat scarcer. This scarcity might drive people to hold on to their Bitcoin rather than spend it.</p><p>The combination of hoarding and new Bitcoins entering into circulation might decrease the velocity of Bitcoin (how quickly units are exchanged), causing an increased value. This would make Bitcoin, “the good money,” to disappear from circulation and for Fiat currency, “bad money,” to appear more in circulation.</p><p>The same theory can be applied to other cryptocurrencies and Bitcoin. As Bitcoin, the “good money,” is hoarded more blockchain projects will use cryptocurrencies that are considered the “bad money”. It wouldn’t make sense to create DApps that use a crypto that’s high in value, so instead, companies would create their DApps using crypto that has low transaction fees in fiat. This could give way to modern cryptocurrencies like Solana, Algorand, and Avalanche.</p><div class="relative header-and-anchor"><h1 id="h-halving-story-in-the-bitcoin-core-code">Halving Story in the Bitcoin Core Code</h1></div><p>Here we have the logic that tells us that the mining reward (subsidy) is halved every 210,000 blocks.</p><pre data-type="codeBlock"><code> CAmount GetBlockSubsidy(<span class="hljs-keyword">int</span> nHeight, const Consensus::Params<span class="hljs-operator">&amp;</span> consensusParams)
{
    <span class="hljs-keyword">int</span> halvings <span class="hljs-operator">=</span> nHeight <span class="hljs-operator">/</span> consensusParams.nSubsidyHalvingInterval;
    <span class="hljs-comment">// Force block reward to zero when right shift is undefined.</span>
    <span class="hljs-keyword">if</span> (halvings <span class="hljs-operator">&gt;</span><span class="hljs-operator">=</span> <span class="hljs-number">64</span>)
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;

    CAmount nSubsidy <span class="hljs-operator">=</span> <span class="hljs-number">50</span> <span class="hljs-operator">*</span> COIN;
    <span class="hljs-comment">// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.</span>
    nSubsidy <span class="hljs-operator">&gt;</span><span class="hljs-operator">&gt;</span><span class="hljs-operator">=</span> halvings;
    <span class="hljs-keyword">return</span> nSubsidy;
}</code></pre><p>The 210,000 is defined as a parameter value (nSubsidyHalvingInterval) in the chain params.</p><pre data-type="codeBlock"><code>class CMainParams : <span class="hljs-keyword">public</span> CChainParams {
<span class="hljs-keyword">public</span>:
    CMainParams() {
        m_chain_type <span class="hljs-operator">=</span> ChainType::MAIN;
        consensus.signet_blocks <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
        consensus.signet_challenge.clear();
        consensus.nSubsidyHalvingInterval <span class="hljs-operator">=</span> <span class="hljs-number">210000</span>;
...</code></pre><p>This is where the maximum supply of Bitcoin can exist, if a bug ever causes the supply to exceed 21 million Bitcoin will go into a fork. The “MoneyRange” line of code is crucial and is referenced throughout the codebase.</p><pre data-type="codeBlock"><code><span class="hljs-comment">// Copyright (c) 2009-2010 Satoshi Nakamoto</span>
<span class="hljs-comment">// Copyright (c) 2009-2021 The Bitcoin Core developers</span>
<span class="hljs-comment">// Distributed under the MIT software license, see the accompanying</span>
<span class="hljs-comment">// file COPYING or http://www.opensource.org/licenses/mit-license.php.</span>

<span class="hljs-meta">#<span class="hljs-keyword">ifndef</span> BITCOIN_CONSENSUS_AMOUNT_H</span>
<span class="hljs-meta">#<span class="hljs-keyword">define</span> BITCOIN_CONSENSUS_AMOUNT_H</span>

<span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;cstdint&gt;</span></span>

<span class="hljs-comment">/** Amount in satoshis (Can be negative) */</span>
<span class="hljs-keyword">typedef</span> <span class="hljs-type">int64_t</span> CAmount;

<span class="hljs-comment">/** The amount of satoshis in one BTC. */</span>
<span class="hljs-type">static</span> <span class="hljs-keyword">constexpr</span> CAmount COIN = <span class="hljs-number">100000000</span>;

<span class="hljs-comment">/** No amount larger than this (in satoshi) is valid.
 *
 * Note that this constant is *not* the total money supply, which in Bitcoin
 * currently happens to be less than 21,000,000 BTC for various reasons, but
 * rather a sanity check. As this sanity check is used by consensus-critical
 * validation code, the exact value of the MAX_MONEY constant is consensus
 * critical; in unusual circumstances like a(nother) overflow bug that allowed
 * for the creation of coins out of thin air modification could lead to a fork.
 * */</span>
<span class="hljs-type">static</span> <span class="hljs-keyword">constexpr</span> CAmount MAX_MONEY = <span class="hljs-number">21000000</span> * COIN;
<span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">bool</span> <span class="hljs-title">MoneyRange</span><span class="hljs-params">(<span class="hljs-type">const</span> CAmount&amp; nValue)</span> </span>{ <span class="hljs-keyword">return</span> (nValue &gt;= <span class="hljs-number">0</span> &amp;&amp; nValue &lt;= MAX_MONEY); }

<span class="hljs-meta">#<span class="hljs-keyword">endif</span> <span class="hljs-comment">// BITCOIN_CONSENSUS_AMOUNT_H</span></span></code></pre><p>This is where we add the block subsidy (mining reward) with the transaction fee.</p><pre data-type="codeBlock"><code>CAmount GetBlockSubsidy(<span class="hljs-keyword">int</span> nHeight, const Consensus::Params<span class="hljs-operator">&amp;</span> consensusParams)
{
    <span class="hljs-keyword">int</span> halvings <span class="hljs-operator">=</span> nHeight <span class="hljs-operator">/</span> consensusParams.nSubsidyHalvingInterval;
    <span class="hljs-comment">// Force block reward to zero when right shift is undefined.</span>
    <span class="hljs-keyword">if</span> (halvings <span class="hljs-operator">&gt;</span><span class="hljs-operator">=</span> <span class="hljs-number">64</span>)
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;

    CAmount nSubsidy <span class="hljs-operator">=</span> <span class="hljs-number">50</span> <span class="hljs-operator">*</span> COIN;
    <span class="hljs-comment">// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.</span>
    nSubsidy <span class="hljs-operator">&gt;</span><span class="hljs-operator">&gt;</span><span class="hljs-operator">=</span> halvings;
    <span class="hljs-keyword">return</span> nSubsidy;
}</code></pre><p>Here we stop issuing fees if the accumulated fees exceed 21 million, as defined.</p><pre data-type="codeBlock"><code>nFees <span class="hljs-operator">+</span><span class="hljs-operator">=</span> txfee;
            <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>MoneyRange(nFees)) {
                LogPrintf(<span class="hljs-string">"ERROR: %s: accumulated fee in the block out of range.\n"</span>, __func__);
                <span class="hljs-keyword">return</span> state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, <span class="hljs-string">"bad-txns-accumulated-fee-outofrange"</span>);
            </code></pre><div class="relative header-and-anchor"><h1 id="h-resources">Resources</h1></div><p><strong>Swan Bitcoin — Next Bitcoin Halving: April 19th History and What to Know!</strong></p><div data-type="embedly" src="https://www.swanbitcoin.com/education/bitcoin-halving-dates/?source=post_page-----9d7c9c4a5830--------------------------------" data="{&quot;provider_url&quot;:&quot;https://www.swanbitcoin.com&quot;,&quot;description&quot;:&quot;Every four years, the Bitcoin network experiences an event known as the \&quot;halving.\&quot; The fifth Bitcoin halving is set to happen on March 26th, 2028. But, WTH is a halving, and why does it matter...&quot;,&quot;title&quot;:&quot;Next Bitcoin Halving: March 26th, 2028 History and What to Know!&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://www.swanbitcoin.com/education/bitcoin-halving-dates/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/526c00219377eb3c02ac1fb97b99c441.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Swan Bitcoin&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,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&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/526c00219377eb3c02ac1fb97b99c441.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/526c00219377eb3c02ac1fb97b99c441.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://www.swanbitcoin.com/education/bitcoin-halving-dates/?source=post_page-----9d7c9c4a5830--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Next Bitcoin Halving: March 26th, 2028 History and What to Know!</h2><p>Every four years, the Bitcoin network experiences an event known as the "halving." The fifth Bitcoin halving is set to happen on March 26th, 2028. But, WTH is a halving, and why does it matter...</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.swanbitcoin.com</span></div><img src="https://storage.googleapis.com/papyrus_images/526c00219377eb3c02ac1fb97b99c441.png"></div></a></div></div><p><strong>Swan Bitcoin — Gresham’s Law</strong></p><div data-type="embedly" src="https://www.swanbitcoin.com/economics/greshams-law/" data="{&quot;provider_url&quot;:&quot;https://www.swanbitcoin.com&quot;,&quot;description&quot;:&quot;Bitcoin's legal status as commodity money brings to light Gresham's Law, an economic principle stating \&quot;bad money drives out good.\&quot; We explore how to apply Gresham's Law to the Bitcoin Standard.&quot;,&quot;title&quot;:&quot;Why Gresham's Law is Important For You (2024 Update)&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://www.swanbitcoin.com/economics/greshams-law/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/e0d963902ebce1dc119c2319b24dda28.jpg&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Swan Bitcoin&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,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&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/e0d963902ebce1dc119c2319b24dda28.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/e0d963902ebce1dc119c2319b24dda28.jpg"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://www.swanbitcoin.com/economics/greshams-law/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Why Gresham's Law is Important For You (2024 Update)</h2><p>Bitcoin's legal status as commodity money brings to light Gresham's Law, an economic principle stating "bad money drives out good." We explore how to apply Gresham's Law to the Bitcoin Standard.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.swanbitcoin.com</span></div><img src="https://storage.googleapis.com/papyrus_images/e0d963902ebce1dc119c2319b24dda28.jpg"></div></a></div></div><p><strong>Bitcoin Core Github</strong></p><div data-type="embedly" src="https://github.com/bitcoin/bitcoin/tree/28f2ca675f89a764e1ec8eb5671b35357b8677f3?source=post_page-----9d7c9c4a5830--------------------------------" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;GitHub - bitcoin/bitcoin at 28f2ca675f89a764e1ec8eb5671b35357b8677f3&quot;,&quot;author_name&quot;:&quot;bitcoin&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/bitcoin/bitcoin/tree/28f2ca675f89a764e1ec8eb5671b35357b8677f3?source=post_page-----9d7c9c4a5830--------------------------------&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/ccfaf2e309d0e1e90f84a3528bc7aadc.png&quot;,&quot;author_url&quot;:&quot;https://github.com/bitcoin&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAClklEQVR4nK1Uz08TQRSeAxdu3An/C/8AB2O8edMEiCspwXiQCyckalrBHkw8qDExaqwk2JD0pmgQo1YKq1DaXXa3u+3+orTQbrszu/PMdrd1t0iUyJfvMO/tm/ftvPdmEHRAzwI4BYQQx3EAAGPcC0N9Qb0U4QWEzJ7njxt7Yb5SIEAprXmoH9ZqNsatVrtpWRjjWq0mSYpumEq54jgOxtg0DyyrdTK7ny6TyQwPDyOEGIaJnIBS+uLVm0ePnywvr6ykV9OrmafPnr//sP5u7SMzfZOZnhlnphfu3Y8vJq9OTi3cTezm9wDA7abws+fzeYTQwMDA2NiYr+EXLSiRIIpFjlfK5UKR4zi+UOQ03dB1I5vd/Potm9ti1z9tfMlurm983tnZPahWw4XCGAPA3NwcQmh0dDSVSg0ODiLkZXYcJziBjQP4jSKEtNrtkOm4lPr+XnHDvQWAZDKJEJqdnY3H4wihoaGhiIAgyoIoq5quarqsqEq5UuAEQZQ5XqxoeqHI7+3xJVnh90tm5/f72uufY2RkBHWRTqd/C/w/aEej2WwmEolYLMaybM95PgJwYo4jY3qOGqSDcJ/+VYBSj2cSiwj4+/segvDNpJFb6p6cpdMQTKumG4Uit83+8IcaAERJEUSpJMu+qRumpum5LfbYQ6NcUb9v5nTD7Hs5/KVRPWLzpUCAEodi4trY1AyBL6mKqpVV18a21a4f1kuiYmhG22pRTBr1Y77IN46OKXFaDWuf26+aVZdSmzi4S7tzYzT9MPdTIBhHxtQFIAAtoDaA/0sUwPZI3W5A+BPpeP5eImliyeP4kjTxQJrs0nd6jJrh9fji9tTDy/OpiwvLlwKmLtx5O3lrfibGXJu5cfv6ldcvF38BpS9lWQZ6OYkAAAAASUVORK5CYII=&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/ccfaf2e309d0e1e90f84a3528bc7aadc.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/ccfaf2e309d0e1e90f84a3528bc7aadc.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/bitcoin/bitcoin/tree/28f2ca675f89a764e1ec8eb5671b35357b8677f3?source=post_page-----9d7c9c4a5830--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - bitcoin/bitcoin at 28f2ca675f89a764e1ec8eb5671b35357b8677f3</h2><p>Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/ccfaf2e309d0e1e90f84a3528bc7aadc.png"></div></a></div></div><p><strong>Blockworks — Bitcoin Halving BTC Price Implications</strong></p><div data-type="embedly" src="https://blockworks.co/news/bitcoin-halving-btc-price-implications" data="{&quot;provider_url&quot;:&quot;https://blockworks.co&quot;,&quot;description&quot;:&quot;The halving officially takes place on April 19, meaning there are roughly 8,600 bitcoin blocks until the event.&quot;,&quot;title&quot;:&quot;How the halving could impact bitcoin's price&quot;,&quot;thumbnail_width&quot;:1600,&quot;url&quot;:&quot;https://blockworks.co/news/bitcoin-halving-btc-price-implications&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/21af0807b23567cba4e1fb4dec4b44a0.jpg&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Blockworks&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:900,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,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&quot;,&quot;img&quot;:{&quot;width&quot;:1600,&quot;height&quot;:900,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/21af0807b23567cba4e1fb4dec4b44a0.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/21af0807b23567cba4e1fb4dec4b44a0.jpg"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://blockworks.co/news/bitcoin-halving-btc-price-implications" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>How the halving could impact bitcoin's price</h2><p>The halving officially takes place on April 19, meaning there are roughly 8,600 bitcoin blocks until the event.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://blockworks.co</span></div><img src="https://storage.googleapis.com/papyrus_images/21af0807b23567cba4e1fb4dec4b44a0.jpg"></div></a></div></div><p><strong>Bitcoin Talk</strong></p><div data-type="embedly" src="https://bitcointalk.org/index.php?source=post_page-----9d7c9c4a5830--------------------------------" data="{&quot;provider_url&quot;:&quot;https://bitcointalk.org&quot;,&quot;description&quot;:&quot;Bitcoin Forum - Index&quot;,&quot;title&quot;:&quot;Bitcoin Forum - Index&quot;,&quot;url&quot;:&quot;https://bitcointalk.org/index.php?source=post_page-----9d7c9c4a5830--------------------------------&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Bitcointalk&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://bitcointalk.org/index.php?source=post_page-----9d7c9c4a5830--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Bitcoin Forum - Index</h2><p>Bitcoin Forum - Index</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://bitcointalk.org</span></div></div></a></div></div><p></p>]]></content:encoded>
            <author>satoshifanclub@newsletter.paragraph.com (Mabel Oza)</author>
            <category>bitcoin</category>
            <category>blockchain</category>
            <category>cryptocurrency</category>
            <category>crypto</category>
            <category>crypto mining</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/29fe9be44538af1e5585e845871a2dfd.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Dissecting Algorand]]></title>
            <link>https://paragraph.com/@satoshifanclub/dissecting-algorand</link>
            <guid>itoyewLrk3NdqDyQlJD0</guid>
            <pubDate>Thu, 26 Oct 2023 05:02:47 GMT</pubDate>
            <description><![CDATA[Popular Solutions using AlgorandA few standup apps that use Algorand are Republic, Securitize, El Salvador’s blockchain infrastructure, Marshall Island’s digital currency, Orion Protocol, and DUST Identity.Consensus — Pure Proof of StakePure Proof of Stake uses verifiable random function (VRF) as a weighted lottery where the weight is dependent on the number of ALGO’s someone owns.VRF (Verifiable Random Function)VRF performs cryptographic sortition to select committees to run the consensus pr...]]></description>
            <content:encoded><![CDATA[<div class="relative header-and-anchor"><h1 id="h-popular-solutions-using-algorand">Popular Solutions using Algorand</h1></div><p>A few standup apps that use Algorand are Republic, Securitize, El Salvador’s blockchain infrastructure, Marshall Island’s digital currency, Orion Protocol, and DUST Identity.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b7813a3ebc4086ecae8de3bd93782c9b.webp" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAALCAIAAACRcxhWAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAD20lEQVR4nCWTzU/bZgDG33+g2nW7TeJQtEu1E6dpp6JpN05cuh2mSTA0bdOk7kPrVtCgVgO0K01RJbdhLgS2uCGQhVIHbELiYNdOXpKQt86HHRvHNsGQQEIBVz54KvyOz3N8fg/QLF0zFLNhnr09Q7W6fXjQ398fWYkybHKNzbJ8xrD2xXxGNUzXdfdNy3EchJB7QUHR70XWTpot13U9z2sdt70LLtvLEJSq1XwZ8ttps2G+FLe5rNDX1/fn5NiTubmfh36ZuT/jed7C88VwjNZN43rv5wCAq1c/oiiKpmmf/0loham/ru5sbL0IL03eezgxdocMhTZeZeaikTTPi7kckGtaYHZWSG80DI0OL5R4XpOkcIy+/ccITdOrCZ6iKEEQ3hzXTjvKlSvvAQB6ez+DEFIUNTI6kskV4Y5kWPs4jkti9taNGyG/X1CUjUKezxeXl2IAwzBwAUEQg0PfffLp9eQmCwC4du3jLgA2ycXJyUmfz1etSvgz/2P8cTKdpOKJsTv+zVT64fTTYm13OfbfWiKh6SaO4xzHqapKEASGYTiOsywL0iwXX2ci0Zht27f9f+M4blnWXd/9m7/+rmtmPE7X63W/30/TNCNuJwRYMRvlghSafR5aWKopuziODw8PI6nEsixN00K2+DQYiSfS+7qsFLmmXQcURcmybNu2bhqabpZVQ0Rl0jdx3Dp4NPUAQpgt7KSyBdUw52ZJhErxBBNeWfE8TxCEer0eicbyxQJJkr6JcXEb9vT0ZKRcMBgkSRLDMAghQAjNz4csy+q0O47jQAj/JRflTOb87Cy6uuZ5XjQanRy/e6nE6flbuCMhqQR3JDrJOY7juq7jOLkED1kBISQiWK4qnufxgoik15ZlAds+DM4vNptNgiBIkkQITfmnCYKQa7UUQ2m6+c3gwIcfvA8rleUkLxmN0CoTXXrBivn5SJx5ucSyrGVZtwZ/ynIZhBDN8g8CM+Wqwm7x7BZvNvZAV1dXd3f3epoPBAIROvnFV0N0kgMAVMrywOD3qqp++fVAmhO/HboJYS4QDY4NT8XXmXAkpummpJtHp+dpSc7n8xDCH/8aHR0dxTAsEAiIqBxcmEcIgdUE+8NvI0I2x0PkeV5o9p93GjxbSK6vCdncZipNMcmTkxYr5u3DA5pheEG0LIvjuNZRi0qkXNetKbut1lFJ4Dvtjn148FpWWkctVVUdx3l3tEKpOj41vbdnC4Jg27bA8s1ms1qp1BRZrmnlqlIoIsNupLK5zptzTTcty7JtGyHUaXcoJllTdoVXeV0zLze3bduw9tsnJ57nqaraaXf+B9TqEvGsjEKuAAAAAElFTkSuQmCC" nextheight="408" nextwidth="1200" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-consensus-pure-proof-of-stake">Consensus — Pure Proof of Stake</h1></div><p>Pure Proof of Stake uses verifiable random function (VRF) as a weighted lottery where the weight is dependent on the number of ALGO’s someone owns.</p><div class="relative header-and-anchor"><h2 id="h-vrf-verifiable-random-function">VRF (Verifiable Random Function)</h2></div><p>VRF performs cryptographic sortition to select committees to run the consensus protocol. There are three parts to VRF, keygen, evaluate, and verify.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/84297e0cafe823d735750dc1e236f13b.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAPCAIAAAAK4lpAAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADqElEQVR4nH3Tb0gbZxwH8OCGQ02EMXVatvmiL7YhSPGFSFv2TsZG7lVQ2GBMEFnZirDCtmZd18JadLOWQXUvhuKrGVcmONwt3MLF6+0eLtwtRzweL0dMLumZUPNnNpcnFxNjvWGOZRdt93nxcPDc8b3f78fP5na7Jyzm5+cNwyiVq7nHJeOU/f19XdfR/zqsHlo/sfX29tosnE7nnla+fJf+8Db5O1BPBKiqyvM8TdMsy1IU5ff7AQDBYJBhmBj5wTb5nqYSCKGTAd1dXW9fOP/OxYsvPPe80+l8+AjN/SIurm/dXQ5pmvZpzfj4uNfr1XU9l8slk8l0o00oJKKBHTWm63q5XD4ZYLfbX3255/VXXuvueMnpdMrqnuurP96/6Vv1RyuVCqghCCKVShmGkcvlKIqiaZphGJZlOY4jSfL7X6/O4V+zkv90V22Dg4PdFhiGeTyepaWl5Z+WFxcX2VNomiafwefzWd8MBAKKotgmJydHLWZmZkqlkl6DEKo/mE6Ub44dIaRpWqFQqJ+lUqmhRU1NTfUhYxgWiUQEQeB5XhRFWZZZlt3c4m/8/NEK88Nu7rhLVpqmxeNxxotzJMmRpAiYZDii63pDQE9Pz8DAwNDQUHNzM4ZhOzs7iqLEYrH4v7a3t0HIZxYhCMKVmrGxMVVVEUIQQlEUI5EIhLBea0PA2TNn7Ha7w+Gw2+0YhimKwnEcQRAAgI2NDf7+PelS58PVafODbDbL1KytrVUqFcMwqoKQ/+Ry8fqN/MQldOfOk0yuYch9fX2tFsPDw0SNOTccx31enFj1eNfus8/AeDz0rW8eXPvyz8+vPvj2O0CS9atYLGYbHR19y8Ltdms1+XzePAuFgq7r5vTSik/T9hBCJbh14CWqfqpK02XCd3R0ZP5vIpEweytJUjqd/m+T29vbHQ6HOWRZliGEJEkyDMPzvN/vFwQBAMCybNj7bpz5uJj+6zGOF2/dLly7jq58Vrw3d3T4xAyIRqOSJIXDYVmWs9nscUB/f39HR8fZms7OzpGRkUwmY93SlCInOCKlyGaM2UBAkgz+299xJQm3FmZnFxYWpqenIYTBYDAQCIRCIZZleZ4/ODiwnXvzja4X21taWlpbW9va2lwuF4RQEIT19XUAAI7jmyuz8hfn0vQKhFDigjFBkDi2+ChlaBpCKJlM/lgzNTWVSCR2d3cFQRBFUVXVZCpzXIHL5TpvMTEx8ZQdJbzmop6+ecrMGYaiKACAucn/AL1A/qZ9SIe7AAAAAElFTkSuQmCC" nextheight="646" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Y, our random string is unique and pseudorandom, it looks random, but with the proof, you can verify it with the verification algorithm.</p><p>In Algorand, each user (Algo holder online) runs through the steps above. They hold a secret key SK (secret key) and VK (verification key), the VK is known publicly, all handled out of band. If these users want to participate in the committee to run the consensus, then they need to do the following:</p><ol><li><p>Compute <em>Evaluate(SK, Qr) → (Y, ⍴)</em>. Here, <em>Qr</em> is a “magic” seed string available to everyone in the system.</p></li><li><p>Check that <em>Y</em> falls within a specific range <em>[0, P]</em> that depends on the user’s stake in the system.</p></li></ol><p>Algorand shared their VRF algorithm with Libsodium, check out the implementation below:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/algorand/libsodium/tree/draft-irtf-cfrg-vrf-03/src/libsodium/crypto_vrf?source=post_page-----e962f48f8c72--------------------------------">https://github.com/algorand/libsodium/tree/draft-irtf-cfrg-vrf-03/src/libsodium/crypto_vrf?source=post_page-----e962f48f8c72--------------------------------</a></p><p>Below is the standardization on VRF by Sharon Goldberg, Moni Naor, Dimitris Papadopoulos, Leonid Reyzin, and Jan Včelák:</p><div data-type="embedly" src="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-vrf-03?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://datatracker.ietf.org&quot;,&quot;description&quot;:&quot;A Verifiable Random Function (VRF) is the public-key version of a keyed cryptographic hash. Only the holder of the private key can compute the hash, but anyone with public key can verify the correctness of the hash. VRFs are useful for preventing enumeration of hash-based data structures.&quot;,&quot;title&quot;:&quot;Verifiable Random Functions (VRFs)&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-vrf-03&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/23920901f62a18c11e9545cb3953218a.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;IETF Datatracker&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAIAAAAzPjmrAAAACXBIWXMAAAsTAAALEwEAmpwYAAADBElEQVR4nJ2Ub0gTcRjHn970onxhSGFgZWVqESmmpSZR1kShNctmYlTYv41KnEW+0HeRIVJgkCHetJblC1Gi4eRsaL9geg1Py8vDS2VycCicu7EYXF2eXbSDY+pay+fV3XP3PJ/f8/s+zwNKFCbL8t+cYT+FGkSTGiHEcZyiKJIkqX6O4wRBUD2RGZEAaqTf73c6naIoUhRFEITqQQg5HA5RFBFCLMuuHTA4OEjTNEEQDMM4HA6O43iex/G+iSBsgqJsNhvP82sBBAIBNbUkSSzLEgRBkiTHcSzLjn0aZ5iv8/NzkvRznKLc7o+BQCBagCzL6kWT5IjT+Y7jOJqmC3QnGxsbBUG4fu2q2Vw5w4xYMUyvP/thsH/xhw8hl1rEYjg9wleA485JZnpu3ut2ux/W1582GKstd6xYa8UVc8ruTSnxkJwAWRn7E2OhTL9VEr0LC75eB/4rcgUqfHR0LHY97NoCet22lsc3CwoKzxnLblzMu1RerCssMVcUZafB4ey83Mz4nAOQeyh9b8r2u6asUn1qYhzErIPR0c8rendlBYLge/mi7cJ5w/P21v43TzL2QeJmSN0BO+MgKQGS4qGuts5SZbl//0HNvZqqKktT09NZzwzW8qi8VN+GPfP7/VFd0XdJWlKWpmc4a3Ot6fLRnCO6EoOu2pSXn3/i+LH83t7eytu3kvckd3R0CILX5RpimClJWgybKgxAmx2E3r+193mFb686bBT1ZZadb25uxjBsaHi4q6vLimGvOzvVBpuengodw38A5KCp4zowMEDTEyRJMszk8PCQzWYLPjM0Tbtcf5pHlmVRFLWQqAChxvO8JEkMwwiCIIoiy7LazvB4PFrSCNtiGUCtMT0tXX9KryiKKIqKolAU1d3dTRCEdkyj0QgAMRs2aiEIIQAoKixaDVsGUDNC0NRhVoKA9vZ2u92uaePz+QDAbDJrIQ0NDQBQbDCsViJMBZkZB0uKz2ivJEna7XYcx1WeygCAfhzX/unp6VHP9N8aaJqHruUIkq4G/AbeKGMaQxChagAAAABJRU5ErkJggg==&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/23920901f62a18c11e9545cb3953218a.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/23920901f62a18c11e9545cb3953218a.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-vrf-03?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Verifiable Random Functions (VRFs)</h2><p>A Verifiable Random Function (VRF) is the public-key version of a keyed cryptographic hash. Only the holder of the private key can compute the hash, but anyone with public key can verify the correctness of the hash. VRFs are useful for preventing enumeration of hash-based data structures.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://datatracker.ietf.org</span></div><img src="https://storage.googleapis.com/papyrus_images/23920901f62a18c11e9545cb3953218a.png"></div></a></div></div><div class="relative header-and-anchor"><h2 id="h-dont-fork-with-me">Don’t Fork With Me!</h2></div><p>An interesting feature of Algorand is that it’s not forkable.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5e2fe96a71042f767ea50a71a9fba9c7.jpg" alt="" blurdataurl="data:image/png;base64,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" nextheight="356" nextwidth="612" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Side Note on Forking</strong></p><blockquote><p>Forking happens if two nodes get a valid block simulataneously and different users can’t agree on which block to take or an upgrade can’t be decided on. In these scenarios the chain splits in two and as new blocks are added to the chain one of them will get longer than the other. Eventually the longest one will stay and the shortest one will die off. When the shortest chain dies off, all the blocks in it, along with all the transactions will be considered invalid.</p></blockquote><p><strong>Forking is not a bad thing.</strong></p><p>Algorand is built to prevent forks. It isn’t necessarily a positive feature, just another way of tackling the CAP theorem (Consistency, Availability, and Partition Tolerant). With blockchain networks like Solana, forks are created to rotate leaders quickly. Forking allows the network to process transactions quickly and keep moving when there are disagreements but sacrifices consistency in the process.</p><p>The benefit around this is there’s an assurance that transactions reach finality once they are complete (~5 seconds). In forkable networks, you need to wait after a certain amount of blocks (6 blocks is recommended in Bitcoin, which could be an hour) are added on top of the block to know your transaction is in and it’s finalized.</p><p><strong>How is Algorand Unforkable</strong></p><p>Algorand is unforkable because two blocks can never be propagated to the chain at once because only one block can have the required threshold of committee votes.</p><p>Below are the steps in the Algorand Consensus Protocol:</p><ol><li><p><strong>Proposal Phase</strong></p></li></ol><p>Every node loops through online accounts with valid participation keys and selects an account. Now an account is selected, the other nodes verify the account was selected.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d606e54c043c66fdfabb40205f30bffd.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAbCAIAAACSpRrNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEuklEQVR4nK2VfUwadxjHyZI1+2Pdlrgus2uyZrp2abZok05ha7dqU4u6uQpiK4gvMF+wSrROa1sBdQXfQMBD5KWCUFoY0/paN8Z8mWXRakRttGyZWQ26Ot7ayY1jJNJblI0/cBHt/OaXy93l7vnc9/e8HALeiZwgyOa3vhQaduDQ0Qr6NZfLFfQVxI4ABFIBKiYhBp2MxZMikLEKlXYXAGteLwzDFqtNNzR6mVH7btTHlxm1cZ+dx+JJFOolu92xtY9AAARBThC0WG0ul8tud/huWqy2zq5+GIa5gBh1Mj7+bBoCgTgSEQ2I5TtzAEHQonk5EUNAxSQkYgiJGILhx3sl5fTyyhqXy+VxeyYmp4jkwpdDwz94PzqDSMrJo2CSk9FotMlk2i7AYrURyYXFZVcFYhkWT1KotGx+awQyNiuHWllVNzk129X7TWVVXbvqK/BPl8Fg0Gg0crncbDYHB8ybZpslTWJ5a1ZeQYtk3TuTzQOkfMOk/kJp8dLSoxf2vVHJrNSN9OlGeoVtgpY24PbA19NzUzC8nqTggOm5KSa3hiNoxBGzuIAIhmHal6w6PrNHr8Vlphun5xAIRE5xbpuqlS9hc0WNLB6zqpFOKspkNlWvOv/YzhZ5IQiy2x0l5XSZUm2x2iro10RSxQPTz+SCi8+9cuC1g0c2F8xPvzygVhbxJNxt5WDN61349WFyGjkmPkXSrs6mXBweHVN39EIQtMUmiMTAsQ8j789M+S4DPiKwTG/euvXmwTDEv4qMjEQio/V6va8ENkdfMJm+IJH6tVpSUtLI0JDRaNzKgU8XCij7Xg0JC3tr//5QBAKBQqG2aKX5mRkph6vv6eEwGL5vMhgMQQCuDUEQ5DtxbdmoCyZTdUmpcXycQ6ffHRnR6/UBJRsIWPOup9p39PPWvF7/8j3jXx635zrAPR0TXUu7ugvD7j/1w/hdSkXBsuU3j9uz2W4gYGr2fgNPqO7obuAJO7v62fxWdUc3IGqTKdWyG5oWibyzq7+BJxzQDdZygOHRsadP114Pfxt1KhaG//EXBCCSKrJzi04lpJz5BFdALYs6frqknI48cYZCvRSXcDYFn41Owh6KiMKcI7x37HhWbm5145XMwsyh4aHwsPXaw2KwQQDXZTckzUAyjkj5PJ/FasRhzvF5wPnU9OYmQVw8moDHp+LTPjpxMi2TmIhOJJIzZDfFj584bDabr4RCQkICWiEQoFBprzCY1DJaVg6VzW/FZ+dzAXE8JvXTVByGQEzPzm3gCc/iMlokclw62TfDfREXFx8a1zUTxMGieXlAN/hkdXVAN/i7xXLn2+8djsdV9TWlDOrt3r7h0TEnCHbf+c4Jgp1d/RarbfOmBwHY7Q6FSruRXmFXzwCbL+zt08UkxqGTE7iAiM1fT289VzCgGxRJFc/4T3aCoN3u8C+P21PXXE+i5sEwbDYvWay2paVHZvOSEwSDRt9WH8zPzFSXl+cTM6bH720n4g4Af7ndMAwLmKwFk6lTqZRyuIcPvxOyob0v7kUikbsDUAiEnUqlgMlUS2XP79njH7Sb59ozAiRsNodOry4pFTBZ4xMTGo1GLBIr2ttpNNr/Bfgx1pUV68qKj7dT/Q1DWkk2o3F5kAAAAABJRU5ErkJggg==" nextheight="541" nextwidth="642" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>2. Soft Vote Phase</strong></p><p>The number of proposals are narrowed down, and the nodes verify the signed messages and validate the selection using a VRF proof. The account with the lowest VRF hash is chosen to propose the next block.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/70598a563d958ad3ae2751cc8b0d9f79.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAdCAIAAABE/PnQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFKElEQVR4nJ2Wb0wTZxzH+8pkL5ZtvhGdoFnUkC2LiVlQlhmyzSVgtrWQrAIx7AZZbWusbV1LiwxKj9UrdZS2Qr1Ur2AJ/RO7xlZv4M1O6sUqjUhqMjLaZRkQHJbeXvR26JQ8C73sVrGjZd/ci3uee66f5/fn+V55ICuGYUCOMjSdoWmGWc4+WmaY5QxNUxTF3j9bWWGY5dRSOkPT3AKKorhXcsUD+WSy2I/JVDYUY4fTM0mpQguJ5ZNTcXbGMeRWanQwYk4tpVnGCeVpibzVc/kKO/wXEI/H0fPnA4HAxD9Kp9NKTdfR5uOqNnjEF5AqtDYUq2toqRY0ktFYu94II+ajzceVmi6lRnfxkvuYTOUP4tWCxgZIwu7pOYDT6eQ9L7W69RpxEwCAuTyYy6PU6EwWOxmNkdEYPnqjXW9s1xuVGh0AwOsPohdcUoV2cNjXa0MZZhlzedYC3G4399MdHR0Gg2Fs7LrXHwQAaHWIwXTuy+Nf4aM3WACMmJWaLhgx9zucAIB+h1PT+Q0klpPRGObyUBSVBzA6Osrj8UpKSnbu2LFt6zYyEgEAGPvsXn9QqtA6htwwYv4hTMKI2dTXb0OxXhuKuTzdPVYyGtPqEJPF3q43Tk7FtToEc3l6behaQG4XMVkBsNLvcJ61ogOOIfZp/MG0yWLv7rFyRR4c9p1Dnb02B1vkDE1391jPWlE29OcA4+Pje/bsgSBIrVZzs6ml9AmZanZunlt9AXP1fGvlhhmaVrV+feduDABA/7m6uVu37yhVp19sSJ6lz5JbYUtfHwDg2vfE5tdKyGiMC05QKzyw/yA3nJ5J7t5VPmC/wM0Yzpi2bCn96+nTtYCJiYmysjIejycSiRKJxPz86q4BAJ7LV3Ijjf/0czhCPkqlHqVSs3Pzs3PzXn+QPWhc0CGcAAA8W1kpfNAAAE6XJ4SPEeEIe4XwMRgxw4h5xBeAEXO73mhDMe4pEY74gzgRjuQHpNPpPygqnU4zOWK9gVq1B07L/sBVIhxBzOdmEkmuKTjl3eh/RpBXV6+HiXAERswsoBit1kAmkzXU1wuFQplMJhFL+Hy+Wq1uamo6XFNTKxAkEgkAwJPHj1dX83gVFQc/FTYPDvtezEZ+QCKRkGXVkRULMxgMIpGIz+eLRKKHCwtZwBMAwO6XXob1hstBnDsQhQFFrmOyHbW0uLi0+HvuTFGANbVap3Q3x8murjN3791nh0WlqMi9w4hZ+Ll4c2m5TKnd+eZ+/hGI9buCcRSVIqlCu7m0fMQX8AfxEV9gwDH0XWiU98p2VRtckLEegM1Arw3dW3mIjMZCODE5FVe1wao22OsP/vrb7NsHPmD9eZ1cFQYcOvyZvLWTjMYYhhlwDFULGqUKbW19MxmNHZOp+Eeg9YMokKLUUnpv5SGvPziTSMYfTENiOSSWd/dY2W/AxUvuyvc/vog5y8rKNm3axBrlmr4oACCjsbqGFiIcmZt/2K43ik9qpAote80kkiF8TKMz7q98j3ViCII2HEGGprfu2tvvcIZwokVySt7aqdToPvxE2CSShXCi14a+8daBZPKX8azy2lHhGlQLGkM40QBJxCc19ZBY3tp59979iqoaIhyxodjh2qP/vwYsgIzGSsvfGRz2kdGY1x+8dfvO5FT8xo+REV/g1e3lrGewprthACcbilVU1dQ1tGAuz4BjyGSx19Y373v3o4I9ugEvmkkkK6pqWiSnXt+97wuxoqq6bmFhcZ3PwMYA7J9R9p6iKG6yGC/6G21r3mX0oMwSAAAAAElFTkSuQmCC" nextheight="529" nextwidth="586" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>3. Certify Vote Phase</strong></p><p>A committee of 1,000 verifiers is pseudorandomly selected to receive information about the new block. Their job is to verify the block and mark it as valid or invalid. If the quorum is reached, the block is added to the blockchain.</p><blockquote><p><strong>If Quorum Not Reached — Network enters recovery mode but doesn’t fork</strong></p><p>The network would never fork instead it will enter the recover mode. In recovery mode recovery messages are sent out. Nodes will send these messages to signal to the network that it should either continue processing the last known block proposal or to propose a new block.</p><p>When a quorum of votes is received for either one of these messages, the system will revert to normal operation.</p><p>In the case of malicious behavior, the protocol may select a new leader. In the case of network outage, the current block will continue to be processed or a new block might be proposed.</p></blockquote><p>Check out the video below to learn more about Pure Proof of Stake.</p><div data-type="youtube" videoid="u0ExeqpKJd0">
      <div class="youtube-player" data-id="u0ExeqpKJd0" style="background-image: url('https://i.ytimg.com/vi/u0ExeqpKJd0/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=u0ExeqpKJd0">
          <img src="https://paragraph.xyz/editor/youtube/play.png" class="play">
        </a>
      </div></div><p>Or check out the white paper on the protocol:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.algorand.com/Algorand%20Protocol.pdf">https://www.algorand.com/Algorand%20Protocol.pdf</a></p><div class="relative header-and-anchor"><h1 id="h-storage">Storage</h1></div><div class="relative header-and-anchor"><h2 id="h-internal-data-store-in-nodes-sqlite">Internal Data Store in Nodes — SQLite</h2></div><p>The ledger uses SQLite database as its internal store. This is where the algod process writes and reads data.</p><p>SQLite was chosen as it provides excellent storage performance, is embedded, lightweight, and fault-tolerant. Other databases might provide better indexing features — but these are not required for an algorand node.</p><p>A drawback behind using SQLite is the lack of control from a database standpoint. For instance, your flexibility would be limited if you wanted to optimize the database like add indexes, etc. It’s not a deal-breaker but something to ponder if you’re considering Algorand for government or financial projects where the organization has its database management strategies.</p><p>Relational databases are rare in the blockchain space. The norm is key-value databases (i.e., Bitcoin &amp; Ethereum uses LevelDB, Solana &amp; Polkadot uses RocksDB). These databases are lightweight and easy to scale out horizontally. The only other platform that uses relational databases is Corda R3.</p><div class="relative header-and-anchor"><h2 id="h-standalone-rest-api-data-store-postgressql">Standalone REST API Data Store — PostgresSQL</h2></div><p>Indexer is a separate binary outside the Algorand node that acts as a REST API interface. It retrieves the blockchain data from a PostgresSQL database and is connected using an Algod process running on an Archival Algorand node.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/feaafaa8c8dd51bbba587050876a236c.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAIAAAAzPjmrAAAACXBIWXMAAAsTAAALEwEAmpwYAAADrElEQVR4nLVUcUwTVxh/+6PJlvEXWybBYCQ1EhEIWaeoWBhFsSwdk3ZUptSedCLY2JihO4lbdBNaV1wZt8IGp1fXRi9pJJc07tz+mGcs2x8S/yAjUbY5vGlRTnldanKufegt3MsOMkGSJfvl8vK9dy/f7/u+3/c9oPzPAAPn+8nOD2zOuqq3K73U8R7682CYItxNdpetpt50ovcYdTrg3L+ztmHbey32bfUmq+Od/kjQ5qyzOursLluVxdgfCT5BT7A7SZISiQReRVFECIEvzwZaDhGGihJ98cqj/g9P9nUFTn+2rur10vK1hWUFHb72zp5jRWVr9MUrDRUlhetXG2vLKaanxmYqMOg3mzcWGPSnBnwIIUzA8zxFUQzDsCpSqRSQVSiKghBKwiSEUJZlhGaQinQmnc5k8F/sBSGUSqXwVjvRVo7jwD/w+/2yLAPMjNCMojzFdjqTkWV5BqG/Hj/G3CplGiGEo9Hi1fxqRiwWIwiibf++3U6H1+udLdGCykAIE4nJu4lJCJP3pyRJeoi3D6en51/T8lDjm0U8fjUavXDwwJFmRwvLsnMZ/AudfaE9R0/tPuwFIBtkrwDZefWtZNunwcMn+yFMPqdnfvxp+MQnPkNRTXZWLsOcWZSAbO+wWhocOwjD2jc2rzNWbHjTammwb9+1r7kNQojv/PLb7a/PcueGfmDOfXslfg0fCoIQiURa93p8vu5oNDor8jPOZ5Xo9njazWZrUXEOAKsAKHzpxQNbt7SbzR12uyRJarmffnf5GlhWqsq5/CPf4KPUn5L0IBaLBYNfVW6yrNaX0DS9QAa4ozvd7veNlTs3bFrzclbpq69V61e1mLY2Gys89VYIIdbz4vfxF5YbANABkEMe703CaUmSeJ7v/aLPbNpRXlaltumjhUt0Z2JifHT095s3pycnL1+6dGN09Pb4+M/Xr9+5dSsQCBAE4Xa7vwlH/kg8mBDv3fhVvJu4p5UoHA4Tzr0dRz5+HsF83J+awiHjliVJsrGxsampiWXZ+W2qiezr6t5osGTpcgYHBxYVeUadNGyIoqhNg6IoW6qrdTqdIAjqlblPy+AMHXLuaj3oOTQ0NLSgyHPgeT4ajXIcFw6HOY7DAyyK4tjYGCZ7FoIg0DTz7naH5S0bwzCLZoBBkmR+fn5ubm5eXp7L5ZIkacl6xuNXfV3dZaW1y15ZsTTByMgIRVFer5emaUEQlvSuKMrw8DDLsgF/bygUisViS5ToP2D+C4iNvwELV/1nQ/efuQAAAABJRU5ErkJggg==" nextheight="417" nextwidth="804" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Below is an example of a query where we return the last 1000 transactions that exceeded ten microAlgos:</p><pre data-type="codeBlock"><code>#<span class="hljs-operator">/</span>indexer<span class="hljs-operator">/</span>python<span class="hljs-operator">/</span>search_transactions_min_amount.pyresponse <span class="hljs-operator">=</span> myindexer.search_transactions(min_amount<span class="hljs-operator">=</span><span class="hljs-number">10</span>)# Pretty Printing JSON <span class="hljs-keyword">string</span>
print(json.dumps(response, indent<span class="hljs-operator">=</span><span class="hljs-number">2</span>, sort_keys<span class="hljs-operator">=</span>True))</code></pre><div class="relative header-and-anchor"><h1 id="h-p2p-communication">P2P Communication</h1></div><div class="relative header-and-anchor"><h2 id="h-relay-nodes">Relay Nodes</h2></div><p>Accounts do not exchange messages directly; instead, they propagate their messages to a relay node. The relay node is untrustworthy, so to work around that, we use an encoding. One thing to keep in mind is that the relay nodes are permissioned nodes. They are registered with the Algorand foundation’s SRV records. This nudges Algorand towards a more centralized approach.</p><div class="relative header-and-anchor"><h2 id="h-serialization-messagepack">Serialization — MessagePack</h2></div><p>All messages in Algorand are encoded using MessagePack, a binary serialization format that allows exchanges in languages like JSON.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://msgpack.org/?source=post_page-----e962f48f8c72--------------------------------">https://msgpack.org/?source=post_page-----e962f48f8c72--------------------------------</a></p><div class="relative header-and-anchor"><h2 id="h-communication-technology">Communication Technology</h2></div><p>The network operates in a mesh network using WebSockets over HTTP (TCP). Algorand probably chose TCP because it’s commonly supported and can handle tasks like prioritizing queued messages.</p><div class="relative header-and-anchor"><h1 id="h-transaction-pools">Transaction Pools</h1></div><p>The transaction pool, also called the mempool in other networks, is where the transactions are held in memory and added into a block proposal.</p><p>A transaction pool prepares valid blocks for proposals and caches validated transaction groups.</p><p>At all times, the transaction pool maintains a queue of transaction groups slated for proposal. It checks that the transactions are properly-signed, the fees meet the minimum, and the state changes are consistent with the prior transactions in the queue. It does all of this work within a deadline; if it doesn’t finish by the deadline, it gets a buffer period it puts together an empty or partial block.</p><div class="relative header-and-anchor"><h1 id="h-fees">Fees</h1></div><p>With every transaction, there’s a minimum transaction fee of 1,000 microAlgos or .001 Algos. On top of that, there is a fee per byte based on the estimated size of the transaction in bytes. If this fee is less than the minimum fee, it defaults to the minimum fee. To better understand the fees, you can use the SDK method suggested fee per byte (fee).</p><p></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2713ed57f908826a06bc646b47f8ffa2.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAOCAIAAADBvonlAAAACXBIWXMAAAsTAAALEwEAmpwYAAAChklEQVR4nJWU7UvbQBzHgw+vfLFhca8cVRxue+Erh8PR2eqL9k8RZC8GgqxiEyQqsj+n+GeozCGOPiXh7ppLjt5dCU1p0piM5NquuLrphy/hkjt+33vI96RKpXJ9/eP29vbq6vry8urnzU0VW3bb8T2v25uM9xwkzjkc0jRNC2O73XY9L7y/9/sDwjAMhvi+/zwDjLFhAISahmHoum4YAJtmo96o1xtaAgDw7u5XrVarVqu1Wo0Q0ut13afR7XYlx3FaQ1iC4ziMMfHKOWeMaZpGiE0pZYy6rhs9mSAIpHL54uDgSFFOj49jKcpJqaSWSqosx1KUE0U5VdXzUa8sq0dHx4+pWJSLRfnwUJFldX//W7l8Ie3ufpmbe7Wy8n52JjU9NS9JLxYWXi8tvU2nVxcX3yRfXgpNT400P1GzM6l0enV5+V0qtTg7k5IkaW/vq6Sq5+vrn7a3Cxsft2JtfM5kdnK5Qi5X2NrKb25mhQa9/1M2m89m85nMTiazs7b24ezsu0Qp0zTdsmzGWLzJjGNsIYQgRBBCFNNECInjSQYMGpNEQYJpmuLH4bwteZ7XaDQ4b0dRFIZhFEWcc4QQIcQwAIQIY4wQCoJA9IYJj50qQkjT9FarBQCglPq+HxtQSuv1uqgSRRFjDGNMCDETMMamaUIIK5UKxlgkRpQbd5poHOfA87wwDH3fH40Q0UMIARAvE2Mr2S4EADQMAwCAE9AQ04xdO53OuI14DgzGZxFFkeM4EEIAgK7rYr5JlXgpSbsJoSgaHxKEUGSq3+//vWN/DMYX6LquZdmj9BFCKKWcc0qpSJ9tx6EjCZTSfxxJbDAx3w/utV6v9+DjeMN13U6n89ht8RssyjQQzLOUzwAAAABJRU5ErkJggg==" nextheight="522" nextwidth="1218" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Check out the fee documentation below for details:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.algorand.org/docs/get-details/transactions/?from_query=fee&amp;source=post_page-----e962f48f8c72--------------------------------#fees">https://developer.algorand.org/docs/get-details/transactions/?from_query=fee&amp;source=post_page-----e962f48f8c72--------------------------------#fees</a></p><div class="relative header-and-anchor"><h2 id="h-minimum-balance-on-accounts">Minimum balance on Accounts</h2></div><p>In Algorand, there is a required minimum balance of 100,000 microAlgos (today that’s ~$0.092373). If your transaction gets the balance below this minimum, it will fail.</p><div class="relative header-and-anchor"><h2 id="h-feesink-and-rewardspool">FeeSink and RewardsPool</h2></div><p>FeeSink is where all fees from transactions are sent. The FeeSink can only be spent towards the RewardsPool account. The RewardsPool account holds the Algos that need to be distributed as rewards to Algorand accounts in the protocol. As you can see in the code below, there’s a logic that only allows the FeeSink to send to the RewardPool.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ce9bf0e48ec18ca8d2daf3bca8ec71e4.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAJCAIAAADcu7ldAAAACXBIWXMAAAsTAAALEwEAmpwYAAACpElEQVR4nGM4fvxEdG4Ls4EXA5ciA4MUA4cag6AmA5sKg5A5A7cxA4Mig4CWuX9yfFGzV1yBZ3SWe1RmSHplTGFTSFqpT3yBf1JRUnF9dk1nRlXn2h2H/oPAP2TEcP3GjYzOuSZxlWnNMzOrJkZk1kcVdQdntvik1jrFlvpmNAQXtNVOXNw7f23blGW98zfU9S2q61/cNnN5Rce0sp4FizYd+I8XMJw6fXrasrW9C1YdOXv2+t07V29dv3D1Moxx5dSFc6cunNt96NCqzdsOHD/66uXtZ09vvHp5Gxm9eXXnzSsIeefT+weo6BHDkaMHk2vbjcMyGeR1GbhkGPhVGKR0GIRVGEQ12Qwc8xrbc+paKtp7p8yfv/PAjh8/7n37eufb19tgdAfGhovcBSsAMb59vfPjx93PH28wHD1+PLlphmZEqWF0uaJHhqhdpICuO4OOh6BtPKuRL4d5CJ9NlEVYwbxV22av3FbVNbe8c3bLtOUt05bXT1pU3j67ftKisrZZ1b3zO2atKm2ZWNY5t3bi0tKWieWds4va563ecRRqgW5UmWVKnXV0WUZVZ2ppa0xRa1BGQ0b91PjSjpC0Mq/YXJvglJTKrm37Tmzdd3zXoVO7Dp/ddejU1n3Ht+07sXHXkW37Tuw7fuHomYvHzl45cfH60TMXj569dPj01dsPnjJcvXottXmGQWyFTWq9TUJNcEGbS2i2TWiOdVipQ3S5aXCWZViOsX+qeXCma0J5/aRFDRPnFTb2VU5YXNM7u6ixp37S0oKWGcUds2et3IY9kq9evRZXN0XcNyujftrU5dt///6NJ0n8/PX727fv3759//nr95ev3758/fbz1284wm7B/oOHZq/ZPXvVzv5Jc+at2vbh89dfv379gCEIQGaTCgCu9UhBMDWn7gAAAABJRU5ErkJggg==" nextheight="397" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Code from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/algorand/go-algorand/blob/0e9cc6b0c2ddc43c3cfa751d61c1321d8707c0da/data/transactions/payment.go#L45">https://github.com/algorand/go-algorand/blob/0e9cc6b0c2ddc43c3cfa751d61c1321d8707c0da/data/transactions/payment.go#L45</a></figcaption></figure><p>This approach is slightly centralized, the reward pool is just one address on the Algorand network. Below is the reward pool for mainnet:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/18576e16056a63bf264fcf41958a42a2.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAWCAIAAAAuOwkTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE4klEQVR4nK1VDUwTVxx/mpksC/sibjimRrcl8yNkWzYRBT+jbGywkmIFYwEpoLahrmXhxMqE4YywqbVQ6uAEdAiVTiqIChvDZVhGx6lt0VLY2sPZ3hZalOtBvOOj95ZyW8dmsiDZL7/87r2X9/6/+//f3XtA8yX67vtxoQsXAzAHTCFjj7jj+vWPFMVxQtlzyzeu56W/HslPTJfLD34eHpPCS5YXFpWs56XHCWXinMMHC49Hb5d8sHNfVk7B8mXL5jwxDwAQHh7+VFDQd+3tEELQYTBUVp3JLzgs3ScXpe+O48Vr63V2u/1oSVVJRZ1QrMgpUH56DC1Da/SX2wqPo1p961ltQ0HxqWrtZfSs7mpbRwl6vlp7Sae/kpiYKBZL0kSiNJFIKBTabDa/gdNFkF6K9FIMw/hYlmEYihohvRRFjUDITvomGYZmpvCQphmGHiaHB91ur5f0ekmu7fkLFDXiY1kfy46NjY+NjXNhgVJVIhKlZ0llK1aGbdy09cUFoRs3bY2M2rBDmJq8KyNzjwTJzYvlJUikclk2ckKl1jc2G7tvdhi6Oo1YpxEzdt/sNGI3TD1narTC5DSJVL7/QN7uvVmybEQilcfyEoBSVSoSpRd/cSzomeBVq9cCAEIXLn7zrXd2CFNieQl8QRKSm7c1JpYvSEpNyyw7Va5vbL5h6vkXe6w2nb6JL0jK2COWSOU7hKmy7ByJVM4XJAG3Z+ghTVPUyMT4BFclH8sGqvSQpodJkpvw4P4DgvjN6SLsDvxROl0ERY0MkyTHoaH7XASAYVh0dDSfn5CSkrpu3bqIiDUKhQJCyDAMhHBifBz6wcIZgZ0Ynwi0uQcgCKJep6s4jZ5UqU6qVApFXm1t3fRFvqmc4OODWwgoigoMcW/NfTPDJElR1FRx/AjkPnNSFOU3aGu/Vlqm0TXoy9HT+sZmpaq0rv5CdU1tW/u1q9+2aet1Ndrz+sbmHqsVu2V6LGrrdWhlNVBr0OD5IbkHPlm05JXsjxEA5goSd65avVatQQ8fKYqM2hC1YdPO5F2/OH7tMHQZu2/NkLfMtz+M3xY8PwTcdboc+IDZcsdstnD7PkySpJeyO/C7TpfbM+T2DDldxM92x2Oxx2rttfU7XQSAEFosFpvNhmFYa3vrxSuNPxq7LBYLhJCmRwNkWf8vzSnH6SOPKsPQND3KMIzfwO5wOF0uCGGRshjJz+3s6sQwDP5PABBCa29vX18/hBDHB6y9VvNts9/SiVdWI7qv82pqc3UXDp2rO/DVOURdJuGoKZeiVTJNubSqWs7pCWVmQI8WpSlP7lar9/b1m/wGfX39OD7AGdZf1K2ICMs/ekRd9tnLz4NnAVga4tcFT4JXQ8HqzSDsbb+ufANEbAErwkDke39rYGRpCHgpCLwwF5RXFPyZAUEQnMH3hh8EqYIt8dEqTamtz87blpGNFGaKkWyk8FLzN7Ms0U/dmN3h4PrmOxZB6nbkENLU1GQwGNyeobv37v0+OOh0EYNud2CHZ0KaHoWQ9Rvg+IDH44EQTvomIYRqVBMVs76hqUEk2Q/AgjnzXwNPLwHzFq3ZzJvxofTPDIzd3dztwxmUVpRlIdLLV1tNlt7pU7mDZDYGJrMZx3Gu39LSwjDM1EXGcBfTdM7SAK2sMpnNXCotLS2ziPIfBn8AYNhTGUOK19gAAAAASUVORK5CYII=" nextheight="965" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-processes-for-nodes">Processes for Nodes</h1></div><p>There are two processes in Algorand, there’s KMD and Algod.</p><p><strong>KMD (Key Manager Daemon) </strong>handles all interactions with spending keys, including signing transactions. Signing can also be standalone.</p><p><strong>Algod</strong> is responsible for processing the protocol and interacting with SQLite to write records and implement REST API for reads.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c7cc7cd16fd5ca2b75e30e55612d719c.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEB0lEQVR4nI2Tb0wbZRzHnxczvtBky+TN1O0FxKgJQxPNMudiHAs6NS77AyMqjD+KMgJuQMooGxZoAO24lj+F0RbhClsLRy+0x3F4HMW9cGFhyYysaQYo0UwZZfQoVziuvT490zalBQzx8+Ly5Ln8nu/z/d73AB9FFEUIoSAIEEKe5znOCyGUJAnCgBQGwmBkwXEc1teffSb7wJ4XQTz73k1IOJ4IEg+AZ5LB8ykApIH9oLZWWV4uu3mzU9epb2z8QalsQBC1Utkgk1U+ejQTPjciA4PhxU5WWI9j2ombbWoErahAMk7mv70nJQUcfA2AZADA2toax3GCIHg8qyy74tvY4NfXPZ7VFdbt5VYlSZqavONhlyRJEqMOJEkKiAG/zy/wIbs7Jf0+37p33drWlwQA2PbuzrRz6O6UPxh0/znFezmP6/6wDqwu2PIa+tOyMoNBzheAkhRTgmFEMSBGCYSjliRJ4IXDIDEmEIk4V2d+QY6sct4hesIx93jF5ZjEX336+G4NUoNrXxF5d/jsmMB/EoRBv88vSVJxat4WBw+np81WKzpkYxh6bHyMsTMj1OgINUxPTExN2n+e+Imi7Q7Hw/gRlmXZFda7xnnXOJdrcTMxUQxVA+sjYgKCIJAkadChRsMtXSfa2dFj0BkHMMxk6EJvqHs0WlO7fsBgGCYIURQ3p548WehFLc1Id4e298GD37bl8deiOybA8zzD0J9nyL9Iry4tUmWcriy4WDM0bLt9o0n9ZWHLlXJtpXy0q4caoTbCVY4k7nItfpKa83LCkeSkD0iCjm9zhJiAKPpxnCj+pv6arLX2mrZSpikpbNDrjZhe361QmhAN1tZOoL0jJBnvwOVarNf3f9uolyHovfu/bvsYEMItAmYzfilfeb1CWyVrq67sKMxVqtUGrLm5Pju/5UpZq+wq0dE5QpIbwkbEAYRw4Z+/c1XdKQWKE1dbmF/u7SzAFoHbtwbzsxSlRaqirxvKSpCLn33XpOogScJmtQ4TBEmSVquV3OpgaWlpZnZu9vc/Zmbn5ufnd/4WIFSDcBWWl5/+2IWWXa6tljddl6tqFEjZ5TrV9+runm5DFL1ebzKZlpeX2S243aEd9479EMARxel02u3jGGbGBgcslgEMM1ssAz0h0L4oqNHI2Bmn0+n43wB7HDRN4ziB47ZBzIrjBGGjKIoaZxiaosZGR8fDT4Yeix/ZHYZhQORqvb19Fgt25tO8/XvffOuNj945cjrp0PGDLx1rbWtvUihyTn54eG/C688+d/7oMUVxidFo3PS0C2azGcMwgERpaWn+Kr849f2z6edy0s/lnErL+PjUhbq6uhp51aWsrPMn0s6+l1pwIbOqtGxzZHc0Gk1mZua/ho1039a2B7EAAAAASUVORK5CYII=" nextheight="532" nextwidth="1085" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-algorands-smart-contract-language">Algorand’s Smart Contract Language</h1></div><p>Algorand uses TEAL (Transaction Execution Approval Language) and REACH.</p><p>Algorand smart contracts like Ethereum smart contracts have an Algorand address and can hold Algorand Assets (ASA’s) and Algos.</p><p>Refer to the docs to learn more about smart contracts:</p><div data-type="embedly" src="https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://developer.algorand.org&quot;,&quot;description&quot;:&quot;Algorand Developer Docs, SDKs, REST APIs, CLI tools, ecosystem projects, metrics dashboard and sample code, how-tos, and news from the Algorand developer community&quot;,&quot;title&quot;:&quot;Overview - Algorand Developer Portal&quot;,&quot;mean_alpha&quot;:168.158730159,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/a233b7ce496aa107ed369bd36745cdfa.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Algorand&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAIAAAAzPjmrAAAACXBIWXMAAAsTAAALEwEAmpwYAAADyUlEQVR4nG2U7U9bdRTHv9lLX/jGF5gNdTS7SztW2sptbUt76ePtpQ+3vYV2sMHaTDZbgttwCzKETQ06ZIu4yTDDhyWS6IYhxaXZXEorNDJ1i0/xIRhfqokx/g8z53d7KdUl39w0ffH9/M4533MAX5gpimCsJlGGGIdfhj8ObwydMTjDsIoksw9mL4weGFwN0jthdGMPjwtz+kIBuTwEHx5/EngE/wWo7gRg7t64BgjB4ieRoxucE5wDOht01po4G/TOZKGIwid4YQghH/bsxY7HGgHkrgHEBLl7GwGtHhgEctc9gxae1Gwm7W5nsihLNwMbazg7hkMpdLjBPc0A25vjj6EjCCkJUUFAYQAZzggDBGHoJAC520i7zJra0GzCzn1IHZv/8w9c/wgT48gehXwIDc3xRZHow1vvwBvVWpSoPd8aQpuv/vwn2tHU2gDY1UZF7GzFc6NHV9fsS8t44zLSg6g/X1LgDuHKwi8PHuyY/wD5U4j2ESDcRxXYJNjCsIRI6vNHp2GPk3vT/hqg2USM5v1odSOUhlMC79EAogxPF449P/n1N4W//xkqV8fv3s+Vqme+uJe/Uz1/74eR0kZ2+bPpje8nK18Nr6ymrhVm1r/FXkGrQwPoeDZtB/R2WAQ4AhpAitMwZq+EllcwOx9dvpkrVa///telH3/NFssnyxs4ca73RnHhp98wdt4y+/7xlfLA4gobQ1sNoM6ZZYkiaxLAexsBkkIz8MdoA4Qweg5nb1UwkIc1iHY/xV/NKOfEbp7GsBWkFp79YwVnr7s3AMg9Tl3qfxbpw5APIJND3yClKJCE3I/oQfgUeBLoiNaTStO21cTZSerSGQWYPOB9/wMEYzj3GuauPrpwLfRpsXe1cqBYwvQlDI3i5QsYm8IrF3H8JW0bmNd23y1rVbyfGARQ3cPdpESaYhpJI5nGyAimZiAfZNdCpgpoIdjNoGvRSV81vkaBOmP2kOruDMD7GgFhhSaht4Ez0e9MTlu3GIQIxc7ZRbKKyAzr31vsv1U+cmdN/+4iUkfI1xqoawujARSN0Q1PGCYXLVokRQBR0ZaOYYQIxl7NlD7vrlRct2/Hq+tnNzdf/3kTJ8Zr1mopW9U8BKBKYtVISXY2EsQgTBTZYdviEt68jNMv4tRpTExg7u1EdX38/ndIZJi1l77GTpLBtR3AGJJGqgMUun0qSerGmSlMTqF3AF0yRAk9PXScZy4O3v0SM3PMvfGe1wAPl8rQJMYpwScnkM6i3QUdh5anYNhHmPxw08c3Wq5+qJ0s9aQ7wDn+BW70bX7JsCXrAAAAAElFTkSuQmCC&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/a233b7ce496aa107ed369bd36745cdfa.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/a233b7ce496aa107ed369bd36745cdfa.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Overview - Algorand Developer Portal</h2><p>Algorand Developer Docs, SDKs, REST APIs, CLI tools, ecosystem projects, metrics dashboard and sample code, how-tos, and news from the Algorand developer community</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://developer.algorand.org</span></div><img src="https://storage.googleapis.com/papyrus_images/a233b7ce496aa107ed369bd36745cdfa.png"></div></a></div></div><div class="relative header-and-anchor"><h2 id="h-teal-and-pyteal">TEAL &amp; PyTEAL</h2></div><p>TEAL is an assembly-like language that’s processed in AVM (Algorand Virtual Machines). It’s a Turing-complete language that supports looping and subroutines has guardrails that limit the contract’s execution time using a <strong>dynamic opcode cost evaluation algorithm</strong>. You can either write TEAL or use pyTEAL to generate TEAL code.</p><p>In pyTEAL and TEAL programs, there are always two programs: the <strong>Approval Program </strong>and the other is the <strong>Clear Program</strong>. The approval program contains most of the business logic, and the clear program handles closing the account(s).</p><p>All communication with Algorand smart contracts is achieved through <strong>application transactions. </strong>Below are the six application transaction subtypes.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6c5609f3e22a3fbf3f597d01fb47af1b.png" alt="" blurdataurl="data:image/png;base64,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" nextheight="866" nextwidth="760" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Approval Program</strong></p><p>As you can see in the NFT smart contract example below, all the meat sits in the approval program.</p><pre data-type="codeBlock"><code>from pyteal import *

def approval_program():
    """
    This smart contract implements a Non Fungible Token
    Each NFT is an (ID, ref_data, hash) triple.
    NFT ID is the total count of NFT's in asc.
    ref-data is represented as "https://nft-name/&lt;total&gt;/nft-ref"
    hash is an hash of the external resources data.
    Commands:
        create    Creates a new NFT. Expects 2 additional arguments:
                    * nft-ref: a reference data (usually a URL or CID)
                    * nft-ref-hash: a hash of the underlying reference data
                    Only creator can create new NFTs.
        transfer  Transfers an NFT between two accounts. Expects one additional arg: NFT_ID.
                    Additionally, two Accounts(from, to) must also be passed to the smart contract.
    """

    <span class="hljs-attr">var_total</span> = Bytes(<span class="hljs-string">"total"</span>)
    <span class="hljs-attr">var_1</span> = Int(<span class="hljs-number">1</span>)

    <span class="hljs-comment"># Check to see that the application ID is not set, indicating this is a creation call.</span>
    <span class="hljs-comment"># Store the creator address to global state.</span>
    <span class="hljs-comment"># Set total nft count to 0</span>
    <span class="hljs-attr">on_deployment</span> = Seq([
        App.globalPut(Bytes(<span class="hljs-string">"creator"</span>), Txn.sender()),
        Assert(Txn.application_args.length() == Int(<span class="hljs-number">0</span>)),
        App.globalPut(var_total, Int(<span class="hljs-number">0</span>)),
        Return(var_1)
    ])

    <span class="hljs-comment"># Always verify that the RekeyTo property of any transaction is set to the ZeroAddress</span>
    <span class="hljs-comment"># unless the contract is specifically involved ina rekeying operation.</span>
    <span class="hljs-attr">no_rekey_addr</span> = Txn.rekey_to() == Global.zero_address()

    <span class="hljs-comment"># Checks whether the sender is creator.</span>
    <span class="hljs-attr">is_creator</span> = Txn.sender() == App.globalGet(Bytes(<span class="hljs-string">"creator"</span>))

    <span class="hljs-comment"># Get total amount of NFT's from global storage</span>
    <span class="hljs-attr">create_nft_id</span> = Itob(App.globalGet(var_total))

    <span class="hljs-comment"># create transaction parameters</span>
    <span class="hljs-attr">data_ref</span> = Txn.application_args[<span class="hljs-number">1</span>]
    <span class="hljs-attr">data_hash</span> = Txn.application_args[<span class="hljs-number">2</span>]

    <span class="hljs-comment"># var to store id_h</span>
    <span class="hljs-attr">id_h</span> = ScratchVar(TealType.bytes)

    <span class="hljs-comment"># Verifies if the creater is making this request</span>
    <span class="hljs-comment"># Verifies three arguments are passed to this transaction ("create", nft-name, nft-ref)</span>
    <span class="hljs-comment"># Increment Global NFT count by 1</span>
    <span class="hljs-comment"># Assign data_ref to NFT ID (= total)</span>
    <span class="hljs-comment"># Assign hash of nft-ref to ID_h</span>
    <span class="hljs-comment"># Add above two keys to global and creator's local storage</span>
    <span class="hljs-attr">create_nft</span> = Seq([
        Assert(And(
            Txn.application_args.length() == Int(<span class="hljs-number">3</span>),
            is_creator,
            no_rekey_addr
        )),

        App.globalPut(var_total, App.globalGet(var_total) + var_1),

        id_h.store(Concat(create_nft_id, Bytes(<span class="hljs-string">"_h"</span>))), <span class="hljs-comment"># store id_h in scratchVar</span>
        App.globalPut(create_nft_id, data_ref),
        App.globalPut(id_h.load() , data_hash),

        App.localPut(Int(<span class="hljs-number">0</span>), create_nft_id, var_1),  <span class="hljs-comment"># Int(0) represents the address of caller</span>
        Return(is_creator)
    ])

    <span class="hljs-attr">transfer_nft_id</span> = Txn.application_args[<span class="hljs-number">1</span>]  <span class="hljs-comment"># this is only in the transfer condition</span>

    <span class="hljs-comment"># Verify two arguments are passed</span>
    <span class="hljs-comment"># Verify NFT_ID is present in global storage</span>
    <span class="hljs-comment"># Add nft to account_2's local storage</span>
    <span class="hljs-comment"># Remove nft from account_1's local storage</span>
    <span class="hljs-attr">transfer_nft</span> = Seq([
        Assert(And(
            Txn.application_args.length() == Int(<span class="hljs-number">2</span>),
            no_rekey_addr,
            <span class="hljs-comment"># assert that a account_1 holds the NFT</span>
            App.localGet(var_1, transfer_nft_id) == var_1
        )),

        App.localDel(var_1, transfer_nft_id),
        App.localPut(Int(<span class="hljs-number">2</span>), transfer_nft_id, var_1),
        Return(var_1)
    ])

    <span class="hljs-comment"># Verfies that the application_id is 0, jumps to on_deployment.</span>
    <span class="hljs-comment"># Verifies that DeleteApplication is used and verifies that sender is creator.</span>
    <span class="hljs-comment"># Verifies that UpdateApplication is used and blocks that call (unsafe for production use).</span>
    <span class="hljs-comment"># Verifies that closeOut is used and jumps to on_closeout.</span>
    <span class="hljs-comment"># Verifies that the account has opted in and jumps to on_register.</span>
    <span class="hljs-comment"># Verifies that first argument is "vote" and jumps to on_vote.</span>
    <span class="hljs-attr">program</span> = Cond(
        <span class="hljs-section">[Txn.application_id() == Int(0), on_deployment]</span>,
        <span class="hljs-section">[Txn.on_completion() == OnComplete.UpdateApplication, Return(Int(0))]</span>, <span class="hljs-comment">#block update</span>
        <span class="hljs-section">[Txn.on_completion() == OnComplete.DeleteApplication, Return(is_creator)]</span>,
        <span class="hljs-section">[Txn.on_completion() == OnComplete.CloseOut, Return(var_1)]</span>,
        <span class="hljs-section">[Txn.on_completion() == OnComplete.OptIn, Return(var_1)]</span>,
        <span class="hljs-section">[Txn.application_args[0]</span> == Bytes("create"), create_nft],
        <span class="hljs-section">[Txn.application_args[0]</span> == Bytes("transfer"), transfer_nft]
    )

    return program

if <span class="hljs-attr">__name__</span> == <span class="hljs-string">"__main__"</span>:
    print(compileTeal(approval_program(), Mode.Application, <span class="hljs-attr">version</span> = <span class="hljs-number">4</span>))</code></pre><p><strong>Clear State</strong></p><pre data-type="codeBlock"><code>from pyteal import *

def <span class="hljs-built_in">clear_state_program</span>():
    return <span class="hljs-built_in">Return</span>(<span class="hljs-built_in">Int</span>(<span class="hljs-number">1</span>))

if __name__ == <span class="hljs-string">"__main__"</span>:
    <span class="hljs-built_in">print</span>(<span class="hljs-built_in">compileTeal</span>(<span class="hljs-built_in">clear_state_program</span>(), Mode.Application, version = <span class="hljs-number">4</span>))</code></pre><p>I pulled the smart contract above from Algo-Builder’s smart contract template:</p><div data-type="embedly" src="https://github.com/scale-it/algo-builder/tree/master/examples?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Framework to automate development of Algorand Assets and Smart Contracts. - algo-builder/examples at master · scale-it/algo-builder&quot;,&quot;title&quot;:&quot;algo-builder/examples at master · scale-it/algo-builder&quot;,&quot;author_name&quot;:&quot;scale-it&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/scale-it/algo-builder/tree/master/examples?source=post_page-----e962f48f8c72--------------------------------&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/9590c566e4b1a5d08ca4040891a201da.png&quot;,&quot;author_url&quot;:&quot;https://github.com/scale-it&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAACtElEQVR4nJVTS2sTURQe3GiVQn+AC6EiIrjQjaVVrAUfK0Vwpa2gIij+CNGFUt2piBubLkTagh1a24Y0ZJwkk0eTzDOZTkAyybRj00yTGjrtba5zkytp0qQPkjYfZ3Hu4Zzzndcl8BbQbjQxtgqipjXhwPv0lgk2ITRNEwCwnFnWdR1jbBiGJEUNY2VR1zmez+ZyAIDmuRAqbgnaS4AQGnj4qLfvxv3+gStXrx090fF1yPby1evevht37t4jtnHu/AWH01nxb7kDRVHGSdLloqanZ2bsDgCApmkURY2T5Ju3gydPdXaeOTtOkhDCRokyxsrnL7Yf5PTPKYfD+SsmK3UCAMCD/oGR0bEPHz9dv3nr8ZOnz56/GHz3XpSkw9cLIUyoqYSqpbTFbG51c7uUagcEcYTYh5HRMYyxaZoQwk1Yxp5DOMzaqwQQwnw+b5rrlYwAgCbTaIRSIwLLspR4XInHWZbjeEGUorKscLwYjrDBuZAoRTle8DD+UCjM8UI4wgqCQNOMx8uEIyzHC5ZlNeSsXZEoSTTNuCiPzx/0eJlAMETTDOMP0jRD04zby4hSVFWTydRCMrWQTi8nU6mYLGvawlI6XcTFgwli8rzPH5CkaEyeL3egKOEIq6rJSvmCKGVzOdwKarshDh+AEKpMw7Ks2sIPDCwTQAhDYXbG7qj84UrYrJNyu5mhoWHTNDHGgiByvGAbHjYMQ9f/+PyBicnJ/X8bofK4ZOX3t9HJKgEoQHMD/M2vCVLM7fX7gqHAHJtfMzPZ1YSq2WddwblIJpszN4CaWpyYsutLaVCA+lLa4aTiCbVgIVCANdkoQFQq8ZJi+06ug8I/C+4aURFZRWTh+tJKGJe2LLULLDbQG4+IaO+uSsflurR3E21ddeNOn5re3rP7uUPauohjl4jjPRdvn/4P++4Yf5WmMekAAAAASUVORK5CYII=&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/9590c566e4b1a5d08ca4040891a201da.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/9590c566e4b1a5d08ca4040891a201da.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/scale-it/algo-builder/tree/master/examples?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>algo-builder/examples at master · scale-it/algo-builder</h2><p>Framework to automate development of Algorand Assets and Smart Contracts. - algo-builder/examples at master · scale-it/algo-builder</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/9590c566e4b1a5d08ca4040891a201da.png"></div></a></div></div><div class="relative header-and-anchor"><h2 id="h-reach-rsh">Reach (.rsh)</h2></div><p>Reach is a DApp framework that works with Algorand and Ethereum, most commonly used with Algorand. Reach aims at handling the whole experience, frontend, and backend. The backend is dealt with a file like index.rsh and the frontend in an index.mjs.</p><p>Get your hands dirty with Reach by running through the tutorial below:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.algorand.org/docs/get-started/dapps/reach/?source=post_page-----e962f48f8c72--------------------------------">https://developer.algorand.org/docs/get-started/dapps/reach/?source=post_page-----e962f48f8c72--------------------------------</a></p><div class="relative header-and-anchor"><h1 id="h-where-does-it-sit-in-the-blockchain-trilemma">Where does it sit in the Blockchain Trilemma</h1></div><div class="relative header-and-anchor"><h2 id="h-decentralization">Decentralization</h2></div><p>Standing up an Algorand is quite simple. You can even get away running on your laptop. Making it easier for several people to start running their Algorand nodes. Surprisingly, there aren’t many nodes running today, as of today, 1/31/21, there are only 1,427 nodes running. Giving that number some context, today, 1/31/21, there are 2,052 nodes running with Ethereum.</p><p>The relay nodes have to be registered with Algorand. In a truly decentralized blockchain, everyone and their mom should be able to run any node. Even though all these Relay Node participants are from different companies and countries, there is a point of centralization because they are all approved by the same organization.</p><p>Algorand has no minimum to participate in proof of stake, which allows anyone to participate in proof of stake. Every Algo token in Pure Proof of Stake (PPoS) (the consensus algorithm) is considered a lottery ticket. There’s a chance that the consensus would choose you with just one Algo, but the chances of being chosen increase with more “lottery” or Algos you have.</p><div class="relative header-and-anchor"><h2 id="h-scalable">Scalable</h2></div><p>With Algorand’s no-fork design and its use of SQLite, I don’t see how it can scale. This approach of approving one block at a time, transactions could pile up if there isn’t a consensus on what’s proposed, stalling the network.</p><div class="relative header-and-anchor"><h2 id="h-security">Security</h2></div><p>Because Algorand is unforkable, it’s highly secure, and transaction finality is everything regarding government and financial records.</p><p>The way they separate the processors, algod and kmd, makes the reads and writes secure. Key management should always be handled separately from other blockchain duties.</p><p>Algorand’s approach of not using spending keys to participate in consensus keeps the network secure. Instead, participants use a participation key and a collection of ephemeral keys to sign off on consensus activities like block proposals, votes, etc. This approach prevents double signing and protects spending keys from ever being jeopardized in the case of a compromised node.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8e5de7b9241fff12eefc13b5b443dff9.png" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAIAAADCaIt+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEC0lEQVR4nK2WXUsqWxjHl+0mbyIqevkAQRcRfYUguoku+hDdVEhddxcGIVgaVNRFWGRlaTpmnJTaoxFK5M4UL8qKDBt1N8e0LN9mj8467Hk6Hs8+vrU5/4uBWcxav+flv9YahEsrkUikUqnCkVwuhzH+IQhjzPM8jJQRKjoK0yiKWltb02g0DoeDJMmDg4OtrS2z2byxsUGSpMViUavVRqNRq9WSJHl7e5ufWBnA8zzG+OHh4fLy0mq1ut3uk5MTn8/ncrm8Xq/NZvP5fDabjaKoq6ur09NTj8fDMEx+YmUAfMqybDQaTSQSyWSSYRiWZTHGqVQqnU6XL0tVAIzxy8tLOBy+u7sLhULBYBD6IZPJVCoVxpjjuFwuxxfo0wCGYYLBIE3TgUAgk8lgjLPZbEdHR29vL6RYatFqAe/v7+l0+vn5ORwOcxyHMd7f30cIEQThdDqLtvRzgLz4v+04NDSEBI2OjkJC/wOA53lYyO1219XVAaClpeXx8bGobX4ng6wAGB8fRwh9EYQQkslk1SRRVQYY41Ao1N7ejhASiUQ1NTUIoa6urmQyWTGJyoCsEOPc3ByELxIESWi12opJVADwQnSZTKanpwchBLEDCSHU19eXt8Dv7IN8dAaDAYpDEMTq6urZ2dmhoOPjY9gfZapUAZAT3Dk4OAiB19fXW63W8/PzfFk4jstms3CifBoAq19cXBAEAYCGhobJyUmJRDIzMzM1NaVQKFZWVpaXl6enp2Ox2OcOu3x9xsbGEEK1tbUIIbFY7HK5gHpzc5NOp19eXuPxeCAQKNXqcqcpxpim6dbW1nx7CYKYnZ3V6XQ7Ozvw1Gg0Op0OzsGinSgJgIjkcnneM0UF4O3t7VJ+LXfhpFKp7u7uQncCrLZAYrEYIdTf31/qfC0OgFj29vZ+Wf2/EolE8LTb7fmJhaRiAP4jg4GBgfL1Kdx0w8PDvwBgkX8AnKC8O51OJzhHJMRYMYnm5ma/3w/To9EouPZfgD8Zxnl+fvHtG7yOjIxUEz4IPpNKpRjjWCxmsVgoigJrfQA4jrvx+Txuz6Vgc5qm29rawP5fqhDsxM7OToyxw+GQSCQTExMej+cnACr19P3p8I/Dp+9Pr6+vGGOpVFp9+CDwAkmSarW6sbGxqamJJMmPDODOSrwnWJaFBuzu7iqVyrmqNT8/v7CwIJfLKYry+/0KhWJpaYmm6Q+AyWQ6ObF9/XpssVgMBoNerzeZTF6vt5prnRcKEIlEAoFAPB6PxWJvb28Mw1xfX0ciEZZlfwI8Hs/R0ZFer7fb7SRJWq1Ws9kM/w0sy4K7Sgl+Uu/v7xcXF5VKpdlsXl9fNxqNm5ubKpUqGo1WdSdXFBQ5l8txHJfJZHKCwuEwz/N/AcLLi939TKLqAAAAAElFTkSuQmCC" nextheight="398" nextwidth="425" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-notes-on-speed">Notes on Speed</h1></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/84236a28647f2a21386a4f9e43984223.jpg" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAUCAIAAABj86gYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHGUlEQVR4nD3TfUiaXxsH8Jti7A9ZzJhmNkszW7ZihZqZtl5kmt0aW64setkoezMcGUslKcsoa/1cMu+gNGkRJJTeucJRrc0WyS1KZQzXGLWCbaxag20RDILx8Ojz/D5/HQ4X13XO4XsANBodERERFRUVFxdHJBKxWCwajcZgMFevXsXj8UQiEYfDRYbExcUlJiYSCAQ8Hk8gEEgkEoVCCRfQ6fS0tLQrV67gcDhMCBaLjY+PJ5PJQGRkJAAA165di42NjYmJQaPRly9fRqFQ0dHR10LIZPKTJ0+USiWJRCIQCOH98AwGg1FTU6PT6Q4PDw8ODurr62NiYjAYTHR0NAaDwePx8fHxQBgKhQovLl26hEKh0Gg0CoWKiopKT0+vq6sLBAJ///7l8/nR0dG4kNjYWAqF0tjYaDAYpqamgsHgxcXF4uIiBoPB4XBYLBaHwxEIhISEBCAiIiLcWq1W9/X1YbHYiIiIyMhINBpdWFio1+t5PJ5YLIZhuLW1NSEhgUAgxMXFpaWlSSQSsVj84MEDIpEok8mCweCzZ8/weDyZTE4MSUhISEpK+t8TCYVCl8t1fn5eUFCAx+PT09OZTGZxcfG9e/fweHxGRsbAwIDFYmEymQQCITk5WSQSJSUlZWVlsVgsEonE4XCEQmFpaSmZTCYSiTdDYmNj/3sDAACIRGJJScn169cnJiacTqdQKMzNzeVwOPHx8XQ6nUQicblciUQyMTFRW1ubkZFRUlIyODjY3d2dkpJCJpNBEGQwGFQqlclkpqamUqlUOp1Oo9HS0tKys7MBEolEpVJjYmJwOFxZWZnJZKqsrPw3RUwmk8PhdHZ2ymSy3t5eLpebnp7e1dU1MzMzPz8/PT0NQZDJZKqoqPD7/TU1NdnZ2SwWi8fj8fn8vLw8oVAIdHR0FBQU0Gg0qVQ6Ozur1Wr/+T+JRMJmszMzM8fGxvr6+oaHh/Py8mprawOBwNbWltFodDqdX79+9fl8EAQFg0G5XH737l2xWFxRUVFWVlZXV9fR0QGAINjc3FxVVQWCoMvlampqkkgkZ2dnv3790ul0RqNRJpMplUqr1arVagUCgdls3t/f//btG4IgEARptdqWlpb29vbJyckXL14YjUa73R4IBOx2u0qlUigUAJVKZbPZMAwPDg7aQp4/f76/v+/z+dRqNYIgKysrQ0NDMAzr9fqmpiaLxbK3t3d0dIQgiFarhSBoaWnJarWurq4Gg8HNzU0YhrVarVgsTk1NTUxMBG7cuJGdnT05ObmwsLC4uKjT6cxm88zMjMFg6O/vr6urq6ysVKvVMpmsvb1dJBIVFhbOzc1tbW1NT09PTk46HA6r1Xp8fHxxcXFycjI8PHz79u2amhoul3vz5s2cnBwAjUa3tbXNzs6aTKaGhoakpKSioqLx8fGenh6DwXDnzp22trbW1lalUkmj0QgEQkpKCoPBkMvl9fX1ubm5mZmZarU6EAj8+fPnzZs3PB5PIBCw2ezk5GQGg8HlcgEcDtfV1QVBUGtra2dnp0gkAkGwp6dnfHzcarVKpVKRSHT//n2pVEqn05OTk1ksVlVV1ejoKJ1OZzAYNpvN4XCYzWaTyTQwMCAQCPLz8wsLC0UiUXFxMYfDAaRSKY/Ha2lpgWFYo9E8fvxYLperVCq9Xg9BkEKhqK6uBkGwvLwcBEGBQEClUhUKhdFoVIVYLJaHDx8qFIr29vbKyko2m52TkwOCYHV1dWNjIwiCgMPhEIvFDAZjYGCgp6dnaWlpd3fX7XYbDAYIgsrLy7VarUKhaGho0Ol0CoWitLQ0nKiKioqhoaGcnByRSMTn88Njent7h4aGrFbr2NjYyMiI3W4HPn36VFxc3N/fHwgEPB7P4eHh9+/fFxYW3G734uLirVu3IAiy2+1ms3lvby8QCGxsbGg0GhiG8/PzRSJRUVGRSqUymUwajUalUoWjodFolEqlXC6XyWRAMBhsbm72+Xx+v39lZeXz588nJyc+n0+n06lUqsHBwfX19ePjY6fTeX5+/vPnz9+/fz8MycrKolAoHA7HZrP5Qra3t4+Pj09PT798+XJwcPDx40e/3w+4XC6n07mzs/P06VOHw/Hhw4etrS2Px0On09va2tbW1iYmJubn5y0Wy87ODoIg29vbtbW1dDqdQqFkZWXx+Xyn07m9vb27u+v1eo+Ojk5PT3/8+BE+ytnZGbC8vOxyuebm5mw228uXLz0ej9frXV1d1ev1MAy73e6Ojo5Hjx6trq4iCLK2tub1eru7u2k0GovF6uzsbGlpMZvNHo9neXlZq9V6PJ6tkEAg8O7du/fv3wOeEARBNjY23G7369ev19bWEATZ2dnZ3NxEEMRkMpnNZq/Xu76+/vbtW7/fPzU1RSQSS0tLbTZbQ0PDyMjI/Pz86OhofX19+LcuLS2thLx69eo/hWlFxCd1f8sAAAAASUVORK5CYII=" nextheight="860" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Photo by <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af rc" href="https://unsplash.com/@paolocandelo?utm_source=medium&amp;utm_medium=referral">paolo candelo</a> on <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af rc" href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Algorand is currently at around ~1,000 TPS, faster than Bitcoin and Ethereum, but not as fast as other 3rd generation blockchain networks like Solana. Algorand has proposed in their performance report that with block pipelining, they can reach 46,000 TPS, but we’ll need to wait for that implementation to deploy onto mainnet.</p><p>In terms of finality, Algorand wins; they have a finality of 2.5 seconds because it’s finalized as soon as the transaction completes. We don’t have to wait for additional blocks to be added to know it’s truly final because of its no forking design.</p><p>The Algorand Foundation pulled these performance metrics from their 2021 performance report:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://drive.google.com/viewerng/viewer?url=https://www.algorand.com/120720-Algorand%25202021%2520Performance.pdf">https://drive.google.com/viewerng/viewer?url=https://www.algorand.com/120720-Algorand%25202021%2520Performance.pdf</a></p><div class="relative header-and-anchor"><h1 id="h-if-youre-obsessed-now-dive-in-with-these-resources">If you’re obsessed now, dive in with these resources.</h1></div><p><strong>Official Repo</strong></p><div data-type="embedly" src="https://github.com/algorand/go-algorand?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Algorand's official implementation in Go. . Contribute to algorand/go-algorand development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;GitHub - algorand/go-algorand: Algorand's official implementation in Go.&quot;,&quot;mean_alpha&quot;:189.731578947,&quot;author_name&quot;:&quot;algorand&quot;,&quot;thumbnail_width&quot;:475,&quot;url&quot;:&quot;https://github.com/algorand/go-algorand&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/f7a0c39f99cede4dc3da645691b308a6.png&quot;,&quot;author_url&quot;:&quot;https://github.com/algorand&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:475,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGklEQVR4nO3BAQ0AAADCoPdP7WYOoAAAALoBDCAAATV8oiUAAAAASUVORK5CYII=&quot;,&quot;img&quot;:{&quot;width&quot;:475,&quot;height&quot;:475,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/f7a0c39f99cede4dc3da645691b308a6.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/f7a0c39f99cede4dc3da645691b308a6.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/algorand/go-algorand?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - algorand/go-algorand: Algorand's official implementation in Go.</h2><p>Algorand's official implementation in Go. . Contribute to algorand/go-algorand development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/f7a0c39f99cede4dc3da645691b308a6.png"></div></a></div></div><p><strong>Algorand Metrics Dashboard</strong></p><div data-type="embedly" src="https://forum.algorand.org/?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://forum.algorand.org&quot;,&quot;description&quot;:&quot;The AlgoGlobal Community works towards the goal of building a secure, scalable, decentralized network to serve as trusted public infrastructure for the common good.&quot;,&quot;title&quot;:&quot;Algorand&quot;,&quot;url&quot;:&quot;https://forum.algorand.org/&quot;,&quot;thumbnail_width&quot;:512,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/508826ee68be4f6ed75287bee6ade9e7.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Algorand&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:512,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEaUlEQVR4nJ1WXSjzURw++/Bu7KPZB2YUuVizIhEt5EZptbkgq9UuVnIhF6y0mLILHxeSkAsuXJgUpbRFktrNChfKolg0tUVZhGnNsO282U+n886E99zt/3/OeZ7f73nOb3+Ef7mSySTG2Gg0CoXCotTKycmZnZ3FGL+9vX3Go1+dHo/HMcYbGxsIIQaDgRBisVgIIb1eT7j/nyCZ2h+NRquqquBoBoPBZDIRQvn5+Xd3dxk50G/lT05OEuH02t7eJpj/IUimpAUCgYKCAtIfWGw2GyFks9ky2vBTgkQigTHu7u4m8hmphRCCLjU2NoKORCKRTK1fECRSp+/t7f3584cIZ7FY8BNo+Hx+IBD4bMOPCJKpPS0tLXAuSNbpdGazmX6ytLSEMX56eopGo5FIJBqN/oggnvJtZWUFukG67/V619bW6IdCoVChUMjl8sLCwry8vP39/e8Jkint4XC4vLwczgIDzGYzxtjn83G53DTPAWA0GmE7+on8kZEREnyEkFQqvbi4gMzU1NQQn8m1EIvFPp8PzEPfent+fi4Wi2E/qBsdHcUYv7y8YIwtFgtJKpFvt9uJuO8JzP86qVarw+EwibzT6SQtAoBSqXx4eCDt/ZIA+N1ud1r5q6ur8BYAu7u7oJ1ci+XlZfpKZyYA8ng83tTURHur1WrhLQl7c3MzbQ9CyOPxkOq/JAD+xcVFOoUcDufg4AA2A8DhcJDOECfGxsbomZGBANTd3t6WlZXR8nt6euB0ANzf3yuVSpqArpKsDASgbnBwkK5dLpcHg0GgB4Ddbk8bq4CUSCShUOhLk6F3JycnAoGAjubU1BRwA+Ds7EwkEqXlh/x0uVxfxhT2GwwGOprV1dUwWGBYYoxNJhMtn81mAxJssFqtmQng0dbWFokdI6XI6XR+FU2EUFZW1tDQEBQElBqNBvrzz6iAR7FYrK6ujva2ra2N9vbt7a2hoYEGtLa2xuNxlUpFCHg8nt/vTx8VoG5ubo6OJo/HOzo6oqO5sLBAA7hcLmS3s7OT7pXD4QA1HwSg7vr6uri4mPa2v78fuAEQCoVKS0tpQG9vL5xA7gTY0NXVBRs/CMC6vr4+OpolJSU3Nzd0NK1WKw0oKiq6urqCE/x+P4/HI11SqVQwDRE5/fDwMDs7mx478/PzdDS9Xi+fz6cB9PdWMpnUaDSEgM1mQ2/fCaB8vV5PR7O+vv719ZWOZnt7Ow2ora2NxWKf62Oz2cAxMzPzTgDv1tfXiXVQ/s7ODh1Nl8uVlt3NzU0SjTQM2NDR0fFRQSQSqayspJNnMpnoaD4/P5N/LgAYDAZ6ZJIISCQScrEVCsXj4+M7wcTEBJ0wkUh0enpKR3N6epoGCASC4+NjmoBwaLVaQEKVbrcbXV5eymQyOnnDw8O0t8FgUC6X04CBgYHPX4lg9fj4OBBAl94HosViYTKZMplMLBbzeLyKigryGQtH2Gw2BoMBAD6fr1ar6WGZNsQ8Ho9IJMrNzZVKpRwOR6fT/QW/uxv80kIWVQAAAABJRU5ErkJggg==&quot;,&quot;img&quot;:{&quot;width&quot;:512,&quot;height&quot;:512,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/508826ee68be4f6ed75287bee6ade9e7.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/508826ee68be4f6ed75287bee6ade9e7.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://forum.algorand.org/?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Algorand</h2><p>The AlgoGlobal Community works towards the goal of building a secure, scalable, decentralized network to serve as trusted public infrastructure for the common good.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://forum.algorand.org</span></div><img src="https://storage.googleapis.com/papyrus_images/508826ee68be4f6ed75287bee6ade9e7.png"></div></a></div></div><p><strong>Official Algorand Forum</strong></p><div data-type="embedly" src="https://forum.algorand.org/?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://forum.algorand.org&quot;,&quot;description&quot;:&quot;The AlgoGlobal Community works towards the goal of building a secure, scalable, decentralized network to serve as trusted public infrastructure for the common good.&quot;,&quot;title&quot;:&quot;Algorand&quot;,&quot;url&quot;:&quot;https://forum.algorand.org/&quot;,&quot;thumbnail_width&quot;:512,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/f11df586be795b3bf441b8984fed85e9.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Algorand&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:512,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEaUlEQVR4nJ1WXSjzURw++/Bu7KPZB2YUuVizIhEt5EZptbkgq9UuVnIhF6y0mLILHxeSkAsuXJgUpbRFktrNChfKolg0tUVZhGnNsO282U+n886E99zt/3/OeZ7f73nOb3+Ef7mSySTG2Gg0CoXCotTKycmZnZ3FGL+9vX3Go1+dHo/HMcYbGxsIIQaDgRBisVgIIb1eT7j/nyCZ2h+NRquqquBoBoPBZDIRQvn5+Xd3dxk50G/lT05OEuH02t7eJpj/IUimpAUCgYKCAtIfWGw2GyFks9ky2vBTgkQigTHu7u4m8hmphRCCLjU2NoKORCKRTK1fECRSp+/t7f3584cIZ7FY8BNo+Hx+IBD4bMOPCJKpPS0tLXAuSNbpdGazmX6ytLSEMX56eopGo5FIJBqN/oggnvJtZWUFukG67/V619bW6IdCoVChUMjl8sLCwry8vP39/e8Jkint4XC4vLwczgIDzGYzxtjn83G53DTPAWA0GmE7+on8kZEREnyEkFQqvbi4gMzU1NQQn8m1EIvFPp8PzEPfent+fi4Wi2E/qBsdHcUYv7y8YIwtFgtJKpFvt9uJuO8JzP86qVarw+EwibzT6SQtAoBSqXx4eCDt/ZIA+N1ud1r5q6ur8BYAu7u7oJ1ci+XlZfpKZyYA8ng83tTURHur1WrhLQl7c3MzbQ9CyOPxkOq/JAD+xcVFOoUcDufg4AA2A8DhcJDOECfGxsbomZGBANTd3t6WlZXR8nt6euB0ANzf3yuVSpqArpKsDASgbnBwkK5dLpcHg0GgB4Ddbk8bq4CUSCShUOhLk6F3JycnAoGAjubU1BRwA+Ds7EwkEqXlh/x0uVxfxhT2GwwGOprV1dUwWGBYYoxNJhMtn81mAxJssFqtmQng0dbWFokdI6XI6XR+FU2EUFZW1tDQEBQElBqNBvrzz6iAR7FYrK6ujva2ra2N9vbt7a2hoYEGtLa2xuNxlUpFCHg8nt/vTx8VoG5ubo6OJo/HOzo6oqO5sLBAA7hcLmS3s7OT7pXD4QA1HwSg7vr6uri4mPa2v78fuAEQCoVKS0tpQG9vL5xA7gTY0NXVBRs/CMC6vr4+OpolJSU3Nzd0NK1WKw0oKiq6urqCE/x+P4/HI11SqVQwDRE5/fDwMDs7mx478/PzdDS9Xi+fz6cB9PdWMpnUaDSEgM1mQ2/fCaB8vV5PR7O+vv719ZWOZnt7Ow2ora2NxWKf62Oz2cAxMzPzTgDv1tfXiXVQ/s7ODh1Nl8uVlt3NzU0SjTQM2NDR0fFRQSQSqayspJNnMpnoaD4/P5N/LgAYDAZ6ZJIISCQScrEVCsXj4+M7wcTEBJ0wkUh0enpKR3N6epoGCASC4+NjmoBwaLVaQEKVbrcbXV5eymQyOnnDw8O0t8FgUC6X04CBgYHPX4lg9fj4OBBAl94HosViYTKZMplMLBbzeLyKigryGQtH2Gw2BoMBAD6fr1ar6WGZNsQ8Ho9IJMrNzZVKpRwOR6fT/QW/uxv80kIWVQAAAABJRU5ErkJggg==&quot;,&quot;img&quot;:{&quot;width&quot;:512,&quot;height&quot;:512,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/f11df586be795b3bf441b8984fed85e9.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/f11df586be795b3bf441b8984fed85e9.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://forum.algorand.org/?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Algorand</h2><p>The AlgoGlobal Community works towards the goal of building a secure, scalable, decentralized network to serve as trusted public infrastructure for the common good.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://forum.algorand.org</span></div><img src="https://storage.googleapis.com/papyrus_images/f11df586be795b3bf441b8984fed85e9.png"></div></a></div></div><p><strong>CoMakery Algorand Security Token</strong></p><div data-type="embedly" src="https://github.com/CoMakery/algorand-security-token?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Open Source security token compatible with CoMakery, authored in collaboration with the Algorand Foundation team - CoMakery/algorand-security-token&quot;,&quot;title&quot;:&quot;GitHub - CoMakery/algorand-security-token: Open Source security token compatible with CoMakery, authored in collaboration with the Algorand Foundation team&quot;,&quot;author_name&quot;:&quot;CoMakery&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/CoMakery/algorand-security-token&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/ca58a7ca89bfbdf9d980f86f449db453.png&quot;,&quot;author_url&quot;:&quot;https://github.com/CoMakery&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAADV0lEQVR4nJWTW0gUURjHz0OvRVGgdgFBisSg6CG6GF1IKjIwgl6yLKOiwECj1yioKM0y6AaFUhvdozJLwt1xZx2d2TkzszOn3Xbd8pKzdpXFyzp6ds7sxO7Yuq4a9edjOJzzne93vssAMyEylabbJ4mjySLE0ImhR0nMiCU3wZSuSar5z4olzEx+/zDiAEKIg2pG6ENDw7vXrxugIEBB8PsDqqq2MK21dffevmuUPB6W40RRrH/TQNOuNLwVLNQ3WHL60dbN57z2wIQMBgYGXr6qr6yqLiuvKDtRfrD00OGjx8pPnrp+4+ahI8dAQmvyN2Ytyl6Sm5c5f1FtXV0qwIreGx4ChWfA7D0AbFoFdjkuU1YeYyVyUNTTZ89p2uWkXZcuXb5vsymKUllVfbe27mrNtYuVVZ1dXdMVjRDDNE305SeYuauk4t7TC43rQNGD0ofjgBghq9fmz83IWr1ufc7i3IJtO+ZlLqi+UrOlYPvcjPnZOUsyshbeun3HNE2M8WSMBfB2/QBg54q8U+c3XCsAux8ctE3IIK2x4XBY07TkZUt/nyWdGMdPP5kBdqwEhWcXnFdFdRxACOF46GJYySOzbih5ZAV5eR5CQWplWbu9GQri545OKIgtDOukGR6KzTSjIJQKsMbGSwXEZ570MSWEKAg12akmO8XxUEGohWnleOiMR/F+9AccVLODcjlpxkG5oCC9b6LaWJ5z86n5paYbM2LpY6ogFL+TCAoFSfLIbSzvoFwK8koeWfLI3d1fetSQqoa+ff/Ro4Z+/uoL9X5NA1gMok8o3VgPoCCxbujz+b0+X3vwk8/nVxCCghQMfuLcfGdXt/mfSnYITPdDThqVcWGMrcW/kOIAjDHHQ56HqXc++gMtTGuot9c0zUgk0mR3QkG0nNtYXhTFaR4eL5o/2PHkReMYwCBYxyOaFgkG26WEZEUe0YY1LaKq3ZybU9Ueg+D+/jDn5oLBdtM0RrRhhBSfD+l4xCA4aRiPDkY0nRDF2257XD84FNH16HiJolF9KDJqmfUQQoyB4VFNi1oOmhZNrkdx3Hlyk6cokcgUWyazJTJ7IPEtEZlint5rbUrM/hSH+FHC9qWsi910cYe8v+hAAQBLwZxlYNYyMCMXZC8vtW36DUmCFrU1H/gpAAAAAElFTkSuQmCC&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/ca58a7ca89bfbdf9d980f86f449db453.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/ca58a7ca89bfbdf9d980f86f449db453.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/CoMakery/algorand-security-token?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - CoMakery/algorand-security-token: Open Source security token compatible with CoMakery, authored in collaboration with the Algorand Foundation team</h2><p>Open Source security token compatible with CoMakery, authored in collaboration with the Algorand Foundation team - CoMakery/algorand-security-token</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/ca58a7ca89bfbdf9d980f86f449db453.png"></div></a></div></div><p><strong>Algorand Smart Contract Architecture</strong></p><div data-type="youtube" videoid="9EpGKexKeMk">
      <div class="youtube-player" data-id="9EpGKexKeMk" style="background-image: url('https://i.ytimg.com/vi/9EpGKexKeMk/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=9EpGKexKeMk">
          <img src="https://paragraph.xyz/editor/youtube/play.png" class="play">
        </a>
      </div></div><p><strong>Tutorial on Atomic Transfers on Android</strong></p><div data-type="embedly" src="https://github.com/gconnect/AlgorandPayrollContract?source=post_page-----e962f48f8c72--------------------------------" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;This is an android app developed on the Algorand Blockchain - gconnect/AlgorandPayrollContract&quot;,&quot;title&quot;:&quot;GitHub - gconnect/AlgorandPayrollContract: This is an android app developed on the Algorand Blockchain&quot;,&quot;author_name&quot;:&quot;gconnect&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/gconnect/AlgorandPayrollContract&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/91caa5712b97d716320675ea1e18d0ca.png&quot;,&quot;author_url&quot;:&quot;https://github.com/gconnect&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGklEQVR4nK1U60tTYRgffehL9EGKkkaat2yoCzS6EEIbOrRPRdkF/wJDK6PNlXnBjCAQCwUlUDOR6KaIim5nZ1eXh60Nc2vucrxgzKaHDoPp696ds53YOUsnTVPox8vLw3t5fu/ze57n5TEs6ERg9oLtzvOY/wcIIWABYZAKhbYQzM7NeXDc5XI7nU6HY8bhcHy1WKZtNgDWNwKCECaMkpsR5Xh5eZlUVn2nsqL0sqSyqmKTAABw/cat2rp6+eMnDY1NjU3NVffuy2oeqTUa9n5454dTFMUwTEtrS2ZWOo9F8uGDGWnHIIRRAo5fKpPX1tX3vOlFUHR4ZBRB0daXbacLzrzt61MokM8Dg0+bn125VtbV3aNQIB2dr7u6e8bGxts7Op0uN0fT/qLh9BHOP+8kj5fJ4wEAYhFACK+W3eT2LomL+Clp2YK8ffsPFJy9kMxPTean5grzj5/IyBbkFYqKcoX55y8W8lPSkg4dTc86pdMbOIIpbb9vvjeJddL38FzT7ez1DQIOJEn6fL6/80YQxM4SRVgNFuesnz603K2uKC4pffX8QX+bjA6xEnFZslisFot12mafmvpmMpvVGq1Ciaq1ep3eaDRiwyNjCiWqVKEmsxnDTGqtXqlCB4dGdHrDJGaCMFowvpWVgVFEoZ3QfsGGxtV2p2czyTRNq1At686gVKFOlxtCGAisBQIBv98fCAQAiNqsAYJsLa4BQJIkV5Q7xxeTyOtdWlj84fUuzc8v+P1+Zu+gt+nTXTUavbWxI7u7soUgYfvE+6Xj1rkC3+VfEitTzGTG8dl4dxNGbBLDOIk9OK7TG3AcZxhm6adPrdF+dzi2eXi0Kx1O/N3HkRgBhFQQhlZXgds9ZzJbJzHzzIwHQoogSLvdhWFWgiABCHm9ywiiIQgSQmpl+deEEcPxeZoOQ0jFjyCMdrXN7ul/PwxACEIqPgcURYEQtRaORBVgGCYcCYUjIBzhwopQ4TibguFI7Dv7h0TiHJk4RyYSSItzayRCeYlQLhHK41e4A+IcWYlQXpxbw21J/hxLOEQCqUgg5ezftQD2Hto2DxQAAAAASUVORK5CYII=&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/91caa5712b97d716320675ea1e18d0ca.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/91caa5712b97d716320675ea1e18d0ca.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/gconnect/AlgorandPayrollContract?source=post_page-----e962f48f8c72--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - gconnect/AlgorandPayrollContract: This is an android app developed on the Algorand Blockchain</h2><p>This is an android app developed on the Algorand Blockchain - gconnect/AlgorandPayrollContract</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/91caa5712b97d716320675ea1e18d0ca.png"></div></a></div></div><p></p>]]></content:encoded>
            <author>satoshifanclub@newsletter.paragraph.com (Mabel Oza)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d8b484ba8f7d1413210598b59cb52b88.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Lightning Invoices]]></title>
            <link>https://paragraph.com/@satoshifanclub/lightning-invoices</link>
            <guid>u9F6hS3hWJtb7ZDcnqAD</guid>
            <pubDate>Wed, 17 May 2023 05:40:46 GMT</pubDate>
            <description><![CDATA[All payments start with an invoice (unless it’s keysend). The payee must put together an invoice. This tells the payer what network they want the payment in and the amount.A Lightning invoice is a payment request that includes a payment hash and a preimage, which the payer must provide to settle the invoice. Lightning invoices are generated by the payee and are used to receive payments through the Lightning Network.We’re going to dive into: Anatomy of an InvoiceHuman Readable PartData PartWhy...]]></description>
            <content:encoded><![CDATA[<p>All payments start with an invoice (unless it’s <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="https://docs.lightning.engineering/lightning-network-tools/lnd/send-messages-with-keysend">keysend</a>). The payee must put together an invoice. This tells the payer what network they want the payment in and the amount.</p><blockquote><p>A Lightning invoice is a payment request that includes a payment hash and a preimage, which the payer must provide to settle the invoice.</p><p>Lightning invoices are generated by the payee and are used to receive payments through the Lightning Network.</p></blockquote><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d42094c4700b7c27cbaa0fc765bda0ba.webp" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADrklEQVR4nIWUX2jbRhzHj5AFSuhDXvq0vbhdk8d1e8gKI00Yg/6DZrRjbCRLyfI0lodmZNB/NC10zUMKW9jCxspg7C0vw3sYmKTGBBsb2d4iIQlz8plepZOHpEaCk2JkG2nUl8iO47SfB/05/e4+6O57B8JXwnFcsVhMJpOKomxubuZyOY7jZFkWRZHjuEKh8OruYRiCw02e5xmGYds2pdQwDEqpbdvswXGcMAwb9Qal1HVd2gF7bTabrxeYprmxscHzfCqVymQyiUQil8v5vh+GIaWUXRFCEMJSqYQQIoRUKpVarRYVvEaws7OTy+VkWeY4DkKIMS4Wi416o1MgCALP8xBCjuMQQjzPI4RqtdqRglqt9vuTX/8pcGEYWpZVLBZLpVKz2WzUG8E+nYJkMpnP57PZLFuVUqmk67rv+5TSsiwvLdx4/gwfECzNz18Cb8yCYRU/N00znU4LgpDJZFKplCzLhBBFUYIgiAQYYwihKIqFQkGSJIQQxi9HpJQ+/Obru9fPT1+80BZYlgUA+PQMGD8FTNP0PK9arRJCNE1TVdV1XdJC0zTTNB3HsSyLtdi27e7jOI6iKISQp3/+Jm/8+NPyvbag2WxevXLpWgzMfnQuDEO58JRP/xVNouu6oii6rnt4tVioIpR/U55HP/t2aeG7u6uPVw5M0eWz5+bAiQ8BuD71SeKPZb++G3WjlEII8/m80kKSJFmWK5WKrutdoXzx37MHdxbefOfMrUcPrpw/u7W11RbMn4yJYOJvcOH7O19Q54Xv+0IHlmVVq1XDMHRd1zSNEGIYBkKIfc3n89H/Xf348um337o2NTV8Onb79s224NG77/8CRu6BkyzvQRD4++i6zlKPMZYkqVwu4xa2bbOCzv2VTqdHhmOfz86ODMds224LPnjvFGhxOMiU0kqlwo4HWZZ5ni+XyxDCw5XsaDnWDwYGBo/19e/u7rYFN776cnx8fGhoiOW9S0BaEdJbsGhVq9WeAgghAGBiYgKAvZH3bisrKzMzM1Frl8CyLIyxqqpscgghGOOeAl3XAQDxePz4wPEDgrW1tbm5uaMEiqJACCVJEgSBTZeiKD0FCCEAQCKRAKDvgGB9fX31h9WxsbGeAtM02dYjhKiqihDSNK2nQNM0APoQQoP9g22BYRhrN+8L2/zPD5cT8XhnB8dxtre3dV03TdOyLBawSNw1eqPemJycnJ6eDsNwdHR0cXFxTxAEged5bEuzUzfCtu1sNtt57kd0VR7F/yTfu9nkbBbWAAAAAElFTkSuQmCC" nextheight="802" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>We’re going to dive into:</p><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="#99ff"><strong>Anatomy of an Invoice</strong></a></p><ul><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="#6a05">Human Readable Part</a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="#435a">Data Part</a></p></li></ul><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="#a14b"><strong>Why Do Lightning Payments Need Invoices?</strong></a></p><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="#6f92"><strong>Alternatives to Payments Without Invoices — Keysend</strong></a></p><div class="relative header-and-anchor"><h1 id="h-anatomy-of-an-invoice">Anatomy of an Invoice</h1></div><p>The invoice is formatted in <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki">bech32 encoding</a>, already used for Bitcoin Segregated Witness. It’s broken up into 2 main parts: human-readable and data portions.</p><p>Below is an example of an invoice:</p><p><strong><em>lnbc15u</em></strong>1p3xnhl2<strong>p</strong>p5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3s<strong>d</strong>qsvfhkcap3xyhx7un8<strong>c</strong>qzpg<strong>x</strong>qzjc<strong>s</strong>p5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq<strong>9</strong>qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs</p><div class="relative header-and-anchor"><h2 id="h-human-readable-part"><strong>Human Readable Part</strong></h2></div><p>The human-readable part has the network name and amount. In the example above <strong><em>lnbc15u </em></strong>is the human-readable part.</p><p><strong><em>Network</em></strong></p><p>All Lightning invoices start with the letters <code>ln</code> for Lightning Network. Then they are followed by a 2-letter code defined by <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af of" href="https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki">BIP173</a> for the network. Below is a table with network prefixes. For example, an invoice that starts with<code>lnbc</code><strong> </strong>would be in the lightning mainnet because <code>bc</code> is after <code>ln</code>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c7a52213fb20b1c951025ef4b8ef8131.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAJCAIAAADcu7ldAAAACXBIWXMAAAPoAAAD6AG1e1JrAAABC0lEQVR4nI3PwYpGUBQH8OsRPIJHIDsP4QXUl7LSLD2ItTewYiHxAiMpyUVxXfnKYhY37iw1X5nSLIbrK7/O6vxPp/7AcZzH0cdO13XTNB83mKZpGIZlWWxk2zbQNA0cCYIgiqKiKJIkgRt4npdlWVEUjuNOkaqqoG3b5igMQ8/zgiDwfb+5J4qiPM8vIzAMw/MIY9zuqqp63tN1HUKI3WOMAaV0OyKEFEWRZVlZlts9EEL2z7ZtlNKLBuM41nWNELrfoGka9s9fA4zxcIQxdl03juOiKE7RO2maQgjZfd/3YJ7n18/r/0zT9LmDEJ6iy1nXNUmSy+N5ngEh5JvxtVuWhY0uUUovjwkhvxyWhIRRVjIpAAAAAElFTkSuQmCC" nextheight="346" nextwidth="1224" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong><em>Amount</em></strong></p><p>The amounts reference bitcoin, not satoshi. To save space for round invoices, an amount can be followed by a multiplier. For example, a single satoshi Lightning invoice would appear as <code>10n</code>, a hundred satoshi as <code>1u</code>, and a milli-satoshi as <code>10p</code>. In the example above, the amount is 15u (15* 100 satoshis). Below is a table of the amount units.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f423d88aff947120a363a232d8e4648f.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAGCAIAAAAt7QuIAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAA9klEQVR4nHXPocuEMBzG8UXBJENOo0kwvFctisVi8n+UYVsaDJF3ySLDYPkhAxmrBrFfeeFeHBd2n7R995ShpmnwLY7jPM+jKMIuWZZVVVUURZIkzsHz51lVVZqmtrRti8qy9G8IoSAIEEK+SxiGGOPH44Ex9r/zPM+e67pGSinzprWWUgohpmkyLgDAOaeUAoBzsK4rIWRZFlu2bUPGmOM2z/MwDEKIw0VKyRijlC7L4hwcx8E5/7xqrREAqJsQghDCGLPFAgBKad/3Xdf9f8K54Zx/PgEAuq7rddv3nXOulLLF0lr/vg3DMI6j1vrbxhhjy3mefwZkWhEdvXkwAAAAAElFTkSuQmCC" nextheight="274" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-data-part"><strong>Data Part</strong></h2></div><p>The data part is broken up into a timestamp, payment hash, description, min block height expiry (min final CLTV Expiry), expiry, payment secret (preimage),</p><p>An easy to know the different parts is by looking for the tags. P is the tag for payment hash, D is the tag</p><p>In the example above, the data part is:</p><p><code>pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dc8cf913a65798e41a99df7ba647478a.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAZCAIAAADfbbvGAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAD90lEQVR4nK2Wr8usTBTHZdMWm7CwsLCwaWHBMCCYFgyCYDAZHjAIhm2CYcBgsBmECQbDNINhYMPAVMFgMBi2GTbsv/DevGFf1sP67rPce18u3E+QmfE4Z358zzlKdV1rmpamKcY4yzKE0OFwyLKMTlQTdV3P7bIsq6qCLmPMsizTNNkL3/fjOJ67jDHJcZzNZqOqajixmViv15vNZrVaHQ4Hc+J4POoTMKOu619fX2EYappmmiZ8G4ahYRgIIcdx5hHp/p2+7xlj9cT5fBZCwMJhvZRSIUTbtpxzSuk4jvf/Q3p85zzBGGuaBma53++PX9N1XfOi7/thGOBDzjms49MB5xx2AHZlWTZNA0/wXde1EIJz3nXd4/GIoihN0yzLkomqqrIsS9M0jmOMcV3Xkm3bhmEcj0dKadu2nuf5vh9F0el08l9gjMMwPJ1O0UTTNO2LIAgIIeC7aRqMsaZpvu9nWQYGkuu6+/3esqzz+TwMA6W0rms4dEopY6yqqq7rhl9QFAWllBBCKe26jnNe13XbtrOBNI5jEASc877vx3EkE0VR5HmOMS7LMs/zNE2TJCGElGVJCAFBg32apl3XjS8YY+N3pDAM9/u953lBEDxVJUmapoEoEUIgzePxCPrTdV3TNIQQGJimaRjGrMgwDE3ThHn+k+ntdrtcLuM43iZgjbBYiDUybQiglIJBOXG73YZhuL1xvV7fu7fb7VNFj8fjxz8/3rv3n8n099p959NBGIYQX7MiGWOgawg9eCuEgMv8Ywd/SjGdW13XRVGA/OAYy7KEEQnWVVXV9XqFwMnzHO4nCII0Tdu2nZOHEKJpmqqqOOewjyiKCCGMMUIIRJnv+7Ztw/1RSp8qwhhHUZQkSZZlGOMkSSCgMMZxHGe/5cMmSRKI4Xnk6eAv4vv+x8hfdoAQkmV5vV7POfwvOzAMQ1VViEGEkGEYz2SHEIIMFYbher2WZXmz2ex2O0mSZFlerVaKomy3W3i13W53u91xAqoNVJ7ZAaROVVURQs8dXC6XrusgsVyv12EYIFX1fQ85ruu6tm3hOb+9vhBCvHcppXDtIMU8z39SD6DqziHGpicIlHMO5Wi2h2xYFEVVVYQQIUSe55BLoJJ/OmjbFjI7TH1+xS00IKShATae51mW5bpuEASmafq+b1kWZEO4508HUCyhfkGI8VeegG1BlRZCQIF6T38QcRDMsKdnwSGE6LoexzF87DiObduO43ie57qubdtfE7quQxdyQ57n8APg+z40gDiOXdd9H5F0XV8sFofDwZ2QJGm5XCqKslqtZFleLpeLxUKWZWlCURRZlheLxXK5VFXVdV1FUeCIgP1+jxCau47j/As1ZYdPwR0kKwAAAABJRU5ErkJggg==" nextheight="1093" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong><em>Timestamp</em></strong></p><p>In the example above, the timestamp is <code>p3xnhl2</code>, this is equivalent to the timestamp 1651105770, which is equivalent to Monday, May 2, 2022, at 8:29:30 AM UTC.</p><p><strong><em>Payment Hash</em></strong></p><p>In the example above, the payment hash (tagged with p) is <code>pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3s</code>. The payment hash is a 32-byte hash that uniquely identifies a Lightning Network payment. This hash is used to reference the payment throughout the payment’s lifecycle, from invoice creation to the payment's fulfillment.</p><p><strong><em>Description</em></strong></p><p>In the example above, the description (tagged with d) is <code>dqsvfhkcap3xyhx7un8</code>. The description can be any text note on the invoice. The description in the example is decoded to bolt11.org.</p><p><strong><em>Min Final CLTV Expiry</em></strong></p><p>In the example above, the minimum final CLTV (CheckLockTimeVerify) expiry (tagged with c) is <code>cqzpg</code>. The minimum final CLTV is the minimum block height at which the payment can be considered final. In this example, there is a requirement of a block height of 40 to be considered final.</p><p><strong><em>Expiry</em></strong></p><p>In the example above, the expiry (tagged with x) is <code>xqzjc</code>. The expiry is the number of seconds after which the invoice will expire if the payment has not been made. In this example, the invoice will expire in 600 seconds (10 minutes) if a payment hasn’t been made.</p><p><strong><em>Payment Secret</em></strong></p><p>In the example above, the payment secret (tagged with s) is <code>sp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq</code>. The payment secret is a random 32-byte string that the payer generates, encrypted in the invoice using the shared secret. It is also known as the preimage or the payment hash preimage.</p><p>The recipient must decode the invoice to obtain the payment secret, which the payer later uses to prove the payment was successful and claim the funds in the payment channel.</p><p>The payment secret is crucial for the network’s security and privacy features because it prevents unwanted parties from intercepting or tampering with the payment.</p><p><strong><em>Feature Bits</em></strong></p><p>In the example above, the feature bits (tagged with 9) is <code>9qyyssq</code>. Feature bits are optional or required features that can be included in the invoice to indicate to the payer which capabilities the payee’s Lightning node supports. In this example, the featured bits are:</p><pre data-type="codeBlock" text="{
&quot;var_onion_optin&quot;: &quot;supported&quot;, 
&quot;payment_secret&quot;: &quot;required&quot;, 
&quot;basic_mpp&quot;: &quot;supported&quot;
} "><code><span class="hljs-punctuation">{</span>
<span class="hljs-attr">"var_onion_optin"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"supported"</span><span class="hljs-punctuation">,</span> 
<span class="hljs-attr">"payment_secret"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"required"</span><span class="hljs-punctuation">,</span> 
<span class="hljs-attr">"basic_mpp"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"supported"</span>
<span class="hljs-punctuation">}</span> </code></pre><ul><li><p>“var_onion_optin”: indicates that the payee’s node supports using variable-length onion packets for routing the payment.</p></li><li><p>“payment_secret”: indicates that the payee requires the payer to include a payment secret in the payment hash.</p></li><li><p>“basic_mpp”: indicates that the payee’s node supports the use of basic multi-path payments, which allows a payment to be split across multiple routes.</p></li></ul><p><strong><em>Signature</em></strong></p><p>In the example above, the signature is <code>y4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq</code>. A signature is a cryptographic signature created by the invoice issuer’s private key. It’s used to ensure the authenticity and integrity of the invoice. When the invoice recipient receives it, they can use the issuer’s public key to verify the signature and ensure that the invoice has not been tampered with.</p><p><strong><em>Checksum</em></strong></p><p>In the example above, the checksum is <code>4gj5hs</code>. A checksum is a value calculated from a specific algorithm that is added to a Lightning invoice to ensure the integrity of the data and help detect errors.</p><div class="relative header-and-anchor"><h1 id="h-why-do-lightning-payments-need-invoices">Why Do Lightning Payments Need Invoices?</h1></div><p>We need invoices in the Lightning Network to route payments from the payer to the payee. Invoices contain important information such as the payment amount, payment hash, and other optional fields like the routing hints that enable intermediaries to discover the path to the payee. Routing nodes use invoices to determine the next hop in the payment path and forward the payment to the next node until it reaches the payee.</p><p>In addition, invoices also provide a way for the payee to request a specific payment amount and add additional metadata, such as an order number or customer ID, that can be useful for accounting or tracking purposes.</p><p>Without invoices, payers would have to manually construct payments and specify the routing path, which can be error-prone and time-consuming. Overall, invoices are critical in enabling efficient and reliable payment routing in the Lightning Network.</p><div class="relative header-and-anchor"><h1 id="h-alternatives-to-payments-without-invoices-keysend">Alternatives to Payments Without Invoices — Keysend</h1></div><p>Keysend is a feature introduced in the Lightning Network that allows for small and spontaneous payments without needing a Lightning invoice. With keysend, a payer can simply send a payment directly to the payee’s Lightning node by including the payment information, such as the payment amount and memo, in the onion routing packet.</p><p>To make a payment using keysend, the payer’s Lightning node generates a payment hash and constructs an onion routing packet with the payment information in the payload. The onion packet is then sent to the payee’s Lightning node, which decrypts the packet and retrieves the payment information. The payee’s Lightning node then constructs a Lightning invoice using the payment hash, which the payer’s node can use to claim the payment once they have the preimage corresponding to the payment hash.</p><p>Keysend allows for more spontaneous and efficient payments. It eliminates the need for the payee to generate a Lightning invoice and for the payer to scan the QR code or manually enter the payment information. However, it does raise some privacy concerns, as the payment information is included in the routing packet in plaintext and can be visible to all the nodes involved in routing the payment.</p><div class="relative header-and-anchor"><h1 id="h-resources">Resources</h1></div><p><strong>Interactive Invoice BOLT 11</strong></p><div data-type="embedly" src="https://www.bolt11.org/?source=post_page-----bd7210f25012--------------------------------" data="{&quot;provider_url&quot;:&quot;https://www.bolt11.org&quot;,&quot;description&quot;:&quot;Learn about Bitcoin Lightning Network invoices. Get in-depth decoding on the inner workings of payment requests in LN.&quot;,&quot;title&quot;:&quot;The Lightning Invoice&quot;,&quot;mean_alpha&quot;:82.9719626168,&quot;thumbnail_width&quot;:2056,&quot;url&quot;:&quot;https://www.bolt11.org/?source=post_page-----bd7210f25012--------------------------------&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/49a296ba7aa4d9e35ba12fc4d63e5b4c.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Bolt11&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:856,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAANCAIAAABHKvtLAAAACXBIWXMAABYlAAAWJQFJUiTwAAAEb0lEQVR4nGMQElZGQ4zM4izMEnz88nz88tzcsjy88pzcsqxskmwcUjy88hxgko8fJMjGIQVWJsfDK8/DK8/LK49pGgMyR0BQUVRcLSmtPDA0VUnFWE3DytzaW9fASd/IydktwtTMw8jYxcEpWEnFWE7BwMLa18TMXUHJWEXdwsbOT1PHVknFVFRMBZ8FEDsWr9q97+jVV5//T5+zbvGKneeuvXjx/v+n3/+Pnb1/7c67Z2//Hzh+/erd9yvXH/jw8/++o1f3Hrl67c67i7feHjl1V0XVnI9fHsMCURVRMSgSElaWkdPV1rbz9IozMfVydY+JT6oor5pgZuZtZuHj6h5rax/i7hXX0jHfwNDN0TnKwsLPzjHU3jHM0TXCytZXQkpTWEwVjqAWQEKZm1uWl1OWnVeOmUNGXMpcSMxARFBNXFhTmFdZRFBdStxAlF9dStxIkEtJXFhThE9NWlxPStxAUkxHhFdZQkhbmFuFgYGTiUGAiVGIiVGQgYGfjU0cZIGomIqeuZuRpbeus7e2q4+XuWO8lXOMlVOcnUdy7rTonNlRWTPjcmfH5MxKLJgbmzs7Pn9ObM7s+Py5UbnzI7JnR+TNjSiYm1C2KBGMYovmx5csiC+Zl1K5zDumSUBQgUFEXC00tSE2d0JwYWdYRV9lXkd7ZkNbVktbYcPUTadbV53rXH2hfsmJ2sUnGpaealh6qnP1+d4NV5oXHKmbsrl+ypbWCdsbWzd39O6s79rVMeVwRdvO+q7d9V27uqYeS8mbzs8vzyAuqVk9+WTDvLvN8+40zbnbuvh+5aybHUuede04X75tXurSSblrp+eunp6/dmbG8ilFa2cnL+7PWjurbHZDQ0tsY0dyT2ZKs1dIpXtgll9apE14mEVIqEVwmGVImEWIi567gKAig5iYaqB1WKxTbJRDdLBlaJRDdJhNRKh1aLxLfJh1VIhlRIhlWIhFaIxDTKxTfJhNNIQMtYnKCMyNc0mM80gOtQ7PK5+U2rw4qnRKeOFk/8AaF6fCqMg2e/tUkAWiYio+LpmhXqXBXkWBHgWR/hXBHoUxgZWxwTW+zrn+rrmh3kWB7nn+rrnBHoX+rrkxgZXBHoWR/hXJ0Y3+biDxUK+iqMiWhMzJoTHtUYm94eHtgf4N/r4NNlapQsJKDKLiam7uhdY2uW5upd4+lV5elW5upcEhDZ5eFUEhja7upa7uZY6ORc7OJZ6e5c7OJV7eVY6ORV5ela7upbZ2eTY2ua7upe6eed4+xa5uudZW8Q72qQ72qVYWiWYmoeBUJK7u71ceEtQUG9UeFtIUE9UeGtgYHdEaE9Ue7F8fFtLk710dEdoUFtwUHt4aG9UeE9UeHtYU4F8fG9MZEdoS5FsXHtUUnlnun1TgF5fDKyjHxiHJySXNwy/Lxy8LzQfikprikhpiYupghqa4uLqUtLa4hIawmKqoOEhQVFxdRExDVFxdTEwNpAzEVZOU1hITB+mSkNKUlNIUk1QXEVeDZ1gRERUhEVC2BQD+BHqx2wOrwQAAAABJRU5ErkJggg==&quot;,&quot;img&quot;:{&quot;width&quot;:2056,&quot;height&quot;:856,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/49a296ba7aa4d9e35ba12fc4d63e5b4c.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/49a296ba7aa4d9e35ba12fc4d63e5b4c.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://www.bolt11.org/?source=post_page-----bd7210f25012--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>The Lightning Invoice</h2><p>Learn about Bitcoin Lightning Network invoices. Get in-depth decoding on the inner workings of payment requests in LN.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.bolt11.org</span></div><img src="https://storage.googleapis.com/papyrus_images/49a296ba7aa4d9e35ba12fc4d63e5b4c.png"></div></a></div></div><p><a target="_blank" rel="noopener" class="dont-break-out st jg fk" href="https://medium.com/u/e56d3a55c1c9?source=post_page-----bd7210f25012--------------------------------"><strong>Suredbits</strong></a><strong> on Lightning Invoices</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://paragraph.xyz/suredbits/lightning-101-what-is-a-lightning-invoice-d527db1a77e6?source=post_page-----bd7210f25012--------------------------------">https://paragraph.xyz/suredbits/lightning-101-what-is-a-lightning-invoice-d527db1a77e6?source=post_page-----bd7210f25012--------------------------------</a></p><p><strong>BOLT11 Standards on Invoices in Github</strong></p><div data-type="embedly" src="https://github.com/lightning/bolts/blob/master/11-payment-encoding.md?source=post_page-----bd7210f25012--------------------------------" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;BOLT: Basis of Lightning Technology (Lightning Network Specifications) - bolts/11-payment-encoding.md at master · lightning/bolts&quot;,&quot;title&quot;:&quot;bolts/11-payment-encoding.md at master · lightning/bolts&quot;,&quot;author_name&quot;:&quot;lightning&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/lightning/bolts/blob/master/11-payment-encoding.md?source=post_page-----bd7210f25012--------------------------------&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/c8bc0dde17de876fa85e4ca185f3ab2f.png&quot;,&quot;author_url&quot;:&quot;https://github.com/lightning&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC10lEQVR4nK1UzWsTQRTfg1AQvHjpQUTBY4/9A8Ta6MmDaA+eRARB8KJQLIaICBEvIoilWCgokQQDak1ttPT70KTZTdPsZrKf+SjZ0lho02SzmZ3tsBlJNk2TkOLnj8fw5s2b3483M28oUofVDa1xcuhXyZ+A6pg3uZojOaD+JZdlWRhjhFBrck3AsqytfL5YLGY3clv5/M7ObrGGkq5XIIQ0E90tFAghNE2n0+muvIQQVVWDweDy8jLDMLOzs5FI5FAAIfR6bPzK1aE7d+89HHENjzhHHrlevHx1/8Gw+9nzm7dunz577vzA5RMne3tPnbk2dKO1uKYPAPB4PC6Xq6+vz+12Lyws2PFGBaq6+fjJ08XFJUEUWY6jGSadyXzw+8fejEuy8vad573XNx38PvV1+uOnz10FRFH0+/0Oh4OiqNHR0TYBQkhJ0yCEJU3Tdd1Ahq7rEBqaVjYQghCaGNvnazvFYqlQ2CvXcmBrBYFAwOl09vf3T05OzszMtFWwFmMTQJDk1EqYZrmkoqTW41yEiQqitB7naCbGcknAi3PzS4qi2NMkLwii1BTged7j8UxMTHi9Xp/PFwwG2y5ZEKXVSJTlkpKsMGtxlksmQDLOcizHZTdyv/McNU0DAMiyLIoiAEBV1bZnapr7ul4xUA2aVobQqFsNCCHyD+jsg7+G1a1P/7MA6TZtCFhWteMnsKxqte539HPrz9Gkw/XX1fUXqQlgjCVZkWRZkuXmzpy6STOxUHi1foHlUJhRFKVJijFOACEUXv2xvU0IUVJpmol+CUzZq1k1P7dENwQMZFagoemVdGYjFgccLwBeKuuVkqbn1K0Is55T8/sY7xb2EkDgxRTgxUxWNZBZ0nQW8AkgGMg0kCnKmZVwtKTp2Koqqdy3+VAFGibGHXdQrdtRsJc6co7yD46I6hls2PFLh9YzSB272Aj2OLonNCOtDLZj76UuUAPXfwKr1S8AEv/q+QAAAABJRU5ErkJggg==&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/c8bc0dde17de876fa85e4ca185f3ab2f.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/c8bc0dde17de876fa85e4ca185f3ab2f.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/lightning/bolts/blob/master/11-payment-encoding.md?source=post_page-----bd7210f25012--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>bolts/11-payment-encoding.md at master · lightning/bolts</h2><p>BOLT: Basis of Lightning Technology (Lightning Network Specifications) - bolts/11-payment-encoding.md at master · lightning/bolts</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/c8bc0dde17de876fa85e4ca185f3ab2f.png"></div></a></div></div><p><strong>Lightning Engineering — Understanding Lightning Invoices</strong></p><div data-type="embedly" src="https://docs.lightning.engineering/the-lightning-network/payment-lifecycle/understanding-lightning-invoices?source=post_page-----bd7210f25012--------------------------------" data="{&quot;provider_url&quot;:&quot;https://docs.lightning.engineering&quot;,&quot;description&quot;:&quot;Learn how to identify, decode and create Lightning invoices&quot;,&quot;title&quot;:&quot;Understanding Lightning Invoices | Builder's Guide&quot;,&quot;mean_alpha&quot;:254.966666667,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://docs.lightning.engineering/the-lightning-network/payment-lifecycle/understanding-lightning-invoices&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/c8dcd85484f497990ac6beda7a9c589c.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Lightning&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,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&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/c8dcd85484f497990ac6beda7a9c589c.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/c8dcd85484f497990ac6beda7a9c589c.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://docs.lightning.engineering/the-lightning-network/payment-lifecycle/understanding-lightning-invoices?source=post_page-----bd7210f25012--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Understanding Lightning Invoices | Builder's Guide</h2><p>Learn how to identify, decode and create Lightning invoices</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://docs.lightning.engineering</span></div><img src="https://storage.googleapis.com/papyrus_images/c8dcd85484f497990ac6beda7a9c589c.png"></div></a></div></div><p><strong>Lightning Keysend — ReadTheDocs</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lightning.readthedocs.io/lightning-keysend.7.html?source=post_page-----bd7210f25012--------------------------------">https://lightning.readthedocs.io/lightning-keysend.7.html?source=post_page-----bd7210f25012--------------------------------</a></p><p><strong>Voltage Keysend Payments</strong></p><div data-type="embedly" src="https://voltage.cloud/blog/bitcoin-lightning-network/keysend-payments-explained-voltage-technical-series/?source=post_page-----bd7210f25012--------------------------------" data="{&quot;provider_url&quot;:&quot;https://www.voltage.cloud&quot;,&quot;description&quot;:&quot;Keysend payments enable Lightning Network transactions without invoices, providing a simpler way to send payments directly between nodes.&quot;,&quot;title&quot;:&quot;Keysend Payments Explained - Voltage Technical Series | Voltage Blog&quot;,&quot;mean_alpha&quot;:96.703125,&quot;thumbnail_width&quot;:1021,&quot;url&quot;:&quot;https://www.voltage.cloud/blog/keysend-payments-explained-voltage-technical-series?source=post_page-----bd7210f25012--------------------------------&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/f886cd424540b38524141fc96716659e.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Voltage&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:720,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAIAAADlZ9q2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAElUlEQVR4nK1Va0ybVRh+ibhl3Cm9QMvGuLSUXri2o6WUQSe2UC6WZstGaWGQuoljBsbcRR0QJXFTF4wsmyEumSziRkx0URddFrM/uhh/GI3EDAZziOVehNKv39d+55jTZSjgjy3w5smXc358z/M+7/uecwBCMyBMmVd1+NpXd7wUhTEOsCTwJgUQgVA5QAaAPDbfcnnwJsIYIcSyaLMEZLBFDpw84KoBpAAyg/3E7LwbY7wpPgC2KCBMCZxc4O4iGrx8gHRhke0P1wzRQBv1AYQ9Igt4KkJNfGggXgeh8syXj9IMaQnamAZAVBZEZRN2voaY4BcAVwuSYijUH3n9vceFQhghjNj/ILhlH31XY3VCALE5BHwNCHRERqCFOC2kFcFuI8Rp7vz46wabAcBRk8QT9CDQE2puIWQYwGqBQjM8oy4/1EkE/Ayan0Azo+zkPXZiiHXdY8eH2MkR1jXMjv3CPhxmh4fYsWF2bDQwMoKmSPNWfABw84GvhfjdICrZKivWFhhS6oxgNYLCAiIzSMofTM7iAMV8+Q7z9Tn/7Uu+Pic98KrvYj092Elff5N6t9HX1+U9aqfePuPtOu3t7fX29xPix6YhWHQd5JRVGbVOs7S5Kq21SvySKVmfuzM1Xw+i0oGb35PTNz2GpkfR1AhamETTo+zE7+z4b2jqPvb+jRmagPJimsZ+P8GqEvF0Am3FYauqtiTJXpZebxI7KyR1pp1lal6lisNJSjnVdwNjyn/rAvNND/NZJ/PtB/TVdl9vPdWz39fXwo6RJpEpeBTrRg5AUW6rVNeb0uzlmbUmaZNZ3NWoPGJJNan5u6SczAQ4f7aD/Dj3J5p9gNwuNHWfrOf/QrMPWdcwWppD7lk0N43mZpDbjRbcax0Umiocz6XsN8r2GiSlapFix7MWXXSpKtqQzVeJY/Tybec6WjDG/lsX6Cst9EA7fbXN13uAOm/13/6I6q6gzjq8px3e443LrYe83R2L7cf9d++u6kFdjb7u+dSGKmVRlkAUBWZtgjwpNBQgmQ9FWbwqTWR3xzHiYN5FEicYR9OjmPYSCj+D/T4cYIILP2YYTFFrHTSYsxsqM6x7xDoFJxqgQBGnSIkQbQMASBeFJ0fCtf5LGGP6+mt0/yv0J22+Dw/SV9rQ4qpZXF/6fwWcLyhrTZKyAqG1ONGQxwMAQzbPmC8EAHlKTKmK//NPZIpYjxt55rF3gRTdM4/ZQPAw/x/WCNQUJTeZxXtLEowF8W22LJkQJAKQCEMSOVCtF7bUGxiG3siNBBpF4pmm3DZbRrM17Zhd7qzeblRFmrUx+wzxtj3cGwO9wYaty/fJBXg8kbNG/laz6qRDesohPmGXnHRI2w+IW6zCN14s8Cy5N3ihkmbGxkQ0VKa32mQOk9BZndRk3mE3JVRqw3747ouNPztEALbyY/kiZWp4g0VRXylRbgeNNHTw4x6SO/uk7CgYK4uVbZA/JCQcYCcXDu7TFefwBQCXL77/tLn7fL7FxUWPx7O8vOzxeJaCgRAiAlyANB5IhSFpfBDz4PNPyXUYCASeqvQIocC6QAj9A/PsQrdTSNl7AAAAAElFTkSuQmCC&quot;,&quot;img&quot;:{&quot;width&quot;:1021,&quot;height&quot;:720,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/f886cd424540b38524141fc96716659e.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/f886cd424540b38524141fc96716659e.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://voltage.cloud/blog/bitcoin-lightning-network/keysend-payments-explained-voltage-technical-series/?source=post_page-----bd7210f25012--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Keysend Payments Explained - Voltage Technical Series | Voltage Blog</h2><p>Keysend payments enable Lightning Network transactions without invoices, providing a simpler way to send payments directly between nodes.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.voltage.cloud</span></div><img src="https://storage.googleapis.com/papyrus_images/f886cd424540b38524141fc96716659e.png"></div></a></div></div><p></p>]]></content:encoded>
            <author>satoshifanclub@newsletter.paragraph.com (Mabel Oza)</author>
            <category>lightning network</category>
            <category>payment channels</category>
            <category>bitcoin lightning network</category>
            <category>bitcoin</category>
            <category>cryptopayments</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/19aa01c9cb4a58eef0b25b647478e8c1.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Different Ways to Close a Lightning Payment Channel]]></title>
            <link>https://paragraph.com/@satoshifanclub/different-ways-to-close-a-lightning-payment-channel</link>
            <guid>ILjger6Ugal533LIqxUO</guid>
            <pubDate>Mon, 03 Apr 2023 13:14:02 GMT</pubDate>
            <description><![CDATA[In the lightning network, payment channels can close in 3 different ways, and they're good, bad, and ugly. The good is a "collaborative close" when both parties work together to close the channel. The bad is a "force close" when one party can't close the channel. The ugly is a "dispute close" when there's a force close, but the other party comes back and disputes the close initiated by the other party.😃 Collaborative Close — GoodNegotiate the final channel balanceInitiate & Exchange Close Re...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/517a644a3c1829a31c38a84f1b0dc126.webp" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAANCAIAAABHKvtLAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADgUlEQVR4nH2Sb0xbVRjGn33xE7rELIEMZzKLISIukcxlWB2RiAwYZQu2oQ62OpVRhotzczL2l7uW1l0oYm80UefN1uno+HMzipXSldtmwa0UulrOLXontrSR9CYm+AE+1/QWSMXNN29O3nNO8v7O8z4HqVQqEol4vV6e5wOBAM/zhJBgMCgIQjKZTK1FIpHIHP73KpVKrayshEKheDxOCFlcXJydnV1aWspcwRmJW8anvvQF+zzTl1yBFu5eIxfYP3BfM/DzR67w8vKy3+8PBoNTU1M8z4+MjHAcZ7fbOY5zu92Tk5N/S1L0+rXf+/snuj8bOn58vPVDf2ubs1rlbzwstp9JTEwAtwSw0uPy4cJCd3c3Y2Uemb29vTGfTwQel7+p6oGB/wMI87EMgKbp2qoKmqazAT09PQt3VwHOf7eek9df39q3psAcQKkOV2Zw0YaWr3NLSvFdCKw083AVUFVe9vGW3JrXldkAmqYzgOuABpsZQJD7ngOOlr8sAqSiCrgZBhNCfWdL4WbkP4u+AHRdgzeuQHcerDQpxjKvfvdQY80WHNQ2ZAO6urriHq8ItAGVCliAcRkwCNz8/AQB7pnPIof1wfwTao9sA3Y9U5NWU92kqqvGhRGwkmcubjKZGCvTUPnGReSr9+zMBhiNxqjTKQIqYC9wAOiRAS1Anapy79a8dvUB4IfZzLi3q7+6BhVO9+ftUu5T1aJjEKz0oxAzGo2MlaHeazaj4Lxamw2gKCrGcSLgBu6j6AHyRWAaOIhNe8pee79AIeSWADayaum2EiAHlmFoO4qLi1HfDla6HZ43GAyMlWlubgag0Wg2AKJ2uwj4kI66NYfZgucKC5/XPfE02VQE2MLp7p/eRsUx7H4b3/4Jkx9PboVitwyIUhTFWBm9Xq9QKLTajQrmb3xvx/ZGYAewU5ailIs8oAgI4wVZwRdB1J4Gm0TZB2nYyVvIfxGvvgNWGiXRdQVKpVKtVj9SgQiMAp3AXbkOyaRXgHDODtmDvvSPxDcJnLqaLkrV6fk0XAYr8XPRjAefHG2lKKqtSbfB5PmhofW/PwEM4Kn1rRa4Wl6Bc3eIxklOeCIXvBGDV+j0zp25Ixwb+2X/KHlpiCSSf9lsNofDMTY25vF43HK4XC6HwzE8PGyz2f7w+wNNTYJeTzrOChYLuWx4cKlz5uSpad2R0Js1xGT+B0nsWvS0uAg8AAAAAElFTkSuQmCC" nextheight="561" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>In the lightning network, payment channels can close in 3 different ways, and they're good, bad, and ugly. The good is a <strong><em>"collaborative close"</em></strong> when both parties work together to close the channel. The bad is a <strong><em>"force close"</em></strong> when one party can't close the channel. The ugly is a <strong><em>"dispute close"</em></strong> when there's a force close, but the other party comes back and disputes the close initiated by the other party.</p><div class="relative header-and-anchor"><h2 id="h-collaborative-close-good">😃 <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#f241">Collaborative Close — Good</a></h2></div><ol><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#d20e"><strong>Negotiate the final channel balance</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#176d"><strong>Initiate &amp; Exchange Close Requests</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#9ea3"><strong>Sign, Exchange &amp; Broadcast Close Requests to the Network</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#55df"><strong>Wait for Confirmations on the Network</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#b7d3"><strong>Remove the Channel</strong></a></p></li></ol><p>💻 <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#ae6b"><strong>Code to do a Collaborative Close</strong></a></p><p><strong>📜 </strong><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#2371"><strong>Example of a Collaborative Close Transaction</strong></a></p><div class="relative header-and-anchor"><h2 id="h-force-close-bad">😞 <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#c07d">Force Close — Bad</a></h2></div><ol><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#a03a"><strong>Initiate, Sign, and Broadcast the Force Close Request</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#3a05"><strong>Wait for the Force Close to Confirm</strong></a></p></li><li><p><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#2e81"><strong>Remove the Channel</strong></a></p></li></ol><p>💻 <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#1b80"><strong>Code to do a Force Close</strong></a></p><p><strong>📜</strong> <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#a4db"><strong>Example Forced Close Transaction</strong></a></p><div class="relative header-and-anchor"><h2 id="h-disputed-close-ugly">😡 <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#1b00">Disputed Close — Ugly</a></h2></div><p><strong>💻 </strong><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#3a7b"><strong>Code of a Dispute Close Transaction</strong></a></p><p><strong>🗼</strong><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#cb66"><strong>Watch Tower</strong></a></p><div class="relative header-and-anchor"><h2 id="h-hooked-dive-into-the-rabbit-hole">📚<a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="#bb7d">Hooked? Dive into the Rabbit Hole</a></h2></div><div class="relative header-and-anchor"><h1 id="h-collaborative-close">😃 Collaborative Close</h1></div><p>A collaborative close in the Lightning Network is a channel closure where both parties agree to close the channel. With a collaborative close, both parties sign off on closing the payment channel and get their funds back immediately. Below are the steps to a collaborative close.</p><div class="relative header-and-anchor"><h2 id="h-1-negotiate-the-final-channel-balance">1. Negotiate the Final Channel Balance</h2></div><p>Before initiating the channel closing, the parties should agree on the final balance. This can be done by exchanging commitment transactions until they reach a final balance that they both agree on.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/66e17fca79104a4ecbd79f0a65702f44.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAVCAIAAACor3u9AAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEzklEQVR4nKWUfWwTZRjA32Txj/kP/iHIupW5uIxVjIoLW4fr4pDBiiLEyEApI5D4tTnCRDLIaoImGuJHhAhmyVgkLkyGMubYFu0WTEe74V3E693B9Stt3Y3urpder0f65r1j3Zn1mq2S8WH8/XV3ed73997zvM8DtHtAkuT4+LjT6RweHiYIwuFwkCTpcrlIknQ4HE6n0+12X7t2rb+/3+12O53Oubm5JfcB9xJomiZJkva/WVogSRLP83IGSZISiYQkSbIsp1IphJD+MZlMiqLI87wgCPF4XBTF+wlEUbzQe27SNa6/yrJMUVQoFPL7/RRFYRhG03Q4HE6lUrIsq6rq9/uvXr1KkmQgEMBxPBKJJJNJfS2BY1dGRtLp9KJgbm6u9oWnGx55Yg94MhaL6YJgMOjz+QKBAEVRNE1TFMXzvC5ACIVCoYmJCZqmcRy/ceMGy7KyLEMI4/H4xtVFluKVn7e3LwqO2dvfAI+fKln3iaHc0fcTQkhRFK/X6/P5PB5PJBJhGMbr9UIIF1Iky3I0Gp3JwHGcLMuJRILjuCuO3y6c/Ih2dL7+onlR8Pzq4meWgzPvFu+tfizo80uSlE6nIYSCIOA4zjAMRVEQQkVRUqnU/Usa9Hs9Q9/Er58/13ViURAMBhvWrj21b9Vea0M0GoUQJhIJvZJSpph6hfUiL7lvUhbDzKSqqizLrm/7+ItPDw4O9C8Ken7oWQXA/keL3gRFeXl5kyPd1389M9L54anDr8q3E9rDEb3pjLM3jxw5BI6cCbjP2hq3hkKhrKCs7KlDoCwBGqPAdvHHnsmfv/rbd13PkvbQKIpi3Vhba6nauXvngbYDe3Zstu1uVFUVQAhPNlcG6o7eBjtvgUaY+g+b3sXp09/W1VU3vrXjvdaW+o2Wox2HeZ6f/4NLJ94ZNe37A2y+AGqYcSx3zeXLl9esWWM2my0WS1VVVX5+vsFgsFgsIIPJZCorKwMA6Jd79s6sdfOGXbZd7x9stTa85PF4sin6ve9rfQEAoLOzM1cwODgIAMjPz6+urtYDzGZzZWXlihUrAAA1NTUVFRULAoRQzfp19fUvv/LaVkuN2e12ZwW/fNdeXLR8i3VLeXm53W7PFQiCQGRwOBz6w9jYWFdXF4ZhBEGcz0AQxEK1Kp6rMKw0lJeWGw1Gr9ebFXjpP0tLS4eGhlpaWrZv354rgBByHMeyLMdxDMMghOLxOMMweltEIpGpqSlFURBCerxlfe3aZyuamz8wGozT09NZQTKZBABMT09jGJaXl5c7eCGEsVgsEonMzMzQNA0hFEWRYZhkMokQCofDwWAQZdDjrZus+/e93d3dXVhQqE+necHAwEBBQYGmaSzLAvCv+QohnJqawnHc7/frqdCTBiFcUlBnqWtubu7t7TUajBzHZQUdHR1tbW2apqXT6WXLluUKEEIsy5IkGQ6HJyYmZu/MCoKAYZiiKJqm+Xw+PdG5gtbW1r6+PqPByPN8VtDU1ESSpB5hs9mkmLAgSGfa7YEsZLV+w6bjx4+7XK7CgsJEYn4KZPrg+55LX57Wr9pY38Wzxz6buRW9u4sehKqqdru9pKRkdHRUFEWTybRt2zZBEOYFCCHvXySUZT30gSPzXjAME41mTybLMkEQqqr+A29ZSLbQkK/TAAAAAElFTkSuQmCC" nextheight="902" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-2-initiate-close-channel-requests-and-exchange-requests">2. Initiate Close Channel Requests &amp; Exchange Requests</h2></div><p>Each party must initialize a close channel request in a collaborative close. Before the request is ever signed and broadcasted to the network, it must be exchanged to ensure everyone is on the right page.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/04d4a41d0cd8b88427d7c97dddaf6aa1.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEo0lEQVR4nG2UX2gcRRzHR+qD+hBQqhT/VARNGrS10JIa2hQsJUVtI/aPKYroIRaiDaEN/fMQqC1iIGh9sKZgpd6TTQM+GUpPtJjrNS653bO33T+et7cXdvdu5ra7t9fMznrXHBm5m3TvLP2+7DDDzuf3m+93BtD/y/d9nuc5jtM0TRTFTCaTSqXS6bSqqnNzczzPp1IpTdMEQUgmk5IksVVBEAzDyOVykiSJophOpzmOEwShWCyC+wCUUkKIf0+EkEqlQu4JQogxDoLA8zyMMYSQEGLbNsbYcRzf93VdV1XVMAxWGcb4AQCm9n1D+b5v27au65IkCU3JspzNZgkhS3eXMMaEEFEUZVlGCLHiVgC//Xr1jde3nT/3TXsfqqrmmsrn87IsK4qCmrJtW1EUCCFbJYRgjMMfv/3yi0P7995Ki0t3lyilDYBpmpse6hgBa4bBurLjhoBMJhOLxZJNzc7OchxHCEEImaaZz+cRQpqmQQgdxwkB1Wr1o109Rw/uOHX0CJtpAI4MDz0FwIk3H9u1cQ2bxRjX63We5yVJymQyoigqisJxHIQQIQQhZLYriiIIguM4lUol7OCXHz7P/HHhwtcTLUAqyfd2dZ7of/Twxx+y3cvlsuu6zORQGGPmAcZY0zRZlm/cuKFpmud5ruuqIn+7ZNXr9f7IodFDB24KyRaA53kAwF7wyEYA+vs2zF7+aubH0xNHB2q1Wnt8fd9fXl6uVqsPDEXZua3/deX8+e/A/uErlyYG9+0hhKwADn/y3n7wpAx2prcfExIxU5NYCn3fx015nqcoSjabTSaTuVyOTTIkxjhEfn9h8oXnn966tWffwXdf6Vp7+vSpFcDU+AfivlP/gP458H6YUUppIpGYn58X/1YWzIU5ae5mJg0ryMYlG5fKZCUL7EjDXOzZvWtb35Z3Bg/s3LGd5/kVwPyV6JYn1r4EwMMAsGz5vk8pvXbtWpKTJdUplgucwaUKQhqJ8fz1XDlXwqiwWFxeXqaU6rrO4us4zuFPh3pe27Tn7YFX169jqw2A8PvlxwHo6OgAAEiSRCl13UaB+XzeNE1d18vlcoAQKRQChBZNMzAsQnBhsah7Oq7dYdUwDQ0Ngaaee+bZlsm6KnZ3d09PT3d2dkaj0aW7S0EQhK+Ff88JjLFlWYZhaJpmGEboBGua6fjx46vAqoGBga4Xu1qAxgcAy7LGxsYikYjneZZlsVvjNsMaCiFULBaz2Ww+n29PARtQSs+cOdPb0zs+Pr554+YWQJIkABqDycnJwcFBtmBZFoSQUqppWjweb+THNDiZ4+WkVswVFosljEzPZAcd2nby5MltvX0TExPdnd0twNTU1MjICKVUFMVIJBL2a9s2pTSbzaZSKSEJTdu9BcVkgVcc9c+FhFKSbVyy7hTu/NuIHAOMjY3tfmvg4sWL61/e0AL8PH3pp7PnarUahPDsZ8fSKSEsqlarua5rWVYul4MQVm+7vmUFCAWG5VvtVjceWghhX1/f6OhoPB5fvXp1IpFYAWCME1djdrFxIDZCNkIMUK/X2w24T+3Xzff9IAhUVY1Go5VKpV6vx2KxmZkZSul/VTSEFxO9aXQAAAAASUVORK5CYII=" nextheight="772" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>An initialize request in LND implementation involves the following details:</p><ul><li><p><strong>Channel Point</strong>: a unique identifier for a payment channel established between two parties. It consists of the channel funding transaction hash and the index of the transaction output that funds the channel.</p></li><li><p><strong>Target Confirmations: </strong>How many blocks need to be mined after the close txn to consider the txn done?</p></li><li><p><strong>Sats Per Byte: </strong>This is the Bitcoin fee rate the party is willing to pay on the close transaction.</p></li><li><p><strong>Force: </strong>Since this is not a force close, force is set to false.</p></li><li><p><strong>Delivery Address: </strong>Specifies an address to receive the funds from the closed channel. If left empty, the funds will still be split between the two parties according to their channel balance, but any unspendable funds will go to the node that initiated (Alice) the channel closure request.</p></li></ul><p>Below is the code (using the LND go implementation) to initiate the close:</p><pre data-type="codeBlock" text="// Initiate the cooperative channel close.
closeReq := &amp;lnrpc.CloseChannelRequest{
    ChannelPoint: channelPoint,
    TargetConf:   0, // Wait for the next block.
    SatPerByte:   1, // Set the fee rate.
    Force:        false, // Initiate a cooperative closure.
    DeliveryAddress: &quot;your_bitcoin_address&quot;, // Optional.
}
closeResp, err := client.CloseChannel(ctx, closeReq)
if err != nil {
    log.Fatal(err)
}
log.Printf(&quot;Close channel response: %v&quot;, closeResp)
closeChannelStream, err := client.CloseChannel(context.Background(), closeChannelReq)
if err != nil {
     log.Fatalf(&quot;could not initiate close: %v&quot;, err)
}"><code><span class="hljs-comment">// Initiate the cooperative channel close.</span>
closeReq :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span>lnrpc.CloseChannelRequest{
    ChannelPoint: channelPoint,
    TargetConf:   <span class="hljs-number">0</span>, <span class="hljs-comment">// Wait for the next block.</span>
    SatPerByte:   <span class="hljs-number">1</span>, <span class="hljs-comment">// Set the fee rate.</span>
    Force:        <span class="hljs-literal">false</span>, <span class="hljs-comment">// Initiate a cooperative closure.</span>
    DeliveryAddress: <span class="hljs-string">"your_bitcoin_address"</span>, <span class="hljs-comment">// Optional.</span>
}
closeResp, err :<span class="hljs-operator">=</span> client.CloseChannel(ctx, closeReq)
<span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
    log.Fatal(err)
}
log.Printf(<span class="hljs-string">"Close channel response: %v"</span>, closeResp)
closeChannelStream, err :<span class="hljs-operator">=</span> client.CloseChannel(context.Background(), closeChannelReq)
<span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
     log.Fatalf(<span class="hljs-string">"could not initiate close: %v"</span>, err)
}</code></pre><div class="relative header-and-anchor"><h2 id="h-3-sign-exchange-and-broadcast-requests-to-the-network">3. Sign, Exchange &amp; Broadcast Requests to the Network</h2></div><p>Now that both parties agree on the close request, they can sign and broadcast their requests.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fa1f3af914c08ce86e8891f91324814a.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEZElEQVR4nIWUb0gbZxzHH1zYJjLLxthkHZ2CrdhudK1W2V4MtjIn68uOjTHZi1JlHSYwNylKnRNkLsx/RMkootE5lYlY90IlmMWMxEsgyS1Xc38g94fbBc5weMktnImEu2ckF2JWHfu8evjdL7/P3fd5ngB4ing87na7SZL0eDx7e3vBYHB/f397e9vpdAYLuFwuBEH8fn8kEkEQBEVRt9uNIAhFUaengdMlCGEmk9F1/aiALMtHZUAIdV1XVbW8qGnamXP+UwAhTKVS2Wz2+Pg4VyCTyRgLRVFUVeV5nmEYlmXxApIk/Y9g5LtvX6t+eqS/r/RAURRBEPb39/f29giCwDAMx/GDgwO1AE3TwWDQ7/eHQiGv15tKpUo//DMQaKiuemD+8kQQ8HmbAZgEl7+ubvpbTpYEGIYhCEKSJIZh4XAYRVGSJA2BKIqhUCgQCKAoyjBMeUqTwwPun4feb7xgWPOCWzffqQdg/LOXPnnvcikfvYAkSXSBWCymqiqE0BAcHR1FIpFoNIrjuCiKyWSylJLP9UhAHPbBe8aG5QU0Tb97qX6g/dw33d2apqXT6VQqlUgk0mdhaHL/Rtf1ZDLJYH9omjb5cO6LH61f3buj63pRsLS09AIAneCVGwC0tVzccQxsLwxP3f9IVdMURQmCQBAEx3HlWydJUiwWo2kax/FSMcGgaOD3pg/ab1snfhrpnp62FQW3298eAldY8GHs05FYNCiJQvkgu90+MTEhCALHcfECiUQCQuj1emdmZtxud6lZVdXrb15put7YaTa/1XL19caLFEXlBQtDH9M3H/wFboVf7Sx1Gx/o9/sdDsfy8rLT6Xzi/M3NzdlsNrvdXl5cXf31RvMbXRZLS+s1q/X7VCqVF+z88kPzuQsNADwPgDEXQtjf328I1tfX4/F4STA7O2vs5+Li4ubm5traWrkgHA63tlztuHu3pfXa+MRoMSLfbw8BADU1NQAAlmWN1pWVlfn5eZvNNjg4OD09vbOzY9RlWe7t7Z2dnbVarWNjY6Oj+SkleJ6veqay8qlnn6usmpqaKgqox4G6ujqn01lXV7exsXHqMsLDw0NjkU6nZVk2Asxms4IgZDKZ8k5Zlk3A1NHxuQmYHA5HUaDrOgBAVVWz2dzT03NawPO8sfD5fFtbW8Za0zRBODkOBrlcrgJUOJ3Ol1+sMdLLC1wuV21tLYTQarV2dXUZraIoMgwTj8dxHOd5XhRFjuOi0ajP54vFYrIssyyLYRjP8ziOsyyby+WM+28CJo/Hc77m/OLiYlEwPj4+PDwMIfR4PBaLxRAoikKSJI7jBEEYEa2uriIIgmHY1tbWwcFB/uAnEgRBMAxD03TppJqAKRKJXKpvWF5eLgqmJsd8j/IfznHchPl+KZAn2N3dDYVC4XAYQRBFUc7sCQQCFaBCUZS2tra+vr58+BBCgWbX5xYkSdI0jXocJaInl7Mc42U5jqMo6sz/52w229vba7w4iqIWi4UkyX8A1tR3dFDSz9EAAAAASUVORK5CYII=" nextheight="769" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Below is the code (using the LND go implementation) to sign the request, send it to the remote (other) party, and receive the signed request from the remote (other) party.</p><pre data-type="codeBlock" text="// Sign the close request.
    signedCloseReq, err := client.SignMessage(context.Background(), &amp;lnrpc.SignMessageRequest{
        Msg: closeRequest.SignedClosures[0].TxidBytes,
    })
    if err != nil {
        log.Fatalf(&quot;could not sign close request: %v&quot;, err)
    }
// Send the signed close request to the remote party.
    _, err = closeChannelStream.Send(&amp;lnrpc.CloseStatusUpdate{
        Update: &amp;lnrpc.CloseStatusUpdate_SignedClosingTx{
            SignedClosingTx: signedCloseReq.Signature,
        },
    })
    if err != nil {
        log.Fatalf(&quot;could not send signed close request: %v&quot;, err)
    }
    // Receive the fully signed close request from the remote party.
    closeRequest, err = closeChannelStream.Recv()
    if err != nil {
        log.Fatalf(&quot;could not receive fully signed close request: %v&quot;, err)
    }"><code><span class="hljs-comment">// Sign the close request.</span>
    signedCloseReq, err :<span class="hljs-operator">=</span> client.SignMessage(context.Background(), <span class="hljs-operator">&amp;</span>lnrpc.SignMessageRequest{
        Msg: closeRequest.SignedClosures[<span class="hljs-number">0</span>].TxidBytes,
    })
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not sign close request: %v"</span>, err)
    }
<span class="hljs-comment">// Send the signed close request to the remote party.</span>
    <span class="hljs-keyword">_</span>, err <span class="hljs-operator">=</span> closeChannelStream.Send(<span class="hljs-operator">&amp;</span>lnrpc.CloseStatusUpdate{
        Update: <span class="hljs-operator">&amp;</span>lnrpc.CloseStatusUpdate_SignedClosingTx{
            SignedClosingTx: signedCloseReq.Signature,
        },
    })
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not send signed close request: %v"</span>, err)
    }
    <span class="hljs-comment">// Receive the fully signed close request from the remote party.</span>
    closeRequest, err <span class="hljs-operator">=</span> closeChannelStream.Recv()
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not receive fully signed close request: %v"</span>, err)
    }</code></pre><p>Below is the code (using the LND go implementation) to broadcast the close channel transaction to the Bitcoin network.</p><pre data-type="codeBlock" text="// Broadcast the close transaction to the Bitcoin network.
    _, err = client.SendRawTransaction(context.Background(), &amp;lnrpc.SendRawTransactionRequest{
        TxHex: closeRequest.SignedClosures[0].TxidBytes,
    })
    if err != nil {
        log.Fatalf(&quot;could not broadcast close transaction: %v&quot;, err)
    }"><code><span class="hljs-comment">// Broadcast the close transaction to the Bitcoin network.</span>
    <span class="hljs-keyword">_</span>, err <span class="hljs-operator">=</span> client.SendRawTransaction(context.Background(), <span class="hljs-operator">&amp;</span>lnrpc.SendRawTransactionRequest{
        TxHex: closeRequest.SignedClosures[<span class="hljs-number">0</span>].TxidBytes,
    })
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not broadcast close transaction: %v"</span>, err)
    }</code></pre><div class="relative header-and-anchor"><h2 id="h-4-wait-for-confirmations-on-the-network">4. Wait ⏰ for Confirmations on the Network</h2></div><p>Wait for the <code>TargetConf</code> stated during the initiation, these are the number of blocks that need to be added after the close transaction is committed to the Bitcoin network (in this example, Alice is waiting for 6 blocks).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/926533a121ed1f929b57695c4eea0ea8.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAATCAIAAAB+9pigAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEoUlEQVR4nJWVf0wbZRjH3ywliroZZ4IGFmFzaIPgIii/mT8Q2BbJgAl/sKlzbDrGZHFi1E1UEv4gU5aNdAQkHehBuzlIGQWmjkEzkEPbAl2vd816b9URy5Hj+sNbr414fU17rNK4LvGb7x/v+z53z+fe933e9wCKIovFotfrCYKAENI0rdfrzWbz7OwsQRCLi4sLCwszMzNms3l+fp4kSZqmo+UB0QI+n49lWafTKQgCwzAcx3k8HmnE5XJ5vV6WZT0ej9Pp5DjO6/X+P4Df7/dEkSAIUnRycnImJIvF4na7RVG8F2B0cLAwN6Ol+Qupy/O81CBJkqIogiBompZSeEOSQiRJ/h5S+JWhi+rPjh1zcs4IgCAI6QA0gqQKsKH3vFLK4vP5zGaz1WqVGAzDkCTJMIwE4HneYDAQBGG320mSlADz+l/WA9D0Tqn2kgohJIqi/Y+lIGB4aPAJAFqqH38tNebD+iMIIbfbzTAMRVEQQqPRaLVaKYqyWq0LCwsSgCAIKiRLSBzH8TyP63R5m+Nu/fztDb0umGTZcVWLBQEkYclMk9cVxKZviZsz6FmWdblc0jwghC6XC0Jos9nCgzzP0zRNkuTY2JjJZJqenuY4zuFwiKL4eV3lb1NduisahJAGU/zpZoOAQCCQ/eQz5bL1+SDWYDAIgiCKYrRN9vv9oiiyLMtxHMMwSyFJdUXTNNb2cdtXJ/dUlH7y0fFdOwpX92BkZKQEPPADyO4A8qqyMoSQ4da1cbpfss6quf7rZcnjUHMdateG1hZMXx+2v6pkf21tfkFWa+uXE7prq4CZH3vPvvx078ZURXpS16dV43CgXlsi+V31S4cubT+u3VWvLXlfu+Ot7uz3tMVS6OjAKzUdJWsBjY0n5E9tqdxbvbuidPTKcESZXtj0+lWQpwYv2GeJbkNThTqhQp1Qroovbn+4XBUndSvUCcXtj5ar4iWXKuOqzmS6hL/ElVXA8PBQxnNpZXvK3qg5oFC0RQBiYmJASGNjY534yUos8dBAblXf1hdPg53n7w+7oDUm3H713H37zuYghG4LqwSaptNS5VnZz2fl5La3t0cA8vLykpOTY2NjjUaj2nj6QF+25KOqnXt7ng37CLYjHDqI5d90mIJ15fs7vEoPxjwEAFgH1mEYFgHIyspqbm4GANhstmi3CrpzesPdUarn1ERdi67u1ETdBxfLA4FA/GPx+TkFMiBTKpURgIyMDJVKBQBYXFyMlt3v9/f392s0Gr/fjxCycaY3+1Ml7/tu2/amjYFAIHFTkkKh2Lo5ua0tcg/kcvno6Oi9ZzAxMQEhtNvtOl3woJJL+G7sEcml32zIPAFYdkkGZBqNJn1bekNDQwQgJSXF4/EUFRVZLJa7ZqdDvwSDwaAPCUJIMNNFX8skF3aA6jN5EEIZkBEEUV1dffjg4X8B9jmi/u0ahFB3Z+flrp6VlTt1t0aCIOA4Ph8SjuOCICzfdvTPnVv1rMLNLzMMAwDAcVyhUCQmJqpUwSsPBAIBNYbd+AlHCDEM8z12Ad68+ypJH07TNEVRDofjvw+IoqhUKmtra91u99TUlMkUrLF/AJkFWZ57uzIGAAAAAElFTkSuQmCC" nextheight="811" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Below is the code (using the LND go implementation) to wait for the confirmations.</p><pre data-type="codeBlock" text="// Wait for the channel to be closed and remove it from local storage.
    waitCloseReq := &amp;lnrpc.WaitForFinishedRequest{
        ChannelPoint: channelPoint,
    }
    _, err = client.WaitForChannelClosed(context.Background(), waitCloseReq)
    if err != nil {
        log.Fatalf(&quot;could not wait for channel to close: %v&quot;, err)
    }"><code><span class="hljs-comment">// Wait for the channel to be closed and remove it from local storage.</span>
    waitCloseReq :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span>lnrpc.WaitForFinishedRequest{
        ChannelPoint: channelPoint,
    }
    <span class="hljs-keyword">_</span>, err <span class="hljs-operator">=</span> client.WaitForChannelClosed(context.Background(), waitCloseReq)
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not wait for channel to close: %v"</span>, err)
    }</code></pre><div class="relative header-and-anchor"><h2 id="h-5-remove-the-channel">5. Remove the Channel</h2></div><p>Most implementations handle the channel removal on the network automatically. But even though the channel is removed from the network, the channel's information will still exist in the network.</p><p>You may want to remove a channel from your Lightening node's storage to free up disk space, improve your node's performance, or reduce your configuration's complexity.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4e14a89dd12c7ec78866778a67101aa4.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADWklEQVR4nK2Ub2gTdxjHH2pF+0J8N1Y2teBc9YUtuFHpnE6q9KyLCJ2WIeKooXZO3F5EKL5ZQCt0G2NheyPZXLYhCAWj7o1kh0swKaQ5DHdr7uD+eIdJOY5k9zOQuxzXHHcSf9CuyRUt7PviePjdPc/nnuf3PA94ryfDMBpLDc/zEEKu6+q67jhOvV5/pSO8JqBSqWSzWYqiCoUCz/M0TWcyGYqi/jdAixpLjVqtZhjG8rNWq3nrBViWhcvSLtM0VVVlGIam6YWFhVwuhxDCrxiKiv7wfVnTbNtuBcylUoO73vly7AxCyHGc2cjlJ6l7awEURcGh8/l8NptVVRVfFQCc+mDPze9uyPRftm2vAgT27puGt0c74dLn5+M/flUuPUUIVV8KF2HZ1nXd8zxBEERRFAShWCzato0QkgTxyO43i5lbuccPw1cvq6raBAj/zGmlp03A4Q+JHpgc3rllM8TvxHCUxlJDlmVRFCVJ4nkel6JarRqGYa5WpVJBCF365CPy9vVvpr8+eGDAcRywLOvBbzP51GwsPLb9jS4AONfT1Qsb6vU6/imO4yRJomm6VCpxHKcoCk7Ft3S///Hr0MF945+NjYwczeWyq+7Add1EIjE+Pn4F3noCh3W5hGuNEFIUhWVZSZJYli0WiziD9ugcx/X39e7u3XHuwoXp6Wv+XeS67jwc42CoeDeJx6rmJ9M02wFfXJw4eWKkv6/3bDA4OPg+btxWwN+PHh0C+Bg2zkai3nr0vPrv6dFjP/9ys2/vu6Ofjh0lhvAYtgKCwSC8VCwWWxegkEs8Ly+mUqldO3f09GwDgGg02gowTbOzs5Mkye7u7rXWgK7rgiA4jvPfQ8uynsk8tgf37weAjbBphDjeCiAIIhAINE8BFhcXfQEkSSYSCVEU10plZmYGAEKh0KaOrhWAYRhTU1OBQMBxnOb4Abiu2+6saVo6nWZZNplMWpblC5iYmNjatXXgvYHhI8MrgOTdB7HIT9gul8sEQfg6ZzKZeDzOMAxeq+0fpNNpAAiHwwAwPz+/AmDy+eXOo+bmbn8b8QVomsayrCzLDMP4ZhAKhfr7+imK6ujoiESaQXy2aWOp8fDP+74lUhRFEARZlnme972kQqEwOTlJkqSiKAzDeJ73Ar+uskfnI0gmAAAAAElFTkSuQmCC" nextheight="788" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Below is the code (using the LND go implementation) to remove the channel from local storage.</p><pre data-type="codeBlock" text="_, err = client.RemoveChannel(context.Background(), &amp;lnrpc.RemoveChannelRequest{
        ChannelPoint: channelPoint,
    })
    if err != nil {
        log.Fatalf(&quot;could not remove channel: %v&quot;, err)
    }"><code><span class="hljs-keyword">_</span>, err <span class="hljs-operator">=</span> client.RemoveChannel(context.Background(), <span class="hljs-operator">&amp;</span>lnrpc.RemoveChannelRequest{
        ChannelPoint: channelPoint,
    })
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not remove channel: %v"</span>, err)
    }</code></pre><blockquote><p><strong>Warning — Loss of Information:</strong></p><p>Removing the channel state from your Lightning Network node will permanently delete all information associated with the closed channel, including the transaction history and any funds remaining in the channel.</p><p>This is why it’s important to make sure that the channel has been fully closed and settled on the Bitcoin network before removing the channel state from your node.</p><p><strong>Warning — Wait for Pending HTLC’s</strong></p><p>Wait for any pending HTLCs to expire: If there were any pending HTLCs (hash time-locked contracts) on the channel at closing, you should wait for them to expire before removing the channel state from your node.</p><p>This is because HTLCs have a time-out period during which the counterparty can redeem them. Once this time-out period has expired, the HTLCs will be resolved on-chain, and the remaining funds will be returned to the appropriate parties. Once all pending HTLCs have expired and been resolved, you can safely remove the channel state from your node.</p></blockquote><div class="relative header-and-anchor"><h2 id="h-example-code-to-do-a-collaborative-close">Example Code to do a Collaborative Close</h2></div><pre data-type="codeBlock" text="package main

import (
    &quot;context&quot;
    &quot;fmt&quot;
    &quot;github.com/lightningnetwork/lnd/lnrpc&quot;
    &quot;google.golang.org/grpc&quot;
    &quot;log&quot;
)
func main() {
    // Set up a connection to the lnd instance running locally.
    conn, err := grpc.Dial(&quot;localhost:10009&quot;, grpc.WithInsecure())
    if err != nil {
        log.Fatalf(&quot;could not connect to lnd: %v&quot;, err)
    }
    defer conn.Close()
    client := lnrpc.NewLightningClient(conn)
    // Set the channel point you want to close.
    channelPoint := &amp;lnrpc.ChannelPoint{
        FundingTxidStr: &quot;funding_transaction_id&quot;,
        OutputIndex:    0,
    }
    // Start a cooperative close for the channel.
    closeChannelReq := &amp;lnrpc.CloseChannelRequest{
        ChannelPoint:  channelPoint,
        TargetConf:    6,
        SatPerByte:    1,
        DeliveryAddr:  &quot;&quot;, // Optional, if not provided the closing funds go to the channel initiator.
        Force:         false,
    }
    closeReq := &amp;lnrpc.CloseChannelRequest{
      ChannelPoint: channelPoint,
      TargetConf:   0, // Wait for the next block.
      SatPerByte:   1, // Set the fee rate.
      Force:        false, // Initiate a cooperative closure.
      DeliveryAddress: &quot;your_bitcoin_address&quot;, // Optional.
    }
    closeChannelStream, err := client.CloseChannel(context.Background(), closeChannelReq)
    if err != nil {
        log.Fatalf(&quot;could not initiate close: %v&quot;, err)
    }
    // Receive close request from remote party.
    closeRequest, err := closeChannelStream.Recv()
    if err != nil {
        log.Fatalf(&quot;could not receive close request: %v&quot;, err)
    }
    // Sign the close request.
    signedCloseReq, err := client.SignMessage(context.Background(), &amp;lnrpc.SignMessageRequest{
        Msg: closeRequest.SignedClosures[0].TxidBytes,
    })
    if err != nil {
        log.Fatalf(&quot;could not sign close request: %v&quot;, err)
    }
    // Send the signed close request to the remote party.
    _, err = closeChannelStream.Send(&amp;lnrpc.CloseStatusUpdate{
        Update: &amp;lnrpc.CloseStatusUpdate_SignedClosingTx{
            SignedClosingTx: signedCloseReq.Signature,
        },
    })
    if err != nil {
        log.Fatalf(&quot;could not send signed close request: %v&quot;, err)
    }
    // Receive the fully signed close request from the remote party.
    closeRequest, err = closeChannelStream.Recv()
    if err != nil {
        log.Fatalf(&quot;could not receive fully signed close request: %v&quot;, err)
    }
    // Broadcast the close transaction to the Bitcoin network.
    _, err = client.SendRawTransaction(context.Background(), &amp;lnrpc.SendRawTransactionRequest{
        TxHex: closeRequest.SignedClosures[0].TxidBytes,
    })
    if err != nil {
        log.Fatalf(&quot;could not broadcast close transaction: %v&quot;, err)
    }
    // Wait for the channel to be closed and remove it from local storage.
    waitCloseReq := &amp;lnrpc.WaitForFinishedRequest{
        ChannelPoint: channelPoint,
    }
    _, err = client.WaitForChannelClosed(context.Background(), waitCloseReq)
    if err != nil {
        log.Fatalf(&quot;could not wait for channel to close: %v&quot;, err)
    }
    _, err = client.RemoveChannel(context.Background(), &amp;lnrpc.RemoveChannelRequest{
        ChannelPoint: channelPoint,
    })
    if err != nil {
        log.Fatalf(&quot;could not remove channel: %v&quot;, err)
    }
    fmt.Println(&quot;Channel closed.&quot;)
}"><code>package main

<span class="hljs-keyword">import</span> (
    <span class="hljs-string">"context"</span>
    <span class="hljs-string">"fmt"</span>
    <span class="hljs-string">"github.com/lightningnetwork/lnd/lnrpc"</span>
    <span class="hljs-string">"google.golang.org/grpc"</span>
    <span class="hljs-string">"log"</span>
)
<span class="hljs-title">func</span> <span class="hljs-title">main</span>() {
    <span class="hljs-comment">// Set up a connection to the lnd instance running locally.</span>
    <span class="hljs-title">conn</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">grpc</span>.<span class="hljs-title">Dial</span>(<span class="hljs-string">"localhost:10009"</span>, <span class="hljs-title">grpc</span>.<span class="hljs-title">WithInsecure</span>())
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not connect to lnd: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-title">defer</span> <span class="hljs-title">conn</span>.<span class="hljs-title">Close</span>()
    <span class="hljs-title">client</span> :<span class="hljs-operator">=</span> <span class="hljs-title">lnrpc</span>.<span class="hljs-title">NewLightningClient</span>(<span class="hljs-title">conn</span>)
    <span class="hljs-comment">// Set the channel point you want to close.</span>
    <span class="hljs-title">channelPoint</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">ChannelPoint</span>{
        <span class="hljs-title">FundingTxidStr</span>: <span class="hljs-string">"funding_transaction_id"</span>,
        <span class="hljs-title">OutputIndex</span>:    0,
    }
    <span class="hljs-comment">// Start a cooperative close for the channel.</span>
    <span class="hljs-title">closeChannelReq</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">CloseChannelRequest</span>{
        <span class="hljs-title">ChannelPoint</span>:  <span class="hljs-title">channelPoint</span>,
        <span class="hljs-title">TargetConf</span>:    6,
        <span class="hljs-title">SatPerByte</span>:    1,
        <span class="hljs-title">DeliveryAddr</span>:  <span class="hljs-string">""</span>, <span class="hljs-comment">// Optional, if not provided the closing funds go to the channel initiator.</span>
        <span class="hljs-title">Force</span>:         <span class="hljs-title"><span class="hljs-literal">false</span></span>,
    }
    <span class="hljs-title">closeReq</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">CloseChannelRequest</span>{
      <span class="hljs-title">ChannelPoint</span>: <span class="hljs-title">channelPoint</span>,
      <span class="hljs-title">TargetConf</span>:   0, <span class="hljs-comment">// Wait for the next block.</span>
      <span class="hljs-title">SatPerByte</span>:   1, <span class="hljs-comment">// Set the fee rate.</span>
      <span class="hljs-title">Force</span>:        <span class="hljs-title"><span class="hljs-literal">false</span></span>, <span class="hljs-comment">// Initiate a cooperative closure.</span>
      <span class="hljs-title">DeliveryAddress</span>: <span class="hljs-string">"your_bitcoin_address"</span>, <span class="hljs-comment">// Optional.</span>
    }
    <span class="hljs-title">closeChannelStream</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">CloseChannel</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-title">closeChannelReq</span>)
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not initiate close: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-comment">// Receive close request from remote party.</span>
    <span class="hljs-title">closeRequest</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">closeChannelStream</span>.<span class="hljs-title">Recv</span>()
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not receive close request: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-comment">// Sign the close request.</span>
    <span class="hljs-title">signedCloseReq</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">SignMessage</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">SignMessageRequest</span>{
        <span class="hljs-title">Msg</span>: <span class="hljs-title">closeRequest</span>.<span class="hljs-title">SignedClosures</span>[0].<span class="hljs-title">TxidBytes</span>,
    })
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not sign close request: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-comment">// Send the signed close request to the remote party.</span>
    <span class="hljs-title"><span class="hljs-keyword">_</span></span>, <span class="hljs-title">err</span> <span class="hljs-operator">=</span> <span class="hljs-title">closeChannelStream</span>.<span class="hljs-title">Send</span>(<span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">CloseStatusUpdate</span>{
        <span class="hljs-title">Update</span>: <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">CloseStatusUpdate_SignedClosingTx</span>{
            <span class="hljs-title">SignedClosingTx</span>: <span class="hljs-title">signedCloseReq</span>.<span class="hljs-title">Signature</span>,
        },
    })
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not send signed close request: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-comment">// Receive the fully signed close request from the remote party.</span>
    <span class="hljs-title">closeRequest</span>, <span class="hljs-title">err</span> <span class="hljs-operator">=</span> <span class="hljs-title">closeChannelStream</span>.<span class="hljs-title">Recv</span>()
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not receive fully signed close request: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-comment">// Broadcast the close transaction to the Bitcoin network.</span>
    <span class="hljs-title"><span class="hljs-keyword">_</span></span>, <span class="hljs-title">err</span> <span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">SendRawTransaction</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">SendRawTransactionRequest</span>{
        <span class="hljs-title">TxHex</span>: <span class="hljs-title">closeRequest</span>.<span class="hljs-title">SignedClosures</span>[0].<span class="hljs-title">TxidBytes</span>,
    })
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not broadcast close transaction: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-comment">// Wait for the channel to be closed and remove it from local storage.</span>
    <span class="hljs-title">waitCloseReq</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">WaitForFinishedRequest</span>{
        <span class="hljs-title">ChannelPoint</span>: <span class="hljs-title">channelPoint</span>,
    }
    <span class="hljs-title"><span class="hljs-keyword">_</span></span>, <span class="hljs-title">err</span> <span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">WaitForChannelClosed</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-title">waitCloseReq</span>)
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not wait for channel to close: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-title"><span class="hljs-keyword">_</span></span>, <span class="hljs-title">err</span> <span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">RemoveChannel</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">RemoveChannelRequest</span>{
        <span class="hljs-title">ChannelPoint</span>: <span class="hljs-title">channelPoint</span>,
    })
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not remove channel: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-title">fmt</span>.<span class="hljs-title">Println</span>(<span class="hljs-string">"Channel closed."</span>)
}</code></pre><div class="relative header-and-anchor"><h2 id="h-example-of-a-collaborative-close-transaction">Example of a Collaborative Close Transaction</h2></div><p>Transaction a3b23982331300ef8d23bd90b64e939758835515642a65ba64234bf2cae2ac7a is an example of a collaborative closure.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8bf6b534e171241c1810893b2af58303.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAIAAAAJNFjbAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAFN0lEQVR4nLWWa0xTZxiA+1MTjKxGWW2l0istR9qVXk49B3qxlJYe0hsthZ62tEJtlSItGdQogrKhoxEV4g9F7cwWiJsdbrhMZSPMoF1YSlhcFrdptiUm/jBRfzCX7c+39LJSuWw6MHly8uY9J+c53+W870do9rWfHR49OzwaOXUuGr0yMHSBTNuRR2ZvLORsLOTkkdmpGFpfwMhmNpBYafLI7HVE6voCRv6mIgJhcxrvSPhj8OUVMDEOpuuG/AQqXWCxtZgtfpt9v8HkNZi8xRJNsbKOK7eyyo28KgdU2QBVNvCqHFy5NX2FKht2aJ3ZmCu3liEGEoWXBlIqYYcpDVUkJjA4CpUat9raEMREY1YgiElv8OkNPl1NE4yYeHwtj6+lMSvSFO/Q7Cy3IoipsBAuLIRpzApTbUvJW1USbSaziCIWmhTw+NqKinoxbOSUqMSwEUWtYtgoRSyCMozH1wrKME6JKg0kwHgifW5GilggQXWpuDqbyYXBkSUFvsDx7t5oqGPIFziuNAeNwZNiad2ySFFci+0LHzxrtXdKUVyK4h3hM3pzWzpeCoOjSAoMJi/ubKfSYBKZrw/5hh98dr//4ndHhibCAyQyP5fkJ6/wrhUFRSyUBaleEig1RTyRXgjXpoN/jyl0CUGhNgjEyrz8bdl9tnrWEalv0PmbOKL1BQyCBsO7ek6XlMryicy1Yss2Hk2sLVbWbaKWJteAwV41HAWDvWvpq7Yzy5OCRSv5SmxnKyiMchJVsuzdzH9QwsTUZYEa6YFjdXcieOJow53Djum37ZOt+Bc+5zW3a8zu+qjWM6pzv6/ynFd5zmNNIzrHOVgRguVBiaRZKm5GRD6ZeK+8zC8TBpRlASHXIuRaGEWKlICt0IpDETwxexTcPQbAbQDiAMwA8A0ACfA4Dh4kQGIWTN0FE/fAjV/AxK/JYGIO3ImDS2eAu/5yEU250vgWBP34zILgdkrw7X8IErPJW4/j4Nkk+Lwf9HnmgoaYXx3VikM10gMSrpPFqMysQQkT04pDpp09A865QfcP/Y1z7+xOdLnjnU3TrU2TLb7J3f7rjsC4ee8n+raYvi1WH7refuTByGhG8Fc8NdyZ1NDj4M8L4NZB0I/PaMWh1S4yr6y+J/j9T7EXBGAE3Oh8UZAtlv8PBluBwh6v/mKPa+rE7oRbM+jDztfIwsJSS1KwIZ9KLGC+JjbkUwnt4d7xa19HPxwbvhS7cXN6aipx9dOvtpBYq68W3Br7mxBMoNAlEokxW6HWEInEmCx2DI6isy709MnY0ydj8/NX5+evPnk29sfv4w/vX3j08PKj3z74+VZfpC/S3Rvdtz+iUDWpzCFj6wDm7TUGT2J7+jBvL7anT+M4ZA6eklf7pSje3Rs9MXjF3XzkvdpQph9IUdxg8prNviQW/8L1H5Bye7bE79K36hyHsaajWkdY5zistR/U4V0qc0jjOITKXVIU9zS/2xIa1OgDNrVvQbCG1HfGpp6Dqecg9iNICoib2RSq8DVB3MwmdHVHbk7GE7P3iFvoa9hzCFlIZH6yjr8crFTjfPnnSRRepunTmegylUBQpal2LW76iMXZ2MHhrlhgmOyK9Pkh9empY4tG59fo/DKla9FGRsrtGp0/NyOEa3eiNoOlVaH2rLT9YcSabf0ZASqvrzG1KBQuSIDlIoRrZcoXkhmBcd/Sh3Of4Yn06TgjMFv8FlvL0sEKRNUqNU6hCrMZFpQ8+jkbO5yNHVZb27JTRCmWMYS6hSkq2AoVsdBc6MwVg1elYCv0N1JSFk9wB+L8AAAAAElFTkSuQmCC" nextheight="1351" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class=""><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="https://mempool.space/tx/a3b23982331300ef8d23bd90b64e939758835515642a65ba64234bf2cae2ac7a">https://mempool.space/tx/a3b23982331300ef8d23bd90b64e939758835515642a65ba64234bf2cae2ac7a</a></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-force-close">Force Close</h1></div><p>A force close happens when one of the parties is offline, so the other party unilaterally forces the channel to close. There are fewer steps in a force close because there aren't exchanges between parties since it's a one-person show.</p><div class="relative header-and-anchor"><h2 id="h-1-initiate-sign-and-broadcast-the-force-close">1. Initiate, Sign, and Broadcast the Force Close</h2></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/acb17fc6d085c346ab3c993c3290bb5a.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAZCAIAAADfbbvGAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEdklEQVR4nK2VbWgjRRjHJwSsJ7ZaDAbCISnaQ8XiC327Qgkp1S8eJ6Te0doKobnSfhGqhxYUEWtFhIJcPwo94QpesZzVuoSWRCklweSSJWnY2rAJaULCbLLLbnfCsku22azcjqavKYj9f9id7D7z/Ob570weoB9X9aDK87yqqpqmSZKkqmr9ealUqh5UdV2XZRlfeZ7HbyGEeCAIAh7gGF3XwdHsmqZtbm5ubGwQBOHz+ZLJ5OLi4u7urtdQKBTy+XwEQSwvLxMEEQ6Ht7a2/H5/JBIJh8N+vz8ej3u93qWlJa/X6/P5zgCclqZp+v/TIUCSpLVfVr3EGvbhogTwTZblt3rf6DE/9ioAnrGbp+NUVRVFUVEU0RDHcaIo8jwvCAJCqG59Q4BvY/06eOYu6LwHOt8F1vv37h4NEkUxlUqRJJlOpyORSDwe39vbi8Vi0Wi0UCjgGI7jFEVpCLj1/vDrVnDn1ksLEy92XwaffvJhoVCAEHIcJ8uyKIosy5IkubOzk8lkaEPZbDaZTO7s7BxdR0PA5zO3nwTggzefnrn2rO1x4NtYx74Vi8VKpVKr1SRJomma47hUKlUsFmma3t7eLhQKFEXhDNWDKsuyDQGaprmHh78ZeOHOtVemp6bqr2Vjs6uGSqVSKpViWZZhGI7jkskkz/OSJFUqFbzr9/f3GwL29vaeAMAD7B5gfwqAdDp9unBZliGE2WwWQpjL5bLZbD0jz/OiKFYqlYaA8fHx2+BKEQylwPWPwRW3212PQAhxHFc/0jRNx+NxiqIURSmXy7VaDX+k06mPAb776J2vb9i+HXh+Yey5BbdtfvrtE3EIIVEUEUIsy5bLZVxZuVxGCJ258JOAv/787eHlmzy4UQAuwjJABX49Z46maQihWq12TsxJgKIos+C1JXD1R3D1M/AyXuMFn2RwRBzHnRldLpftdnuvoYGBgd7e3vb2dpPJ5HA4enp6TIZsNtvg4KDFYjGZTJIkHVbQ2toKADCbza2trY2OPkIIANDc3Nzd3d3f39/U1AQAsFgsnZ2dGAAA6OjocDgcbW1tAIBDgK7rfX19IyMjbre7q6urkb+SJDkNDQ0NjY6O4rHL5ZqamvJ4PC6Xy+l0Tk5Oegw5nc5HxtQnW63WiYmJ6enpS5cuNTJU+fffZn9//2iVoVBoa2sLLyuXywUCgXw+j+MPAXa7fWZmZm5uzmq1ngMolUrJZDKRSEAIA4EAQkhRlEQiQZKkYghCGI1GIYT457EKZmdn5+fnm5qazgEghCCEDMPwPA8hxACGYSCEsiwriiIIQrFYFAThJMBsNq+srBAEAUDDNqcY82OxWDAYzGQyXq8XIaTreiwWq1tUKpXqFlUqlcNcLS0toijKsmw2m8+3iKZpiqIYhgkGg7gCiqJisVjdIpIkGYY5rKBWq5Gr6+Nj7+EsE+Puhz+tnbmRVKOv1VtFPp/HAGgIZxQEARuoKIqqqo8AXmLt+y+/+uP+A9zif19Z/eGLOeLnB43q+E/6x6ITjf4C+/7fUXHfMEvc8HkAAAAASUVORK5CYII=" nextheight="954" nextwidth="1244" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Below is the code (using the LND go implementation) to create the force close request. Notice that now the <code>Force</code> the field is marked true.</p><pre data-type="codeBlock" text="// Create the force close channel request
    request := &amp;lnrpc.CloseChannelRequest{
        ChannelPoint:       channelPoint,        
        Force:              true,
        TargetConf:         6,
        SatPerByte:         10,
        DeliveryAddress:    &quot;&quot;,
        ForceTargetChanId:  0,
        Anchors:            false,
    }"><code><span class="hljs-string">//</span> <span class="hljs-string">Create</span> <span class="hljs-string">the</span> <span class="hljs-string">force</span> <span class="hljs-string">close</span> <span class="hljs-string">channel</span> <span class="hljs-string">request</span>
    <span class="hljs-string">request</span> <span class="hljs-string">:=</span> <span class="hljs-string">&amp;lnrpc.CloseChannelRequest{</span>
        <span class="hljs-attr">ChannelPoint:</span>       <span class="hljs-string">channelPoint,</span>        
        <span class="hljs-attr">Force:</span>              <span class="hljs-literal">true</span><span class="hljs-string">,</span>
        <span class="hljs-attr">TargetConf:</span>         <span class="hljs-number">6</span><span class="hljs-string">,</span>
        <span class="hljs-attr">SatPerByte:</span>         <span class="hljs-number">10</span><span class="hljs-string">,</span>
        <span class="hljs-attr">DeliveryAddress:</span>    <span class="hljs-string">""</span><span class="hljs-string">,</span>
        <span class="hljs-attr">ForceTargetChanId:</span>  <span class="hljs-number">0</span><span class="hljs-string">,</span>
        <span class="hljs-attr">Anchors:</span>            <span class="hljs-literal">false</span><span class="hljs-string">,</span>
    <span class="hljs-string">}</span></code></pre><p>Below is the code (using the LND go implementation) to initiate the force close request. We are using the client to broadcast the close request here.</p><pre data-type="codeBlock" text="// Initiate the force close request
    response, err := client.CloseChannel(context.Background(), request)
    if err != nil {
        log.Fatalf(&quot;could not initiate force close: %v&quot;, err)
    }
    log.Printf(&quot;force close initiated: %v&quot;, response)"><code><span class="hljs-comment">// Initiate the force close request</span>
    response, err :<span class="hljs-operator">=</span> client.CloseChannel(context.Background(), request)
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not initiate force close: %v"</span>, err)
    }
    log.Printf(<span class="hljs-string">"force close initiated: %v"</span>, response)</code></pre><div class="relative header-and-anchor"><h2 id="h-2-wait-for-the-force-close-to-confirm">2. Wait ⏰ for the Force Close to Confirm</h2></div><p>With force close, the party initiating the close has a waiting period (time lock), giving the counterparty enough time to respond.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/499f1a0694ee9297ad847a782046771a.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAbCAIAAACSpRrNAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAEzUlEQVR4nK2Wb0gbZxzHH8bGRl90G5SKgs1I52TzxXw50P2FTYctE3HHoh0bdFoRfDGL6+iUiPNFpSB0fdEX2yqOQmjrsk7EPwwkJty8JrvUO5ZccpD7U8hdcuQu4UhyknD3jPq0lxijUNbvmzw8PM/v8/z+XgA8XPl8nqbp2J5wHFdVFcdxQRAURREEIRqNiqJI03QymUyn04IgcBx30Ag4AmCaZiAQoGma4ziSJDOZTCgUikajDMMIgrCzsxMIBHieJ0nS6/UGAoF0Ov10gCOk67qmablcLpvNapqmqqqiKGi9u7t7FCCfzx9mNJ/PsywbiUSi0SgyzbJsJpPRdT2ZTCYSiXK5DCFMp9OWZdUBPPgn9ME7bzcAMNB3tlQqHbRuGIbf72dZVpZlRVHC4TC3J5IkJUliGAbZNU1TURTTNPcBSqXSqReBG7wxC1qHQOO5zz/TdV1VVeQ+hFDTNAhhLBZjWTYUCtE0zTBMOBwWBIGiqIcPHzIMU/0gdL4CwANbDgAunDw98+FrXz9/6jkAKIrK5XKiKEIIRVFUFMW+jKIUDocJgqAoimXZGncty7LPPwbMTH1/DICp/hM/n2+aOPMqAECWZcMwVFVNJpPFYhE+jQqFQq0HS3c8bzkbW4+DOexEa8MLX2K9dqKy2Wz15XA4jIITiUQ4jkPxSSQSsixX59a+VUnyjRs3Rl9xXj3XgL10miAIe980TUmSUHXt7u6KoohqiSRJeU+CIPA8r+s6hDCVSqFbKHMVgK7rAIAh0HwagF5woq2trfrV2hN/VVVFlcPzfDQaTaVSkiTF43GO4xAAQqgoSiaTsevwMWB2dvY9cEwAZxPgzN/go9cB2NjYOAgIBoMEQcRiMYIgWJalaXpra4sgCIZh/H4/6gPbiX2A366Ofdt9fLarcbrn5LWvGsY+edm/fLMmadoTjA0LhUKo3u0q0DQNYWoB1JZ3pfeLOOgWwFkfePfOEJaIbFefg3thzOVyaF0zdmRZRnOixvq+JP/+5mAQfMyAT33g/T8Gv4P1VC6XkSFUwWhgZDIZu28PqgJwOBzgiXp6euCRYlmW53lrT9X7hmFIklQf0NraagP6+/sPM03TtMvlmpycdLvdLper+hsgy7LX60WZrwMYGBhobm52uVwtLS2XL1+ua90wDAzDSqVSPB5PpVLFYhHDMNsJNKDW19d9Pl8dQHd3t9PpXF5edjgcY2NjdQH37t1bWVmBEPr9/lgsBiFcWFjY3n5UDpZlra6u4jh+69YtVLi1AAzD0AgCAMzMzNQFLC4uLi0toSq6fv066v+1tTXLsgiC8Hg8hmEgVzweD2rmCqCvr6+pqenRFgBut7suQBTFS5cuoTXHcclkcnR0NJvNBoNBfE+bm5uKoni9XhzHka8VQFdXl9PpRIDx8fG6AAjh/Pz83NycKIqSJE1NTd389VE/MgwjSZLP57t9+zbDMD6fDyH3ATo7OwcHByGE7e3tIyMjhwEghARBXLx4cWJigqIoe5Pn+WAwWCgURFFMp9N2niuAjo6Ou3fvQginp6eHh4fhMxJAP+TKxvj5b9CLVldXfrwwyt5/8MwAf22szU9Pb/z0iyzLqEv/vHLtyuQP/1ZF4H8BIIT2FEMyTfOI/y9PBfgPeBuugmPB7x0AAAAASUVORK5CYII=" nextheight="954" nextwidth="1140" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><blockquote><p>Local and Remote Force Close</p><p>There are two types of forced closures, remote and local. It depends on who is initiating the forced closure. If you <strong>are initiating the forced closure, you are dealing with a local </strong>force close, and if you<strong> aren’t initiating the forced closure, then you are dealing with a remote </strong>force close.</p></blockquote><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1e102c97e94d8b763cbbd3f74efe497d.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAACoUlEQVR4nN2UTWgTQRiGBzyIQi6LEE9r6UVSDIUtRqGl0IuDXTBQUliUvekc5uCgc1loh+plFPYSkpWt6yFgD10MGzCiKzgIC4I38VKQ5hKEPTXXveQy0oymMYnx5+h7GPb7m+eb2ZkBckSdTkcIEQSB67pJkjDGkiSRM8U5D8MwCAKVPFkCRo1ut+s4juu6nHPXdSmlnPOxGTudzqiJMVYlaqSUMsamAzDGYRjO7ldKKYQYkkql0m/zTwAQQsuyxsK9o55hGO12exIQx/FYSMnzvNXV1SkAAICmaWPZaZoahjG6siHAcRwAACFkrMR1XQhh76j3EyCKItVUv98fzY4GfjWOASZDU/1ACGHbNh/IHogQok5CkiSEkGq1quv6cCsUoN1uY4w9zzMMw/M8FTJNk3NOKbUsy3EcjHEURSDLMoyxbdvlctk0TUJIpVKRv5b4sYJJcc4JIaZplsvlSqWCEOod9UCappZlua6LELJtG2PMGEvT9B8ACCHGGKVUzU4pFUKc/ORutxsEwYzefwsYavQq/K+AarWay+X+ClAqlRBCswBZlqnzyhjL5XIQwqnHSUwDhGGoaZqu64QQ9fxNAQx1cHCg6zrGGEL4h4BGo1EoFObn5+M4HgsdA/id29cWFzeWV9YWCjeuXtnd3pJSfnjVvru5SW/eWlsobCyvrC8tNes1BXi3v3/5wtzaQgEAMHfmNADg+aPHxxt77/6l/PmL57SzAJwCgFxf/w5o+X4cxwCAYrEohGj5vpSyWa/FcZzP58FACKEhoFmvZVkGISwWi5qmNRoNFVKFCCHDMPr9vjKPAbvbWy3fb9Zrwc6O+pBSHn7+1PJ9Zb58Fjx9+OB984V6X79+OVR+lRD5Tz6+eS2lfLu3Nyxp+b5a1jfTOVF7H6cegQAAAABJRU5ErkJggg==" nextheight="795" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>This time lock prevents the funds from being spent for a certain period. This time lock is known as the CSV (<a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="https://academy.bit2me.com/en/que-es-checksequenceverify-csv/">Check Sequence Verify</a>) value, and it ensures that both parties can dispute the force close and prevent fraud.</p><p>Below is the code (using the LND go implementation) to enforce the time-lock/CSV.</p><pre data-type="codeBlock" text="// Wait for the force close to be confirmed
    time.Sleep(10 * time.Minute)"><code><span class="hljs-comment">// Wait for the force close to be confirmed</span>
    time.Sleep(<span class="hljs-number">10</span> <span class="hljs-operator">*</span> time.Minute)</code></pre><p>In the Lightning Network, security is enforced, and honesty is incentivized using delays. The Lightening Network has two types of delays time-lock and revocation delays. If you want to dive deeper into those concepts, check out the article below:</p><div data-type="embedly" src="https://medium.com/coinmonks/lightning-network-delays-1208a463f9b6" data="{&quot;provider_url&quot;:&quot;https://medium.com&quot;,&quot;description&quot;:&quot;Delays in the Lightning Network are security measures that prevent inaccuracies and cheating from being published on the mainnet Bitcoin network. These built-in delays are called time-lock (sometimes...&quot;,&quot;title&quot;:&quot;Lightning Network &amp; Delays&quot;,&quot;mean_alpha&quot;:244.630718954,&quot;author_name&quot;:&quot;Mabel Oza&quot;,&quot;url&quot;:&quot;https://medium.com/coinmonks/lightning-network-delays-1208a463f9b6&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/86d6c2860e6822abdde2a1178c48413b.png&quot;,&quot;thumbnail_width&quot;:1200,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Medium&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:918,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAIAAAAUMWhjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFM0lEQVR4nG2VQeucPBDGhX6A9z33UFpY2p567BfusbSlPXTZ/dMiriiKooiRoCEhJEERDUpQKSvryzp9lx76O+Qg2ezMMzPPWJZl/fPPv+/fv3/37p218+rVq8Ph8Pz588Ph8OzZM+tvvHjx4vXr1y9fvjwcDm/fvv3rHcuy3rx5Y23bZozJ85wQsm3bMAxpmjLGyrKs67ppGq1113Va677vm6YZx7Hv+yzLuq5r27bv+7qu1Q58gctd1zVNs66r1fd927aUUsaY1ppzbtu253mu6zLGuq5TSomdruvGcTTGUEpt21ZKNTtt2yql2raFgJqmgb+s63oYhnsG67pmWQYZjOMY7KRpWu5UVVWWJUJIa73tGGN833ddN4qiPM89z7NtOwgCfyeO47IsCSEIoXmeLb2Dd4wxnHPf97MsC8Ow67ppmowx0w6IM46jEMJ1Xd/38zxHCCU7WZbleR5FUZqmWmu4fM/gdrut62qMWZYFalCWJWiCMZZSIoSklJRSrfW6rnAHYyyEUEphjOu6hlNK2batlJIQAq9t23aX6Ha7pWmKMd62TWtt23YcxxCU53lRFGVZBqHdbjeQ0fO8IAjiOA53XNeFDNI09X3ftu2yLIuiUErdJeq6bhiGtm2HYVBKlWXJOSeEQCxyh3NOKVVK9X0vpSzLEoqvlOKcM8aklJA3pRQhVBRFVVVN01jrup7P59Pp9P379yRJxnF0XRchBAXMdoqiSJIkCIIkSTjnfd//+PEDYgzDEAKHpqCUFkWBEAKd7xKN4xjH8cePH0+nE+dcSuk4DrzoeV4YhlEUBUHgeR7nHArOGPvy5Yvruo7jPD09eZ7nOE6e59Cv0KnQvlrre5Gv12uSJIwx0DeO4yzL6E5d16AA51wIwXcYY7Zt//z5M8/zqqryPIeGzrKsqqqiKKDp53n+nQF0BcZ4mqa6rvM8L4qCEAJvUUoJIZRSIURVVZzzqqocx4miSGs9z7P5A2hoaO5hGIwxv62CEMIYu91uxhjGGIw3zGfXdTCicIIIVVXVO0II+C6lhBOSHscR+tNalkUpBXIbY5qm8X0f0syyDGOMdoqiABEwxlVVhWGIMS6KIo7jYgcaHWOcZRlCSAgxTdN9kodhuFwuHz58cByHMUYIOR6Ptm2fTqfz+WzbNkx1GIae5wkh5nnmnDuOk6ap53mfP3++XC7n8/l4PMLEwCgEQVDX9b3I1+v1dDp9+/bt6ekpTVNjDMZYKQU1EEIsy/Lrf67XKwzjY9qh7CCLEAImBn5y27Hmec7z/HQ6HY9HIQQUHEYM5mhZluv1+ijdsixN0yCEKKWcc4RQVVVQfxiCJElAHGPMb4lA2aIooLwYY0KIUopSKqVkO+sOZABBwIt1XTPGHl0AhV3/wGrb1nXdNE3BCymlIHqSJGCr+W7IIBHk3rat7/tRFHmelySJbdtFUXiehxBalgXCB5ZlsWD1tG3bNM1jPYHZtm07jmNd13BKKZVS0zSBd0GAv379epzwOihpjBnHcZqmu9l9+vTp69evx526riHwKIoul0ue57Zt+75PCKmqSikFEsEMY4xhF8F6IYSUZQl7CXz3PsnzPMM9svPw+q7rQGIhRFmWfd9v23bdeRiw1npZlmEYwA5goU7TBNWCrrOmadJagycvyyKlDIIAY/xYT+M4LssCKUNjSCl93wf/geUKjhtFEcY4CIIwDMuyvFwuWZbdrUJrfblcgiC43W7DMIADB0EAfglWDOJA4lpr13WrqgqCgFL66Mg/WZYFivwfy52X4TshlmYAAAAASUVORK5CYII=&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:918,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/86d6c2860e6822abdde2a1178c48413b.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/86d6c2860e6822abdde2a1178c48413b.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://medium.com/coinmonks/lightning-network-delays-1208a463f9b6" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Lightning Network &amp; Delays</h2><p>Delays in the Lightning Network are security measures that prevent inaccuracies and cheating from being published on the mainnet Bitcoin network. These built-in delays are called time-lock (sometimes...</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://medium.com</span></div><img src="https://storage.googleapis.com/papyrus_images/86d6c2860e6822abdde2a1178c48413b.png"></div></a></div></div><div class="relative header-and-anchor"><h2 id="h-3-remove-the-channel">3. Remove the Channel</h2></div><p>After the time-lock expires, the channel closure is complete, and now we can remove the channel from local storage.</p><p>Below is the code (using the LND go implementation) to remove the channel from local storage.</p><pre data-type="codeBlock" text="// Remove the closed channel from the node's local storage
    _, err = client.RemoveChannel(context.Background(), &amp;lnrpc.RemoveChannelRequest{
        ChannelPoint: channelPoint,
    })
    if err != nil {
        log.Fatalf(&quot;could not remove channel: %v&quot;, err)
    }"><code><span class="hljs-comment">// Remove the closed channel from the node's local storage</span>
    <span class="hljs-keyword">_</span>, err <span class="hljs-operator">=</span> client.RemoveChannel(context.Background(), <span class="hljs-operator">&amp;</span>lnrpc.RemoveChannelRequest{
        ChannelPoint: channelPoint,
    })
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        log.Fatalf(<span class="hljs-string">"could not remove channel: %v"</span>, err)
    }</code></pre><div class="relative header-and-anchor"><h2 id="h-example-code-to-do-a-force-close">Example Code to do a Force Close</h2></div><pre data-type="codeBlock" text="package main

import (
    &quot;context&quot;
    &quot;log&quot;
    &quot;time&quot;
    &quot;github.com/lightningnetwork/lnd/lnrpc&quot;
    &quot;google.golang.org/grpc&quot;
)
func main() {
    // Create a connection to the LND instance
    conn, err := grpc.Dial(&quot;localhost:10009&quot;, grpc.WithInsecure())
    if err != nil {
        log.Fatalf(&quot;could not connect to LND: %v&quot;, err)
    }
    defer conn.Close()
    // Create a new LND client
    client := lnrpc.NewLightningClient(conn)
    // Define the channel point to be closed
    channelPoint := &amp;lnrpc.ChannelPoint{
        FundingTxid: &amp;lnrpc.ChannelPoint_FundingTxidStr{
            FundingTxidStr: &quot;FUNDING_TXID&quot;,
        },
        OutputIndex: OUTPUT_INDEX,
    }
    // Create the force close channel request
    request := &amp;lnrpc.CloseChannelRequest{
        ChannelPoint:       channelPoint,
        Force:              true,
        TargetConf:         6,
        SatPerByte:         10,
        DeliveryAddress:    &quot;&quot;,
        ForceTargetChanId:  0,
        Anchors:            false,
    }
    // Initiate the force close request
    response, err := client.CloseChannel(context.Background(), request)
    if err != nil {
        log.Fatalf(&quot;could not initiate force close: %v&quot;, err)
    }
    log.Printf(&quot;force close initiated: %v&quot;, response)
    // Wait for the force close to be confirmed
    time.Sleep(10 * time.Minute)
    // Remove the closed channel from the node's local storage
    _, err = client.RemoveChannel(context.Background(), &amp;lnrpc.RemoveChannelRequest{
        ChannelPoint: channelPoint,
    })
    if err != nil {
        log.Fatalf(&quot;could not remove channel: %v&quot;, err)
    }
    log.Println(&quot;force close complete&quot;)
}"><code>package main

<span class="hljs-keyword">import</span> (
    <span class="hljs-string">"context"</span>
    <span class="hljs-string">"log"</span>
    <span class="hljs-string">"time"</span>
    <span class="hljs-string">"github.com/lightningnetwork/lnd/lnrpc"</span>
    <span class="hljs-string">"google.golang.org/grpc"</span>
)
<span class="hljs-title">func</span> <span class="hljs-title">main</span>() {
    <span class="hljs-comment">// Create a connection to the LND instance</span>
    <span class="hljs-title">conn</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">grpc</span>.<span class="hljs-title">Dial</span>(<span class="hljs-string">"localhost:10009"</span>, <span class="hljs-title">grpc</span>.<span class="hljs-title">WithInsecure</span>())
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not connect to LND: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-title">defer</span> <span class="hljs-title">conn</span>.<span class="hljs-title">Close</span>()
    <span class="hljs-comment">// Create a new LND client</span>
    <span class="hljs-title">client</span> :<span class="hljs-operator">=</span> <span class="hljs-title">lnrpc</span>.<span class="hljs-title">NewLightningClient</span>(<span class="hljs-title">conn</span>)
    <span class="hljs-comment">// Define the channel point to be closed</span>
    <span class="hljs-title">channelPoint</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">ChannelPoint</span>{
        <span class="hljs-title">FundingTxid</span>: <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">ChannelPoint_FundingTxidStr</span>{
            <span class="hljs-title">FundingTxidStr</span>: <span class="hljs-string">"FUNDING_TXID"</span>,
        },
        <span class="hljs-title">OutputIndex</span>: <span class="hljs-title">OUTPUT_INDEX</span>,
    }
    <span class="hljs-comment">// Create the force close channel request</span>
    <span class="hljs-title">request</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">CloseChannelRequest</span>{
        <span class="hljs-title">ChannelPoint</span>:       <span class="hljs-title">channelPoint</span>,
        <span class="hljs-title">Force</span>:              <span class="hljs-title"><span class="hljs-literal">true</span></span>,
        <span class="hljs-title">TargetConf</span>:         6,
        <span class="hljs-title">SatPerByte</span>:         10,
        <span class="hljs-title">DeliveryAddress</span>:    <span class="hljs-string">""</span>,
        <span class="hljs-title">ForceTargetChanId</span>:  0,
        <span class="hljs-title">Anchors</span>:            <span class="hljs-title"><span class="hljs-literal">false</span></span>,
    }
    <span class="hljs-comment">// Initiate the force close request</span>
    <span class="hljs-title">response</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">CloseChannel</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-title">request</span>)
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not initiate force close: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-title">log</span>.<span class="hljs-title">Printf</span>(<span class="hljs-string">"force close initiated: %v"</span>, <span class="hljs-title">response</span>)
    <span class="hljs-comment">// Wait for the force close to be confirmed</span>
    <span class="hljs-title">time</span>.<span class="hljs-title">Sleep</span>(10 <span class="hljs-operator">*</span> <span class="hljs-title">time</span>.<span class="hljs-title">Minute</span>)
    <span class="hljs-comment">// Remove the closed channel from the node's local storage</span>
    <span class="hljs-title"><span class="hljs-keyword">_</span></span>, <span class="hljs-title">err</span> <span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">RemoveChannel</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">RemoveChannelRequest</span>{
        <span class="hljs-title">ChannelPoint</span>: <span class="hljs-title">channelPoint</span>,
    })
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
        <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not remove channel: %v"</span>, <span class="hljs-title">err</span>)
    }
    <span class="hljs-title">log</span>.<span class="hljs-title">Println</span>(<span class="hljs-string">"force close complete"</span>)
}</code></pre><div class="relative header-and-anchor"><h2 id="h-example-forced-close-transaction">Example Forced Close Transaction</h2></div><p>Transaction f9b48496a3b16693460a447a224b102d4fb3d38bb9473dc865fb5ce6e71761bd is an example of forced closure. There are key features</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/137fe265ec14a10b59a0e53adbdebf10.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAgCAIAAABhFeQrAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAE0ElEQVR4nK2Wf0wTVwDHmy3bksWE+QNbCq3e9bgWqgLt9Uq5Hz16pZTWA6y0JS2FQ86WonUVZVCHUB1DNP6KorAYBZnZHxgoQ8NmJonTGXVZzLK4/bMsWbJkf+6fZfvL5C3HsYoHSxSWfPJy75v3Prn3I+89Rap/6NMb05OZuZnZu1NTd5qjB9Q2t9rmVuGsVCpNjApnJQpsLqWJKSA8ShOTW0IrTcwmJaJQ5CoUubDTchPMj4Ppz8BtfvKgQqnetgW2ZdEiNgilIZTWopTsAzIwS0MNTEAoDSOE1EuL2LaipMTmgu0KDUy4vc11vmihnlLm7ajzRd3e5ko2aME5fREjhRLFpR7Kvjtb9XA8jBBGhzObZNEiNoXOwLTwR6PxAV5I2x0tzta+8ppYGeZbDoYHQpFUMNwtVYPhbrujZcWWEEorIJR2uiIE4YcQCkKoYKozGu7o5GJcrENKskjqV2HRi+P1OF6P6hmdgfHtPxBqaIvWtDrCPKpnlvJ6XsM2mypf/8Y7qrXz5lvqdarCdzfBb7+nVTjdwcFTI+s3omsnJ1cPkxzKBpVFFeI8aGFiLWgWkCWiV7lso7wieXCFUoOtvM9W6dVgapjRbLFrttghLS2hybdq8q15avOiVwdVmosChFEIEIO7bGmOSFfbjrAVPXTFIZI6bCESZeS+YrJdb48bmYS1ureM3Kcv86OFHsmbVb/sRahavO9C+KevDoLnowBMApABf2XA7zPg2Sy4Nwcyc2BiHox/Da4/BhPfgJFb4MwI4Nu+qPVeJMuTK45G7v370oJ36oX3wb/esXuL3ol5MZm/BbriT0tLww1VwxH3lVbXFYG9Vot/6MV6StBdWnHdEKpwK2stamJL97fQl5rs54PMGV/laY496a78yFl1nHamrdW9JlfKWN1t9vQ37P18dEwcx7NZcPs8YKzJlf9Xi9heexuoze3R+99nwG8z4M8M+PUyeNIPbnY8P+H/Lu68ThgFCKFW41UuQJYn586JXpARpw5Mg9kEuNj0cy3eJ3ohlM4vsKwaR8Wh3sb7V6N/nGh8nKr7sok5azU2i96cDfD6jWiuqjhbrp11OVpFuDk+evVGeuDs4MnhC5fHzw2PkXaPdLWsjgLKu9FIiOf67qo9pDdO+xIVCyXpjZPuGO1LlLN7MDzgrd8X2dNX7W3H8EC2TRZbdZT0JTE8UFWzNxRJcb6En2kR50FnYKJNbd/OH/vh3rGHc+lH8x//+GDglydDj+4O7KxrxfAAQUUcVUI5EcbwgEs47oikXMLxF7QcdYR7MDzgb+zq7v2EF9JJb0xnYEQv9mqnNYYHHOEepvEDh/+wI9wjlUxDJ9PQKQ0r1jEYiqSinjZUvyovs8CifQHJmzx8LhRJtbpe34v9NzjFX3wIRp6CU3cAUsKJ+yxXVfz/krMBViSSR66NTab6h9ayt1ZAPH/1bGGRU8bysMRcrzOId3ahkV3K8mTxHuLqY8tvLY+3DUZeSnaYa7n6GGX3y1oatzvk3aX3Di+khfYBgoosXQdeSPsbu2SLwwtpXkjLQn9j1/73T4ciKfm7pM4XNVt2yo4rC87BCLE0KS71sK6Qzx/3cHzBVks21+HyvuL/qjUmCKGy97PsY2lVZ2BkiaxZNlFrTP8AAG6cqRF31KsAAAAASUVORK5CYII=" nextheight="1570" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class=""><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="https://mempool.space/tx/f9b48496a3b16693460a447a224b102d4fb3d38bb9473dc865fb5ce6e71761bd">https://mempool.space/tx/f9b48496a3b16693460a447a224b102d4fb3d38bb9473dc865fb5ce6e71761bd</a></figcaption></figure><p>If you dig a little deeper and look at the lightning channel details, you can see that Bitcoin Revolution was the one that opened and closed the channel (<a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="https://mempool.space/lightning/channel/805523109340971008">704410x953x0</a>) unilaterally. Also, notice that the fees are considerably higher than a collaborative close. This transaction has a $0.67 fee, while the collaborative close (mentioned earlier) has a $0.06 fee. Force closes have higher fees because they use a time-critical pre-signed transaction.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8433f14f9225c6f16988dabb6ef3cf83.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAgCAIAAACDyf9SAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAFJUlEQVR4nK2U/28adRjHL/EHNTOZi7O2pYPBAVegQNcrV9gd5Uq5o3wvlB5fdnwpjNKjOztYSiktXQtlSmesi6mJztikjcsWjcZuiz8Yk5rYxTm3ZJkuLtlP/ugP/gs19BjDJm1wmrxyeT6fe98793ye5/MAbR2doLT3pLjnhEgFAG/+V0Lh1L2fH92+/e3Ozs79B4+3bm6/f+XTVrUBNHpO9BEC1NbW0fkv7C56Ez8sX/nrwcKfdxfYMdux49AL89rrAkAgQb0Ui6IevhCRKYwe76TTlXS6kt2wGerE+UKEL0QgmRE1BKKxWaH4NF+IaLWus8nCIBGSISapqqbhCxGBBAVEkH58osieX9GiPi3qG58ojsUKY7FCvzHcbwwrYbsStp/SuIfsDJO6hOG0ErbrhsaJyBwRyvfiIU7AUbXj8WF5t/V/gceHgWAklc2XL11em114dzpXksr6Go/2pVdaMdyhhvEhuy+eYGPRxHSuFImx+ypw5GiHDrPIVSjQpsA6Byho0CcngypHWE4G5WQQGvQJtVZx/3CX1q43uFtaoXaFntuXk8HOgZG9JyUngxKDV6i1qjAXJ6uWwulKDhj9J8VYI3IFAUoNXCwAMYEE9Xgn+3HqMJkErdrFE4s2d2rfQShhez0GIRyE8GZkgECC2h1JHKdBqaERuYKAZMbaEsJBKeYcTun7/ftkXSpzXVb7O7sjaXEmpQqyEZnaLFObuRiEcBGkP0gmfRbX7NweFsfpLpVZ3vUcGHEpVVYu5pL9h0xBcMCIq7qzFz+3C4ZmyKH4viy6VOZ6FqDUwMkGiWijTH3K2igDWtoUAgl6OC1tiiZlgAjST2VWs7NrDFtBdH6O0WBWj0frS4ncKJEbOVmCKSM6Px2ZXyiu05H5XOFjOjLPyWqVdXsnqEDabIny+DCHzR53eydAKcYtBRJUKD7tpdgAnR4kQjw+rNW6xuIzGq2r/gknqyZbHwkH0cpTtvKUfCHCE2nq8PdeNe5Uk6WCZ6dzpUx2aX5xJZsvT+dKx1rAF5jDJ/qItxQYIFYR5kjB5J8xjy0Qobw5UuACk3/G5J/hdjArc0rjPggMpyOxi6PBrEbrqg4oTa/zoJnDNXMz06mnZ29AgRC+NFH2z149s7geLm6Gi5ue9AcjU6vDqRVE56+s3vhs83uba7KysvTk4caThxu/P77+x9MbT+9/9PjR57gtpcNohq3Ek8VRMgFKsapdvSEOwehgLfRcHZMnbY0tGZyMFvMzbCUaK4bsTNUOUhJuKuOmMjbXpDkw3ow1ovMbvLFbu3e/2t35ZvdO+ss7H97ZvbS1K+0ZBqSyPqG4Vyju5Yu6T4p7+KJuDaxCEfWRox0vv8prnmPt8iPHQUCjIxk2n75QHE/lGDYfGctUZkcvz3tb28VH3xA1jwA2t3RqALCbNPjSHPqRKf3o27X4WaBzTPbioUNqqsWoAD1jc6fUPUT1zkZHzpOBHBnIWWNLFnqOoLIElTV50ojOH08Wz51/T49HjQ6WDOSqXRkpWGNLJk/aQs/hLhbtD09lVuPJYsgyUatsPJK8d7P0063SztcLv2wt/vpd+cHtoo+KH1TZ53a2FGeXYMpx+zO7ZkppjhRCy5tU/mq4uHlmcX04tRJa3rTQc3o8unFte+3qrcVAFoIM1UZxetIWx6SbyphGEk02ipPJvPPj9fL2teXtjVDhi/wnvzGVuxK1tXrJuJvEASmJZugecNhz56zTjO0C0+e8MBAoY/5Su0j3N94xbAHW6PXpAAAAAElFTkSuQmCC" nextheight="1434" nextwidth="1144" class="image-node embed"><figcaption htmlattributes="[object Object]" class=""><a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="https://mempool.space/lightning/channel/774506985784147968">https://mempool.space/lightning/channel/774506985784147968</a></figcaption></figure><div class="relative header-and-anchor"><h1 id="h-disputed-close">Disputed Close</h1></div><p>Previously in the force close, Alice had to wait (time-lock/CSV) to give the other party a chance to come back on and dispute. In this scenario, the other party returned online within the wait time (time-lock/CSV) and disputed the force close.</p><p>In this example, Bob noticed that Alice made a force close request to the network. Luckily, Bob has the wait time (time-lock/CSV) ⏰ to dispute her close.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8f1848bbc6ab00dec9d134208347f70f.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADpUlEQVR4nG2UT2gjVRzHX8U/IO7BpdnAuq3sQWQFeysVQVBwEVmklr1UKtjtopBLERSpYIWyUlAvRQiFFoqSw9JDepBQEkiW0MwwS4aGGZgZZxiG95iMhIwvT2ZIh6EZ3pPmtZPY7vcQ3ky+k8/8vr9ffkDTNHQhSZKOjo5EUZRludls8oOiKKnBMAxd1/lZURRBEGRZbjQa/Knj4+N6vS6KYurXNA0ghNiF8FCEkG63izH2fd+yrDAMUwN/jJ9PTk4QQq1WC0JoWVa73cYYu67b7XbH/f8DcA1OB+GFekMFQ1FKOSCOY8dxNE0zTdO2bQih53lxHAdBcOmnzgCu6x6W/ryTzf74/Zrrur7v93o9VVVd17Usy3Ecy7IIIbw+CKFt24QQy7JkWa7X6zwlwzC4gTF2/PTp8v1P/0buqIK3M5Mr4MXbAARB0Ol0MMYIIV3Xq9WqIAi+77vumTuOY13XHcfBGMdxbJpmo9HgdfASOeDXH75d//Le6oPlEeBW5pW7t8HNlwF/U0ppkiSD08HgdMAvGWNJklBK+UQEQcDTs22bp88vOan4x7Z08Evx8e8jwPIXy+8A8N6tt6IoIoR4nlcqlWq1WrlcPhpK13VCSBiGlmXxnvE+cVK/3+eJU0rjOJ6f/+Thw89+erQxAsy+BB6BG+8C4NgmISSO416vp2kahNBxHJ4PIYRS6rru1aEYl23bAIDvvl65+/7s4HRwDti///ljcOe3a7PBv/8wxvj88KAppRjjMAx5XONj+kypqvrC8+DDjz54843XwzA8B8x/fA8AMAEANxFCdnZ2JEmKoqjf73ue5/v+1f8BYyyKIt6hVN1uFwCQyd6YnnptFNHq6urExHMzMzPctLm5qShKuVxuNptJkhQKhVKp9EzA/v7+4eHhOCBJEgDAq9euZ65nRoBcLre4uDg9Pc0d29vboihCCPf29kRRVBQlnfRxAEKoWCwKgtDpdMYZAIB8Pj91c2oEWFlZ2djYmJycTCvQNG1ra8s0zWKxWKlU+Oc4oNPpFAqFVqtVq9V2d3cvRdRsNsEw8HPA0tKSaZpzc3NpmeVy2fO8tMPhxSymAIxxpVKpD3VwcDDe5GwmG0XRCFCtVtcefBVF0c/frAlPnjDG2u02X5aSJMmy7DiOrutRFF2KSFEUCKGmaYZh8G8ppQsLC/l8njGWy+XW19fPALIs/6UbCCHbtvkBIcQXpKIoqqqmu5fvj/H1ngoOdfW+qqr/ATLc3zvblTpiAAAAAElFTkSuQmCC" nextheight="696" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong><em>How would Bob dispute Alice's force close?</em></strong></p><p>Bob needs to publish the most recent state of the channel before the time lock expires. If Bob publishes the most recent state within the time-lock wait time, he can publish a <strong>justice transaction 🏛 👩‍ ⚖</strong>. The justice transaction <strong>🏛 👩‍ ⚖ </strong>will allow Bob to take everything.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aa331e557309095232d5091f74ec5f36.webp" alt="" blurdataurl="data:image/png;base64,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" nextheight="922" nextwidth="934" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong><em>What are justice transactions?</em></strong></p><p>Justice transactions <strong>🏛 👩‍ ⚖ </strong>use game theory to secure the lightning network, and if you're dishonest, you can lose it all, so the incentive of being dishonest must outweigh the risk of losing all your funds. <a target="_blank" rel="noopener" class="dont-break-out sg ip fe" href="https://medium.com/u/94b52ae5502e?source=post_page-----a11bbe4ed486--------------------------------">BitMEX</a> published research on the effectiveness of justice transactions.</p><div data-type="embedly" src="https://bitcoinmagazine.com/technical/bitmex-research-confirms-lightning-justice-works?source=post_page-----a11bbe4ed486--------------------------------" data="{&quot;provider_url&quot;:&quot;https://bitcoinmagazine.com&quot;,&quot;description&quot;:&quot;BitMEX Research has confirmed that the Lightning Network's Justice Transactions system can effectively prevent cheating.&quot;,&quot;title&quot;:&quot;BitMEX Research Confirms Lightning 'Justice' Works&quot;,&quot;author_name&quot;:&quot;Vlad Costea&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://bitcoinmagazine.com/technical/bitmex-research-confirms-lightning-justice-works&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/f526a6ab78bd2a98885792164cf5cf50.jpg&quot;,&quot;author_url&quot;:&quot;https://bitcoinmagazine.com/authors/vladcostea&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Bitcoin Magazine - Bitcoin News, Articles and Expert Insights&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:794,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,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&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:794,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/f526a6ab78bd2a98885792164cf5cf50.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/f526a6ab78bd2a98885792164cf5cf50.jpg"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://bitcoinmagazine.com/technical/bitmex-research-confirms-lightning-justice-works?source=post_page-----a11bbe4ed486--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>BitMEX Research Confirms Lightning 'Justice' Works</h2><p>BitMEX Research has confirmed that the Lightning Network's Justice Transactions system can effectively prevent cheating.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://bitcoinmagazine.com</span></div><img src="https://storage.googleapis.com/papyrus_images/f526a6ab78bd2a98885792164cf5cf50.jpg"></div></a></div></div><blockquote><p><strong>When does 🏛 👩‍ ⚖ justice transactions happen?</strong></p><p>After the breach close transaction is confirmed on the Bitcoin network, the channel will enter into the “Pending Force Close” state.</p><p>At this point, the justice transaction will be broadcasted by the LND node to claim the channel’s funds and penalize the counterparty.</p></blockquote><div class="relative header-and-anchor"><h2 id="h-example-code-of-a-dispute-close-transaction">Example Code of a Dispute Close Transaction</h2></div><p>The code below walks through the steps Bob needs to take using the LND implementation in Go.</p><pre data-type="codeBlock" text="import (
 &quot;context&quot;
 &quot;log&quot;
 &quot;github.com/lightningnetwork/lnd/lnrpc&quot;
 &quot;google.golang.org/grpc&quot;
)
func main() {
 // Create a connection to the LND instance
 conn, err := grpc.Dial(&quot;localhost:10009&quot;, grpc.WithInsecure())
 if err != nil {
  log.Fatalf(&quot;could not connect to LND: %v&quot;, err)
 }
 defer conn.Close()
 // Create a new LND client
 client := lnrpc.NewLightningClient(conn)
 // Define the channel point to be disputed
 channelPoint := &amp;lnrpc.ChannelPoint{
  FundingTxid: &amp;lnrpc.ChannelPoint_FundingTxidStr{
   FundingTxidStr: &quot;FUNDING_TXID&quot;,
  },
  OutputIndex: OUTPUT_INDEX,
 }
 // Create the breach close transaction request
 request := &amp;lnrpc.BreachCloseChannelRequest{
  ChannelPoint: channelPoint,
  SweepAddress: &quot;YOUR_SWEEP_ADDRESS&quot;,
 }
 // Generate the breach close transaction
 response, err := client.BreachCloseChannel(context.Background(), request)
 if err != nil {
  log.Fatalf(&quot;could not generate breach close transaction: %v&quot;, err)
 }
 log.Printf(&quot;breach close transaction generated: %v&quot;, response)
 // Broadcast the breach close transaction to the network
 _, err = client.PublishTransaction(context.Background(), &amp;lnrpc.PublishTransactionRequest{
  Transaction: response.SignedTransaction,
 })
 if err != nil {
  log.Fatalf(&quot;could not publish transaction: %v&quot;, err)
 }
 log.Println(&quot;breach close transaction published to network&quot;)
 // Wait for the breach close transaction to be confirmed
 // TODO: implement waiting code
 log.Println(&quot;dispute complete&quot;)
}"><code><span class="hljs-keyword">import</span> (
 <span class="hljs-string">"context"</span>
 <span class="hljs-string">"log"</span>
 <span class="hljs-string">"github.com/lightningnetwork/lnd/lnrpc"</span>
 <span class="hljs-string">"google.golang.org/grpc"</span>
)
<span class="hljs-title">func</span> <span class="hljs-title">main</span>() {
 <span class="hljs-comment">// Create a connection to the LND instance</span>
 <span class="hljs-title">conn</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">grpc</span>.<span class="hljs-title">Dial</span>(<span class="hljs-string">"localhost:10009"</span>, <span class="hljs-title">grpc</span>.<span class="hljs-title">WithInsecure</span>())
 <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
  <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not connect to LND: %v"</span>, <span class="hljs-title">err</span>)
 }
 <span class="hljs-title">defer</span> <span class="hljs-title">conn</span>.<span class="hljs-title">Close</span>()
 <span class="hljs-comment">// Create a new LND client</span>
 <span class="hljs-title">client</span> :<span class="hljs-operator">=</span> <span class="hljs-title">lnrpc</span>.<span class="hljs-title">NewLightningClient</span>(<span class="hljs-title">conn</span>)
 <span class="hljs-comment">// Define the channel point to be disputed</span>
 <span class="hljs-title">channelPoint</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">ChannelPoint</span>{
  <span class="hljs-title">FundingTxid</span>: <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">ChannelPoint_FundingTxidStr</span>{
   <span class="hljs-title">FundingTxidStr</span>: <span class="hljs-string">"FUNDING_TXID"</span>,
  },
  <span class="hljs-title">OutputIndex</span>: <span class="hljs-title">OUTPUT_INDEX</span>,
 }
 <span class="hljs-comment">// Create the breach close transaction request</span>
 <span class="hljs-title">request</span> :<span class="hljs-operator">=</span> <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">BreachCloseChannelRequest</span>{
  <span class="hljs-title">ChannelPoint</span>: <span class="hljs-title">channelPoint</span>,
  <span class="hljs-title">SweepAddress</span>: <span class="hljs-string">"YOUR_SWEEP_ADDRESS"</span>,
 }
 <span class="hljs-comment">// Generate the breach close transaction</span>
 <span class="hljs-title">response</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">BreachCloseChannel</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-title">request</span>)
 <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
  <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not generate breach close transaction: %v"</span>, <span class="hljs-title">err</span>)
 }
 <span class="hljs-title">log</span>.<span class="hljs-title">Printf</span>(<span class="hljs-string">"breach close transaction generated: %v"</span>, <span class="hljs-title">response</span>)
 <span class="hljs-comment">// Broadcast the breach close transaction to the network</span>
 <span class="hljs-title"><span class="hljs-keyword">_</span></span>, <span class="hljs-title">err</span> <span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">PublishTransaction</span>(<span class="hljs-title">context</span>.<span class="hljs-title">Background</span>(), <span class="hljs-operator">&amp;</span><span class="hljs-title">lnrpc</span>.<span class="hljs-title">PublishTransactionRequest</span>{
  <span class="hljs-title">Transaction</span>: <span class="hljs-title">response</span>.<span class="hljs-title">SignedTransaction</span>,
 })
 <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
  <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"could not publish transaction: %v"</span>, <span class="hljs-title">err</span>)
 }
 <span class="hljs-title">log</span>.<span class="hljs-title">Println</span>(<span class="hljs-string">"breach close transaction published to network"</span>)
 <span class="hljs-comment">// Wait for the breach close transaction to be confirmed</span>
 <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> implement waiting code</span>
 <span class="hljs-title">log</span>.<span class="hljs-title">Println</span>(<span class="hljs-string">"dispute complete"</span>)
}</code></pre><div class="relative header-and-anchor"><h2 id="h-watch-tower">🗼Watch Tower</h2></div><p>In the scenario described above, Bob had to check the status of his payment channel continuously, or it might have been luck that he caught Alice the one time he checked his payment channel.</p><p>In most scenarios, it's advisable to use a watch tower to automate the monitoring of your payment channel and, in the case of fraudulence, publish the most recent state and a justice transaction. The watchtower does everything Bob was doing in the previous scenario.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/53cb2f67a10fdc34789e4767ca391a89.webp" alt="" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAPoAAAD6AG1e1JrAAADoElEQVR4nGWUQWjsRBiA5+JJevG07ygWT6Liu+ixF12QepKeBfFQ8FBa3K5QaC89tCCFklMKhWBZ2WWhxbr1hWVD15dQMi82b0PC1oyJayRxlxiHOOuGLgkjzbTptn6nyZ/JfPn/+WeApmnOHbIsi6LY7XYvLi66OYqizE6wLEvXdcdxEEKO46iqKoqiLMts0Ol0FEUpJjuO0+v1gOM49I5hThiGQRAMh8MgCEzTJIQUE9hnxeNkMvF9H2PseZ5t2/1+3zCM+A5CiOM4DwSMJEmKSWEOxjiKIiZwXTd6efnX5c/hixfx1VX08vJPRSaEYIzNHMMwEEJBENwLvjv69gkAX69/NRgMWAaaprmua5qm4zimacZxzPJjAvzLlffj2W9nP/zaaPx++v2/vs+ytHI8zzNNM03Te8ETAMoAvAoAxtj3/eFwiBDSdV0UxfPzc9/3Pc+jlI7HY6aklKqyfAWh3Go9F59RSkkOy8D3fcuy/Nx6KwAAvP8aeAUA9qdZlqU50+tplkMpTdM0yzK2w5RSjuO2trYEQVhdXWWC2V1k43vBxx+W3wXgvdLrhJA4jl3XbTQa7Xb7+Pj47Oys0+kYhhFFURzH/X6fCQ4ODpo5u7u7bK0oimzbdl0XIWTbdhiG94I3APgSgLcA+GPgYoyTJBmNRpqm2baNEBoMBpTSKIqyLCu6SFXVw8PDZrNZr9dZO2GMp9dTjDGZ4UaAEOI++OgbUNoAb/6D/6aUYozjOB6NRtPraZqmo9EojuPp9XS2TVVV1XUdQtjpdIr2i6JIVdXZyG0GT99+B+SwaBiGe3t7EMLxeEwI8TwvDMNH50CSJFEUG41GsdxkMgnDcHl5eWVlpdiSW8HS0hIAYH5+nkWr61VN0wRB6PV6aZryPH9ycsJeua7LBMW6xYAQcnR0VF2vViqVIAgeCBYXF8vlcqlUYvXheb7dbnuex3GcJEkQQlEUWacWgnq9zjaZ5/miIIIgcBxXq9U2NjYeCMrl8tra2tzcHItWKhWE0ObmJkJIEIRWq8XzvCRJsyXa399ngu3t7ULQbre73a4oitX1KqvqrWBhYQEhVJQoSZJarcZ+OQgCjHEYhuPxeFbA8zwT7OzsFIJms3mSU6R1Izg9Pf3ik0/TNF377HPl+U9FHSCEiqJACA3DsCwrSZL/X3YMy7IghLZtW5b16NWNQJKk3uXN+TRNkw2Km1mWZQjho+v3UYRd3ezEsDt8Fl3X/wPvl+bOkTQ5igAAAABJRU5ErkJggg==" nextheight="694" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><blockquote><p>🗼<strong>What is a Watchtower?</strong></p><p>Watchtower is a lightning node that watches the chain on behalf of a 3rd party that can send justice transactions when it detects a breach.</p><p>🗼<strong>How the Watchtower knows it should dispute the close?</strong></p><p>Every time the channel’s state is updated (Bob and Alice transact on the channel), Alice and Bob contact the watchtower with a status update.</p><p>The status update has a fixed-size encrypted blobs and is only able to decrypt and publish the justice transaction after the offending party has broadcast a revoked commitment state.</p><p><strong>🗼Could the Watchtower eavesdrop?</strong></p><p>Client communications with a watchtower are encrypted and authenticated using ephemeral (temporary) keypairs, mitigating the amount of tracking the watchtower can perform on its clients using long-term identifiers.</p></blockquote><p>Below is code using LND implementation in Go to implement a watchtower.</p><pre data-type="codeBlock" text="import (
 &quot;github.com/lightningnetwork/lnd/watchtower/client&quot;
)
// create a client config with the necessary parameters
config := client.Config{
    DialAddr:        &quot;localhost:9911&quot;,
    PubKey:          pubkey,
    PrivKey:         privkey,
    ChainHash:       chainhash,
    DB:              db,
    SessionBackup:   sessionBackup,
    SweepFeeRate:    sweepFeeRate,
    RewardAddress:   addr,
    Resolver:        resolver,
    Net:             net,
    EpochRegistrar:  epochRegistrar,
    DebugLogger:     logger,
    ErrorLogger:     logger,
}
// create a new watchtower client
watchtowerClient, err := client.New(config)
if err != nil {
    log.Fatalf(&quot;unable to create watchtower client: %v&quot;, err)
}
// create a new breach observer to watch for channel breaches
observer := watchtower.NewBreachObserver(watchtower.BreachObserverConfig{
    Backend:   backend,
    ChainHash: chainhash,
})
// start the observer and begin watching for breaches
if err := observer.Start(); err != nil {
    log.Fatalf(&quot;unable to start observer: %v&quot;, err)
}"><code><span class="hljs-keyword">import</span> (
 <span class="hljs-string">"github.com/lightningnetwork/lnd/watchtower/client"</span>
)
<span class="hljs-comment">// create a client config with the necessary parameters</span>
<span class="hljs-title">config</span> :<span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">Config</span>{
    <span class="hljs-title">DialAddr</span>:        <span class="hljs-string">"localhost:9911"</span>,
    <span class="hljs-title">PubKey</span>:          <span class="hljs-title">pubkey</span>,
    <span class="hljs-title">PrivKey</span>:         <span class="hljs-title">privkey</span>,
    <span class="hljs-title">ChainHash</span>:       <span class="hljs-title">chainhash</span>,
    <span class="hljs-title">DB</span>:              <span class="hljs-title">db</span>,
    <span class="hljs-title">SessionBackup</span>:   <span class="hljs-title">sessionBackup</span>,
    <span class="hljs-title">SweepFeeRate</span>:    <span class="hljs-title">sweepFeeRate</span>,
    <span class="hljs-title">RewardAddress</span>:   <span class="hljs-title">addr</span>,
    <span class="hljs-title">Resolver</span>:        <span class="hljs-title">resolver</span>,
    <span class="hljs-title">Net</span>:             <span class="hljs-title">net</span>,
    <span class="hljs-title">EpochRegistrar</span>:  <span class="hljs-title">epochRegistrar</span>,
    <span class="hljs-title">DebugLogger</span>:     <span class="hljs-title">logger</span>,
    <span class="hljs-title">ErrorLogger</span>:     <span class="hljs-title">logger</span>,
}
<span class="hljs-comment">// create a new watchtower client</span>
<span class="hljs-title">watchtowerClient</span>, <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">client</span>.<span class="hljs-title">New</span>(<span class="hljs-title">config</span>)
<span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-title">nil</span> {
    <span class="hljs-title">log</span>.<span class="hljs-title">Fatalf</span>(<span class="hljs-string">"unable to create watchtower client: %v"</span>, <span class="hljs-title">err</span>)
}
<span class="hljs-comment">// create a new breach observer to watch for channel breaches</span>
<span class="hljs-title">observer</span> :<span class="hljs-operator">=</span> <span class="hljs-title">watchtower</span>.<span class="hljs-title">NewBreachObserver</span>(<span class="hljs-title">watchtower</span>.<span class="hljs-title">BreachObserverConfig</span>{
    <span class="hljs-title">Backend</span>:   <span class="hljs-title">backend</span>,
    <span class="hljs-title">ChainHash</span>: <span class="hljs-title">chainhash</span>,
})
<span class="hljs-comment">// start the observer and begin watching for breaches</span>
<span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">err</span> :<span class="hljs-operator">=</span> <span class="hljs-title">observer</span>.<span class="hljs-title">Start</span>(); err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
    log.Fatalf(<span class="hljs-string">"unable to start observer: %v"</span>, err)
}</code></pre><div class="relative header-and-anchor"><h1 id="h-in-a-trusting-world-would-we-only-use-collaborative-closes">In a Trusting World, Would We Only Use Collaborative Closes?</h1></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5dd88b7b70c83e1262e6d9f31cdb4c6b.webp" alt="" blurdataurl="data:image/png;base64,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" nextheight="788" nextwidth="1400" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Photo by <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="https://unsplash.com/@miinyuii?utm_source=medium&amp;utm_medium=referral">Duy Pham</a> on <a target="_blank" rel="noopener ugc nofollow" class="dont-break-out af on" href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Most likely, you will deal with forced closes. Collaborative closes require both nodes to always be up and running, and synchronization between the two nodes after transactions are complete.</p><p><strong>Constant Node Uptime is Unrealistic</strong></p><p>With node issues, network, and power outages, node uptime is a major issue. This isn't just a Bitcoin or Blockchain node issue but a major issue in tech; even giants like Amazon and Google cloud providers face these issues.</p><p><strong>Channel Nodes are Not Always in Communication</strong></p><p>There's a chance that one of the nodes in a payment channel goes MIA (missing in action). They may want their funds but forgot to close the channel or abandoned their node altogether. Think about all those unclaimed funds in your Venmo account. I know I am not the only one letting them sit there. Even though the other party may be happy to let their funds sit in the channel, the other party may have a greater urgency to close.</p><div class="relative header-and-anchor"><h1 id="h-hooked-dive-into-the-rabbit-hole">📚Hooked? Dive into the Rabbit Hole</h1></div><p><strong>BOLT Rules on Closing Transactions</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/lightning/bolts/blob/d975de1ba5d3e8aca586154ae0cae8f1b3181495/02-peer-protocol.md?source=post_page-----a11bbe4ed486--------------------------------#channel-close">https://github.com/lightning/bolts/blob/d975de1ba5d3e8aca586154ae0cae8f1b3181495/02-peer-protocol.md?source=post_page-----a11bbe4ed486--------------------------------#channel-close</a></p><p><strong>Bitcoin Lightning Transactions &amp; Protocol Deep Dive</strong></p><div data-type="youtube" videoid="to8XItlplac">
      <div class="youtube-player" data-id="to8XItlplac" style="background-image: url('https://i.ytimg.com/vi/to8XItlplac/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=to8XItlplac">
          <img src="https://paragraph.xyz/editor/youtube/play.png" class="play">
        </a>
      </div></div><p><strong>Ligthning Engineering</strong></p><div data-type="embedly" src="https://docs.lightning.engineering/the-lightning-network/payment-channels/lifecycle-of-a-payment-channel?source=post_page-----a11bbe4ed486--------------------------------" data="{&quot;provider_url&quot;:&quot;https://docs.lightning.engineering&quot;,&quot;description&quot;:&quot;At its core, a payment channel is a 2-of-2 multisignature contract between two parties holding bitcoin. While this bitcoin is held cooperatively by the two parties from the perspective of the Blockchain, each party owns a portion of it, and maintains a record of this ownership locally.&quot;,&quot;title&quot;:&quot;Lifecycle of a Payment Channel | Builder's Guide&quot;,&quot;url&quot;:&quot;https://docs.lightning.engineering/the-lightning-network/payment-channels/lifecycle-of-a-payment-channel&quot;,&quot;thumbnail_width&quot;:96,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/d3a6d9afa2dc4609d00b9a047ade3064.jpg&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Lightning&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:96,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD6klEQVR4nK2WfUwTZxjAn2ivjkzNXKYumuiMGsyYjqhhxoiJLsZCtRZoh0SI2JDaxo9AjeCWQKVm/IEEYigVNVPROJWsbkFkH0QxXYMoUdmiUmWKChS1lBbox9Heve9yd7XxA3pX6ZvLNen1fX9Pf8/zvs8BjnJQFI0xvtVsK86tC5AB3t9DVKsjxNw97tGFsCN33WH2GxQrAEIYU0EKY7w3zbgAch39I/3dLt9wIGb/gGLl/HG+nQCp5fK91j8fLIVd/3W8wBjT7KMJARCrwmn3zIGcfcpjfm9wEezYHrY0vidBAPQ6fNWGivjJKhRABek18yF36KU/nJgJASiKUf9LrZUA6a1rj67/9o8IUq/W32UeBceVIxSA2Aj7n7o+gyyD+ox/KDgXsgsUJnZ1KoIcYQCEEGLCz1r1Y+IUDUZ458bKeMjzuEeF1Cg/gGLlnK1sFsOmzvbehrpWAlIsjfe5ouJfPjKAC/CZzTEVlId1F90DvhnwXYnqdEgOrx0eAAoBZAnFa2bnY4wzvzm0/GNtgKTfKs03KSgaALdpjxuaxLD5+SPHheoWAuR3/34c3nHcoCkUYZeNC+DmdLb3ECA/fujKgH3kE8g0aBk5Ho/X7/OTJOn3+dyu4ddpRlEAQnMQXj9//4aFRSiIpEt+ICApQaROjNMsm6JJjNMsn6ZdAnnHSpswxvZuJ2dUGACFDFQVmmdCZm/XYMBP/XqiteFUW73xOnPVWOqPWn4+cvV0efPggE8jqdotNYaV8gO4xHZYu8SQOg+ytJKqvG8rCuQ1e+VGXZqpIM2kU5j2yKr1OWdID2WutYog5UbTgwjn3dgAW8fTXalHspPLlCsPZiaVKlaUpDOXPn2FXrFSL4k/UK67+NzmFEFGVZG597GjaOtJvzfICeDPAU+Bo9Cn7KvitXPygyS9Znb+loSD480bG8CNMWEU6/qovmEyyOxPnBU680eg7GPzPKalaFsmYgTe7iNAfqKsyXa7VwzS88aWCMdqFACEQtW4bkGhJP57FETLCE1Ocvk7W++DAYiTU1l4SQRbXvUMG9R1M2Gbo28oNi2TZo/Vfy3dYth8wdjSfq1LDBsv/WSNHL7glomYe4CkV8/ao0wqpUl6Mai0KdUxe22h2BgNmnPTIcP1yqdTmL6AnMH+odgAaHb1tubOSSBrrLt54/dOMaT+VX/nPTkCz6K3B2ID9A6Pfh23c3tyGTlCfQ7ZuoxaDjzRjhYOv0R18lPYSnootaTyy0lqr5sU2JCF5qDxXOvDOz1XzrYRsMlymWnIkZtMdAAuUnu3czooS1SneOsyagAXrLnWmr26bMTl432VewfwP+1FwwWU11zvAAAAAElFTkSuQmCC&quot;,&quot;img&quot;:{&quot;width&quot;:96,&quot;height&quot;:96,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/d3a6d9afa2dc4609d00b9a047ade3064.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/d3a6d9afa2dc4609d00b9a047ade3064.jpg"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://docs.lightning.engineering/the-lightning-network/payment-channels/lifecycle-of-a-payment-channel?source=post_page-----a11bbe4ed486--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Lifecycle of a Payment Channel | Builder's Guide</h2><p>At its core, a payment channel is a 2-of-2 multisignature contract between two parties holding bitcoin. While this bitcoin is held cooperatively by the two parties from the perspective of the Blockchain, each party owns a portion of it, and maintains a record of this ownership locally.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://docs.lightning.engineering</span></div><img src="https://storage.googleapis.com/papyrus_images/d3a6d9afa2dc4609d00b9a047ade3064.jpg"></div></a></div></div><p><strong>L.N. Guide</strong></p><div data-type="embedly" src="https://bitcoiner.guide/lightning/?source=post_page-----a11bbe4ed486--------------------------------" data="{&quot;provider_url&quot;:&quot;https://bitcoiner.guide&quot;,&quot;description&quot;:&quot;A beginners guide to the Lightning Network&quot;,&quot;title&quot;:&quot;Lightning Guide&quot;,&quot;mean_alpha&quot;:92.75,&quot;author_name&quot;:&quot;QnA&quot;,&quot;url&quot;:&quot;https://bitcoiner.guide/lightning/?source=post_page-----a11bbe4ed486--------------------------------&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/9e1c8617d513e56df6583f02e1bcda19.png&quot;,&quot;thumbnail_width&quot;:1920,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Bitcoiner.Guide&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:1080,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAMnRFWHRDb21tZW50AHhyOmQ6REFGZkZMM2JEb2c6NSxqOjIwODI5MTQ5MTIsdDoyMzA0MDMyMOElz6oAAAHWSURBVHic7ZPNaxNBGMZHkizrzL4zk/nKpmZFNhYRjHixHyZZkwatkpZ02yZxTdNQFwK1LcSDiGClFL3poRf/KC/+N3qMpFEPvcSW5qTwHN534OEHz/sMcpiaqtA/BmB8pGkBKFdX7JEonwKAMoVsdSevC75G9mi9TADjCllmqSCHXwfDb2+WCgpZkglzQQAGgUFQPvLj00EIgxLubgUPf3wZfj/ZrQJCygH+x0J+ZWj+CsCVy5WbsKjDVFpnExZNWYCSlLL08br4ENKrBIBnbvizNuEpm6VsxpWLQaAkTABQbmzCy0FtfqG0/HSlHXVfxP3NZqsRNsOwudl6/qBaX6yu3F8olYNqK+rMzReL5craRrsVdbe6O+WgahE2AYCSsNrYaLajo+OPb9+9ry3X4/5eY/1ZK+odDF7XHtc/fT7pbMeFe3Od7Tju7+0fvHq5P+j14sPDo63uDkrCmaDORoRByMw1k/VKQWWx+BCAz153817Gz6m8Z256qrn6KHwS5HPy7i3/tj+TnfFsIrWbO8cNbMJtwlESUMKhXAkhhZBKKSmk0RIIYQBaaZEWUkgM6bFlXI1z1JRy87tIGoMmp1XBoIEZwsz4BYO+tI/mXFT/Ac4kwE88jJpYSpEcLwAAAABJRU5ErkJggg==&quot;,&quot;img&quot;:{&quot;width&quot;:1920,&quot;height&quot;:1080,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/9e1c8617d513e56df6583f02e1bcda19.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/9e1c8617d513e56df6583f02e1bcda19.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://bitcoiner.guide/lightning/?source=post_page-----a11bbe4ed486--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Lightning Guide</h2><p>A beginners guide to the Lightning Network</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://bitcoiner.guide</span></div><img src="https://storage.googleapis.com/papyrus_images/9e1c8617d513e56df6583f02e1bcda19.png"></div></a></div></div><p><a target="_blank" rel="noopener" class="dont-break-out sg ip fe" href="https://medium.com/u/93b8b62c15d8?source=post_page-----a11bbe4ed486--------------------------------"><strong>Raphael Osaze Eyerin</strong></a><strong> Lightening Payment Channel</strong></p><div data-type="embedly" src="https://raphtyosaze.medium.com/lightning-payment-channels-138f72e90faa" data="{&quot;provider_url&quot;:&quot;https://raphtyosaze.medium.com&quot;,&quot;description&quot;:&quot;Payment channels are the backbone of the Lightning Network as they enable the sending and receiving of off-chain payments. A payment channel is a trustless duplex financial relationship between two...&quot;,&quot;title&quot;:&quot;Lightning Payment Channels&quot;,&quot;author_name&quot;:&quot;Raphael Osaze Eyerin&quot;,&quot;url&quot;:&quot;https://raphtyosaze.medium.com/lightning-payment-channels-138f72e90faa&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/cd9ef044b75da5fe6aeee02fb58cad35.jpg&quot;,&quot;thumbnail_width&quot;:1200,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Medium&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:750,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAUCAIAAABj86gYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC3klEQVR4nNVVX0hTYRQ/6IsPgsjQhF4CISWrh/Iv5UjF0cSp27I9FEGCwUbzbre17cpV15R0+tKTPmgIi+xJwiGr0MDI2lyboMxgpcxASlebOqdNt3u/uLvDP3MqPWh0+PE9/M75ncPvfPfjAjrmgBMbQCNE7QX9N33og+Qn4YBCCG1sTHg8Mq9P82Ppgden9SxJAwFzpIA6qgNTEAiYPUvSX17tT6+akXtkGxsTbBZoegsh5PM9+/Yd+GIAgMv58NkFvuXHjHOayR4SNL1FIeRb7ng1ClfLIecsZJ2GyWnw+wfYbNTBWmB0YYFvnyy32rhWW6l7vmRl+Tm1z0EoFKLoGOY3hZDf/2J29tq78eKx90XjFq57vnx9/W3UATrmgFAohBByzjjxFlylUymIBqKVwEjMZrdZPlmwZkytV+MtONHBkHNzc0PDQyzJQvNIs7qy+sH6EWvGGDnZoNarlaTSOeNkHUcHGAeMQrlI2i69KCiq09ULMVHP0+7u/p6bDyW3NLezS8/d75RX3KscfDmo69Td1dcJpFXneRcUT5S8OzyXy9Xd1y3ERHW6+pzrBdJ2qVAuMg4Y9wxgHDThpKGluiJLrVNhpMJmt9nsViWpbGxrVOlURCuBN+Hueffw62GMxIhWgiW1em0gELBYLRipINo01RVZpKEZb8J3HGx/DsxV+xbLEuCL/Q1CKBwKUeFwzEL3MyzJ8l/tI2UJsOZb3G6489DCER9TY/1cAHOfbJvZH3HfBVts7pNxAabG+nfLoyuadjjk1ZWqWrHkUqaiRqCoqYqcghhoJWJCciNuipVILmWqasXy6spphyO6os1gECHU22XIBSgEuBI5C/ahECAP4AxANkB+vIKCXfJcgN4uA0JoMxiMOhgxmYpTkvkZ6bw0Du9UWlyUcFLzkhLzkhJLOKkH1fDSOPyM9OKU5BGTKeaS0SZFHY4wzTxiCqEwTR9Z/A/+B+h/HfAHoDX94+8YmmMAAAAASUVORK5CYII=&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:750,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/cd9ef044b75da5fe6aeee02fb58cad35.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/cd9ef044b75da5fe6aeee02fb58cad35.jpg"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://raphtyosaze.medium.com/lightning-payment-channels-138f72e90faa" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Lightning Payment Channels</h2><p>Payment channels are the backbone of the Lightning Network as they enable the sending and receiving of off-chain payments. A payment channel is a trustless duplex financial relationship between two...</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://raphtyosaze.medium.com</span></div><img src="https://storage.googleapis.com/papyrus_images/cd9ef044b75da5fe6aeee02fb58cad35.jpg"></div></a></div></div><p><strong>The Bitcoin Manual</strong></p><div data-type="embedly" src="https://thebitcoinmanual.com/articles/close-lightning-channel/?source=post_page-----a11bbe4ed486--------------------------------" data="{&quot;provider_url&quot;:&quot;https://thebitcoinmanual.com&quot;,&quot;description&quot;:&quot;A detailed review of to close Lightning Channels, why you would close a Lightning channel and what is involved in the various types of closes&quot;,&quot;title&quot;:&quot;How To Close A Lightning Channel? - The Bitcoin Manual&quot;,&quot;mean_alpha&quot;:175.38452381,&quot;author_name&quot;:&quot;Che Kohler&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://thebitcoinmanual.com/articles/close-lightning-channel/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/15c88bed885f88da9552949c6e25dc4f.png&quot;,&quot;author_url&quot;:&quot;https://thebitcoinmanual.com/articles/author/che-256/&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;The Bitcoin Manual&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAIAAAAzPjmrAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANXRFWHRDb21tZW50AHhyOmQ6REFFbWFOQlNjNEU6Njc1LGo6Mzk5NzY1NTQzMDMsdDoyMjExMDQxMbd5Bl0AAAY3SURBVHicTZFbUFqJHcaPupagHi6H2zkgAqLiCt5QYyZr1oxRg4vBC16SdpOY6WanMZNo1nqjeE0IEiVBcgDlcAsHDgcQcc+e0mx3S3acTZN1py+ZabezD90+dKYPnfalb2kiHdqX/eb3+J/vN9/8gd5ZG3Jh4pzJ/ICKB35Hb0RcM6RJ83Mjt3OKp+5ii6VQrRqqrS0UIe8gYqZKXlYjYQpEQClYxoVASbm6XlNRXc2uruMoWtiwEuTDoAABYYRTXi449YF++jFwGbVrbtzsmP2lZT+xlSTvRzzO7JOO2SulrePs6vfKlNrSlgtsZYPOONaje//MaX7bufbKd9XNbe0QIi4QCiWaKm29Gm44KVS/z6nQsIQSUISAIoSFIAwEeu/DaWDQ+avycb3owx6DxzT5aG3CszCETtYYz/BlVZLahkb99e5fbJ/q1EeJRNp159kc4+jXnuzhyz98e7RiNs3MzNkeOa//9OLti6P6C0PvCBCupAIUIaV8GBQhDCFbcXYQUH10taSpRTnYM3il/+bkhG3Xtr6xYLetog/tfrcTx7yxUCDkRbPPvv598tH37q7vv8L/9vd/fffdnzJ0Zi+RoqinmA8nAqGLly4DEATJZGw4vyCvEQhgdTsAgLxCIdLReXb12ihqWYn5vBGv1+96GPGifrfT60ap/UScjH+GLX+aCO9FA3goFAqGaSpDREkqncbxKEmmaOrp0PAYAIl4CjlHKmGLxWwEYSFiEIGB6dtTAAA0auqiAVfAZQ+47La7K7a7K3fNi1uWVdTxcG5mZtN6b3N5dnH2E9ThWFpc3HW55ufm8TC+l9yLESQRS9D058MjPyuEJJBEDsJiNiLOO8QIWwIDuVzu+fPnq0uLIZ/Xj+3gQWxrw7Jl2zAvLKAO+67Hs2w2h7w7js0H99eW8QDm3NoicPyxE43HSDJPPD+FogeHxgtYYi6iYAnFLCHCgsWccglbBgNv3rzN5XLHx29/+OGvFEXjASzk9fjcrkgogO14/Jg3FY/5PK4nwUCCIPBAIBIOPQkEyShB4tF4jEyQiTiZpCi6/8JoIRsRyGp5UhVHJGUJEJYwvwPIHR//5/XrN2+Pc7ncv/9MZyIOy717ayvmLdsGtrvj9/uvX/8YRd1LSytmk9m0aL527SPbA7uur//W7TsU/dtkmk7t05mnWf3AGIMngyubRIpmvlTNgZVsUQUbkQNvj/PVx//8418+d2QijmAwpDuvMy2aBwwDLpfbvLTc2tp25cqETqe3Wjf7+w0Wi3Vl9W53d69eb4jFk/tpKrGXpqhMn36MIawSKNQ8aS2/XM1FariiSghWArnX/3gRXYw9mokRiUTqN9uO7fHxS198kTUajbu72PT0JwbDwNT0nb4+vdX6wGAYnpq6s7q2PjIyNj5+KUbupVKfksmDgzR9vm+UKVIJ5VqetJkr0XDEKo5IyUEUwK3xbi6jeN1qT6Wp/fRnNtvWxNWrFJ0ZNo7EyMSNGzf1+v75BZPFYu3T6QcMw07n47m5uaHBoYGBofyfo1EyGk0nkz29RiasFsrboIqT3HItr7yJK2mA5GoA6PgY1vTsoNskEUkmSYdj++zZTrNpQdd7fn5+/tbk5Pra+uHhocvltlgs9k07+hg9SKcdjm0cxw8PDxOJRDyePEjT53pHTohb+fL2/wlaIGkbJG+DlM0At+uysmuMIIhkIp4/jkU3rFaP2406nfctFj+G+TEfgYcxDAsGw35/0OcPJpNJIkocpA8oikql9hOp/YMDqqt3tFR2RlDVAclaIbkWUrRAlc0cWR1Qpu2pbO9GUbfP5/dhGIZ5Q+FwMBgO4ziG+Qki9uWX2Ww2+yybPTr69sWLl5lM5lk2+/LFy6Nvvnn16hVN0Xg4QkbJ053DYJ1RoDrHqWjklldzJVVsRAEKpYBA28tXtnC5EB+C+Hy+QCAQCYWwSATDCAJXyCuq1eqmd+saamrqNBqtRqNVqTRqTVN9Y1tTc3tL6+n6xpMqTXt1/Sm+op0j0YKQuBTkMUtZTCb4fwCu+hQLlhYXM4p/lKLioqIiRlFRWUFBCQCUAAUlhUUsADiRp6AEKCoDijl5GNBPQPgEhLBgJUesZjAhJqOYyWQwf5T/AkFadIH41+HaAAAAAElFTkSuQmCC&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/15c88bed885f88da9552949c6e25dc4f.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/15c88bed885f88da9552949c6e25dc4f.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://thebitcoinmanual.com/articles/close-lightning-channel/?source=post_page-----a11bbe4ed486--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>How To Close A Lightning Channel? - The Bitcoin Manual</h2><p>A detailed review of to close Lightning Channels, why you would close a Lightning channel and what is involved in the various types of closes</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://thebitcoinmanual.com</span></div><img src="https://storage.googleapis.com/papyrus_images/15c88bed885f88da9552949c6e25dc4f.png"></div></a></div></div><p><strong>BOLT to identify Justice Transactions</strong></p><div data-type="embedly" src="https://github.com/alexbosworth/bolt03/blob/master/breaches/is_remedy_witness.js?source=post_page-----a11bbe4ed486--------------------------------" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Utilities for BOLT 03. Contribute to alexbosworth/bolt03 development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;bolt03/breaches/is_remedy_witness.js at master · alexbosworth/bolt03&quot;,&quot;author_name&quot;:&quot;alexbosworth&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/alexbosworth/bolt03/blob/master/breaches/is_remedy_witness.js?source=post_page-----a11bbe4ed486--------------------------------&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/3e184d6af6824d930b31e63015dece41.png&quot;,&quot;author_url&quot;:&quot;https://github.com/alexbosworth&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;base64&quot;:&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC00lEQVR4nJ1UzU8TQRRfE+PRG/FgIheNxoOJ8Q/wJCZ60IMRg0GNGomGgCGRgsHgRzBy4EAo2ELBz4RIOAnh5lXxYGJIKbWl22W7S7fdukPp7mx3dqZjtrPdUixC/OVl982bN/N7HzPD0TJIBZ7OFFo761l2RMn9lz2dAVd3i20K2XVfShGydF3HGBsQGhAiCzG7S4AQAgBACDHGWVU1TdMqw7btso7UXC6tKIVCAULoBFqJ1Es0Gos8GergDnAMLe2X2JRLMP1p5nH/85GxYGjq7cvBoYmpN/7RYGA85B8LjowG3n+cDk5MDvtfz80vaBrYWj1PTyRWfL1tHMc1ctzhg/uuP2rBBLsZEEIEUQwvRyRZFsRUPL4ajcVjsXg0+uvrt+/h8HIksiLJMs8nk8LaToXPg0wyvtR3u7npSMP5UyebLp6zrKJLgBCanpldCi/PzS8M+0cn330IjIcC46FtfaY7AGMn0tnPXxrPXDh9/MTZow0cx+0/dIzZ3RJ1dvlabty51nrrfvvDzi5f/7OBvqcvnOZijLcegHo0lmVRSi9fbeVqwfrkEmCMLctCCBFCYBls2V7AWBcXF+/ee9DTP3CzreNKc+urwcFqkwkhSiYbTySSQkpeT8vr6ZVYIq1kUrKMkHva/htuBrpuaBr4rYGN/GZ+cxOADV03DAj3cgO8PFAtagh2RalUc/b3wldDUNtIZ45tR+pdadb7kvcs/BMOAcZYTEliSsK4+gStJoRoLJ5WFObHmqTmcpTS3xrgeVHTtLqJOs6q9mNptUJAbIIRQkVVzUqyJMmSvC7bdrFoQgA0QRAUJW2aBsEIAC3B86ZpUGLrekEUhXweUEoosT0hBFFKsmruZzhKMKLErvYA41LRIkxYIKUSLSJnWE7MGUJPp9RCxMa7V4nLCj4mubWenNjrfNd6soIvk+z2jFWfrXrF82/J8N0Z3lmeFXx/AEzRXE8rFJ/KAAAAAElFTkSuQmCC&quot;,&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/3e184d6af6824d930b31e63015dece41.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/3e184d6af6824d930b31e63015dece41.png"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/alexbosworth/bolt03/blob/master/breaches/is_remedy_witness.js?source=post_page-----a11bbe4ed486--------------------------------" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>bolt03/breaches/is_remedy_witness.js at master · alexbosworth/bolt03</h2><p>Utilities for BOLT 03. Contribute to alexbosworth/bolt03 development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/3e184d6af6824d930b31e63015dece41.png"></div></a></div></div><p><strong>How to Set up a Watchtower for an Umbrel Bitcoin Lightening Node</strong></p><div class="relative header-and-anchor"><h2 id="h-how-to-set-up-a-watchtower-for-an-umbrel-bitcoin-lightning-node"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://www.nasdaq.com/articles/how-to-set-up-a-watchtower-for-an-umbrel-bitcoin-lightning-node-2021-10-30?source=post_page-----a11bbe4ed486--------------------------------">How To Set Up A Watchtower For An Umbrel Bitcoin Lightning Node</a></h2></div><div class="relative header-and-anchor"><h3 id="h-this-guide-will-show-you-how-to-quickly-and-easily-protect-your-funds-in-your-bitcoin-lightning-channel-the-lightning"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://www.nasdaq.com/articles/how-to-set-up-a-watchtower-for-an-umbrel-bitcoin-lightning-node-2021-10-30?source=post_page-----a11bbe4ed486--------------------------------">This guide will show you how to quickly and easily protect your funds in your Bitcoin Lightning channel. The Lightning…</a></h3></div><p><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://www.nasdaq.com/articles/how-to-set-up-a-watchtower-for-an-umbrel-bitcoin-lightning-node-2021-10-30?source=post_page-----a11bbe4ed486--------------------------------">www.nasdaq.com</a></p><p><strong>LND Watchtower</strong></p><div class="relative header-and-anchor"><h2 id="h-lndwatchtowermd-at-master-lightningnetworklnd"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://github.com/lightningnetwork/lnd/blob/master/docs/watchtower.md?source=post_page-----a11bbe4ed486--------------------------------">lnd/watchtower.md at master · lightningnetwork/lnd</a></h2></div><div class="relative header-and-anchor"><h3 id="h-as-of-v070-lnd-supports-the-ability-to-run-a-private-altruist-watchtower-as-a-fully-integrated-subsystem-of-lnd"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://github.com/lightningnetwork/lnd/blob/master/docs/watchtower.md?source=post_page-----a11bbe4ed486--------------------------------">As of v0.7.0, lnd supports the ability to run a private, altruist watchtower as a fully-integrated subsystem of lnd…</a></h3></div><p><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://github.com/lightningnetwork/lnd/blob/master/docs/watchtower.md?source=post_page-----a11bbe4ed486--------------------------------">github.com</a></p><p><strong>Lightening Network Watchtower</strong></p><div class="relative header-and-anchor"><h2 id="h-lightning-network-watchtower-lightningnetwork"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://lightningnetwork.plus/watchtower?source=post_page-----a11bbe4ed486--------------------------------">Lightning Network Watchtower * LightningNetwork+</a></h2></div><div class="relative header-and-anchor"><h3 id="h-second-generation-watchtowers-send-ln-justice-transactions-when-they-detect-an-outdated-channel-close-if-your-node"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://lightningnetwork.plus/watchtower?source=post_page-----a11bbe4ed486--------------------------------">Second Generation Watchtowers send LN justice transactions when they detect an outdated channel close. If your node…</a></h3></div><p><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://lightningnetwork.plus/watchtower?source=post_page-----a11bbe4ed486--------------------------------">lightningnetwork.plus</a></p><p><strong>Decred Documentation on Watchtowers</strong></p><div class="relative header-and-anchor"><h2 id="h-watchtowers-decred-documentation"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://docs.decred.org/lightning-network/watchtowers/?source=post_page-----a11bbe4ed486--------------------------------">Watchtowers — Decred Documentation</a></h2></div><div class="relative header-and-anchor"><h3 id="h-critical-information-to-prevent-theft-of-funds-ln-nodes-should-remain-online-for-as-long-as-possible-to-monitor-for"><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://docs.decred.org/lightning-network/watchtowers/?source=post_page-----a11bbe4ed486--------------------------------">Critical information to prevent theft of funds LN nodes should remain online for as long as possible to monitor for…</a></h3></div><p><a target="_blank" rel="noopener  ugc nofollow" class="dont-break-out" href="https://docs.decred.org/lightning-network/watchtowers/?source=post_page-----a11bbe4ed486--------------------------------">docs.decred.org</a></p><p></p><p></p>]]></content:encoded>
            <author>satoshifanclub@newsletter.paragraph.com (Mabel Oza)</author>
            <category>bitcoin</category>
            <category>lightning network</category>
            <category>payment channels</category>
            <category>bitcoin lightning</category>
            <category>bitcoin development</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c7cd7e7dd65e98b9a6e55308f911a46e.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>