<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[blog | Josh Stein | jcs.sol]]></title><description><![CDATA[Hi, I specialize in lightweight, functional Web3 design. I'm currently building web experiences that are designed to reduce waste and help people around the globe.]]></description><link>https://blog.jcstein.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1635899843003/to_exXjeJ.png</url><title>blog | Josh Stein | jcs.sol</title><link>https://blog.jcstein.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 13:18:44 GMT</lastBuildDate><atom:link href="https://blog.jcstein.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[💸 How to Set Up Your Own Solana Pay Point-of-Sale (PoS) App]]></title><description><![CDATA[Prerequisites to have installed on your device

Node.js v14.17.0 or above installed (a JavaScript runtime built on Chrome's V8 JavaScript engine)
Yarn (a package manager) installed
Two wallets on Phantom, one for receiving funds and one for paying fo...]]></description><link>https://blog.jcstein.dev/how-to-set-up-your-own-solana-pay-point-of-sale-pos-app</link><guid isPermaLink="true">https://blog.jcstein.dev/how-to-set-up-your-own-solana-pay-point-of-sale-pos-app</guid><category><![CDATA[Solana]]></category><category><![CDATA[phantom]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[Web3]]></category><category><![CDATA[Cryptocurrency]]></category><dc:creator><![CDATA[joshcs.eth ᵍᵐ]]></dc:creator><pubDate>Wed, 02 Feb 2022 06:36:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1643781179349/mLyQOGdIM.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><p>Prerequisites to have installed on your device</p>
<ul>
<li><a target="_blank" href="https://nodejs.org/en/">Node.js</a> v14.17.0 or above installed (a JavaScript runtime built on <a target="_blank" href="https://v8.dev/">Chrome's V8 JavaScript engine</a>)</li>
<li><a target="_blank" href="https://yarnpkg.com/">Yarn</a> (a package manager) installed</li>
<li>Two wallets on Phantom, one for receiving funds and one for paying for goods or services. Follow the <a target="_blank" href="https://help.phantom.app/hc/en-us/articles/4406388623251-How-to-create-a-new-wallet">guide</a> to set up these on <a target="_blank" href="https://phantom.app/">Phantom</a>, you will be using these wallets to test the app!<ul>
<li>Fund your wallet on the <code>devnet</code> using <a target="_blank" href="https://solfaucet.com/">Sol Faucet</a></li>
</ul>
</li>
</ul>
</li>
<li><p>Clone the <a target="_blank" href="https://github.com/solana-labs/solana-pay">repository</a> by using either Git or Github CLI and the corresponding commands in your terminal:</p>
<p>Git ⬇️</p>
<pre><code class="lang-bash"> git <span class="hljs-built_in">clone</span> https://github.com/solana-labs/solana-pay.git
</code></pre>
<p> Github CLI ⬇️</p>
<pre><code>gh repo clone solana<span class="hljs-operator">-</span>labs<span class="hljs-operator">/</span>solana<span class="hljs-operator">-</span>pay
</code></pre><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643781846743/gkVfKYZJe.png" alt="scrot 2022-02-02 at 12.10.46 AM.png" /></p>
</li>
<li><p>Change directories into <code>point-of-sale</code> using the following command in your terminal. You can use the terminal from step 1 in steps 2-4, I’ve just illustrated what the commands will look like in separate windows.  </p>
<pre><code class="lang-bash"> <span class="hljs-built_in">cd</span> solana-pay/point-of-sale
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643781924209/k4xE2BuO1.png" alt="scrot 2022-02-02 at 12.11.33 AM.png" /></p>
</li>
<li><p>Install dependencies using Yarn</p>
<pre><code class="lang-bash"> yarn install
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643781993469/WGealwkxtig.png" alt="scrot 2022-02-02 at 12.16.15 AM.png" /></p>
<blockquote>
<p>🔄 Installation in progress</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643782013224/bbx-H1IK9J.png" alt="scrot 2022-02-02 at 12.16.46 AM.png" /></p>
<blockquote>
<p>✅ Installation complete</p>
</blockquote>
</li>
<li><p>Start the local development server</p>
<pre><code class="lang-bash"> yarn start
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643782052050/CwEwy0kdX.png" alt="scrot 2022-02-02 at 12.17.38 AM.png" /></p>
<blockquote>
<p>🎉 Your PoS server is running at <code>localhost:1234</code></p>
</blockquote>
</li>
<li><p>Open up the following link in your web browser. You will need to replace <code>MERCHANT_ADDRESS</code> with your receiving wallet’s address and <code>STORE+NAME</code> with your desired store name.</p>
<p> <code>http://localhost:1234/new?recipient=MERCHANT_ADDRESS&amp;label=STORE+NAME</code></p>
<ul>
<li>One of the neat features of <a target="_blank" href="https://solanapay.com">Solana Pay</a> is that you will not need to log in with a wallet to run the PoS, so are able to use Safari (or your browser of choice without Phantom installed) to test the PoS out. For example, I’ve used an iPad and navigated to the local server on my network at: <code>http://10.0.0.156/new?recipient=MERCHANT_ADDRESS&amp;label=STORE+NAME</code></li>
</ul>
</li>
<li><p>Your screen will show a Point of Sale (PoS) user interface that looks like the image below:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643782469078/U6Dp_7uP_.png" alt="scrot 2022-02-02 at 12.22.36 AM.png" /></p>
</li>
<li><p>Enter an amount to charge in SOL
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643782525169/MABsUEShz.png" alt="scrot 2022-02-02 at 12.24.15 AM.png" /></p>
</li>
<li><p>Select <code>Generate Payment Code</code> and you will be taken to a QR code that shows the amount in SOL</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643782603776/7BDUOQtKO.png" alt="scrot 2022-02-02 at 12.24.50 AM.png" /></p>
</li>
<li><p>Scan the code with your <a target="_blank" href="https://github.com/solana-labs/solana-pay#supporting-wallets">compatible</a> Solana Pay wallet</p>
</li>
<li><p>Verify the transaction in your wallet and select <code>Send</code><br /><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643782641292/rcyUBNFhL.jpeg" alt="IMG_6418.jpeg" /></p>
</li>
<li><p>In a few seconds, your transaction will be confirmed on both the PoS and in your Phantom wallet! You’ve successfully sent your first transaction using Solana Pay!    </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1643832920779/jVZ6ISe4n.gif" alt="solpay_1.gif" /></p>
</li>
<li><p>Stay tuned for updates on how to customize and deploy your Solana Pay PoS app!</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[How to Register a Solana (.sol) Domain & Claim your Twitter Handle in 10 Minutes]]></title><description><![CDATA[👀 Have you seen your friends and colleagues sharing their .sol domain names and want to register one of your own?
https://twitter.com/yagiofcanada/status/1464695289311334404
Or maybe you're looking to gift a Solana domain to your family for the holi...]]></description><link>https://blog.jcstein.dev/how-to-register-a-solana-sol-domain-and-claim-your-twitter-handle-in-10-minutes</link><guid isPermaLink="true">https://blog.jcstein.dev/how-to-register-a-solana-sol-domain-and-claim-your-twitter-handle-in-10-minutes</guid><category><![CDATA[Solana]]></category><category><![CDATA[phantom]]></category><category><![CDATA[Web3]]></category><category><![CDATA[Cryptocurrency]]></category><category><![CDATA[Cryptography]]></category><dc:creator><![CDATA[joshcs.eth ᵍᵐ]]></dc:creator><pubDate>Wed, 22 Dec 2021 16:47:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1640126833140/prC4GcY3o.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-have-you-seen-your-friends-and-colleagues-sharing-their-sol-domain-names-and-want-to-register-one-of-your-own">👀 Have you seen your friends and colleagues sharing their .sol domain names and want to register one of your own?</h1>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/yagiofcanada/status/1464695289311334404">https://twitter.com/yagiofcanada/status/1464695289311334404</a></div>
<h3 id="heading-or-maybe-youre-looking-to-gift-a-solanahttpssolanacom-domain-to-your-family-for-the-holidays-or-new-year">Or maybe you're looking to gift a <a target="_blank" href="https://solana.com">Solana</a> domain to your family for the holidays or new year?</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/vaz561/status/1473305059215785987">https://twitter.com/vaz561/status/1473305059215785987</a></div>
<h3 id="heading-perhaps-youre-looking-to-claim-your-twitter-handle-well-cover-how-to-do-that-too">Perhaps you're looking to claim your Twitter handle? We'll cover how to do that, too. 🙂</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/desgrippes/status/1396662464251678720">https://twitter.com/desgrippes/status/1396662464251678720</a></div>
<p><strong>If you answered "yes" to any of the above questions, this is the tutorial for you!</strong></p>
<h1 id="heading-first-lets-take-a-step-back-what-is-a-solana-domain-and-what-is-the-solana-name-service">☝️ First, let's take a step back - what is a Solana domain and what is the Solana Name Service?</h1>
<p>A <a target="_blank" href="https://naming.bonfida.org/#/">Solana Domain</a> provides a decentralized and affordable way to map SOL cryptocurrency addresses to on-chain data. What's that mean?</p>
<p>Cryptocurrency addresses are not readable by humans. The goal of the <a target="_blank" href="https://docs.bonfida.org/collection/v/help/an-introduction-to-the-solana-name-service">Solana Name Service</a> is to allow users to create unique domains on Solana to provide a <strong>human-readable address</strong> to simplify the transfer of funds, project development and user experience. This will also speed up adoption for your friends and family. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1640109404765/lAWLhQSt8.png" alt="unique-domains.png" /></p>
<p>Registration of Solana domains also comes with lifetime ownership! You can even use Emojis in your custom domain if you want to get funky.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/beaverbtfd/status/1441672116336685063">https://twitter.com/beaverbtfd/status/1441672116336685063</a></div>
<h1 id="heading-alright-im-ready-how-do-i-get-mine">Alright, I'm ready. How do I get mine?</h1>
<h2 id="heading-first-go-to-namingbonfidaorghttpsnamingbonfidaorg">🎬 First, go to  <a target="_blank" href="https://naming.bonfida.org/#">naming.bonfida.org</a></h2>
<p>Next, connect your <a target="_blank" href="https://docs.solana.com/wallet-guide">Solana wallet</a> using the "connect wallet" button in the top right. ⬇️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/b654e680a533400d865ad56f6cc46645">https://www.loom.com/share/b654e680a533400d865ad56f6cc46645</a></div>
<p>You'll need to have some Solana in your wallet in order to start the auction. Here's a video showing how to add funds within your <a target="_blank" href="https://phantom.app">Phantom</a> wallet. ⬇️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/7883146f94c1492eaf3bb8defb7a5966">https://www.loom.com/share/7883146f94c1492eaf3bb8defb7a5966</a></div>
<p>Now that we have funds and are logged into Bonfida with our Solana wallet, we're ready to pick a domain.</p>
<h2 id="heading-finding-a-domain">🔎 Finding a Domain</h2>
<p>Picking a domain is up to you! You can either bid on one that is on the auction list, or begin a new auction for one of your choosing. For this tutorial, we'll be using <code>hashnode.sol</code> and will be starting a new auction.</p>
<p>Here's a quick tutorial on how to pick a domain. ⬇️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/41b24fb715ad4721835fc37655c346ff">https://www.loom.com/share/41b24fb715ad4721835fc37655c346ff</a></div>
<h1 id="heading-starting-an-auction">👩‍⚖️ Starting an Auction</h1>
<p>Next, you'll want to start the auction for your shiny new domain! At the time of writing, your auction will last 3 days (72 hours) and anyone can participate. The alert lets us know we'll need some <a target="_blank" href="https://bonfida.org/#/">FIDA</a> in our wallet, too - but we'll get to that in a few minutes. ⬇️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/6fcc0e520be24018a27351afebbdac3d">https://www.loom.com/share/6fcc0e520be24018a27351afebbdac3d</a></div>
<h2 id="heading-adding-fidahttpsperpsbonfidaorg-to-your-wallet">🧊 <a target="_blank" href="https://perps.bonfida.org/#/">Adding FIDA</a> to your wallet</h2>
<p>In order to bid on your auction, you will need to have some FIDA in your wallet. At the time of writing, the minimum bid on a domain is set at 2.625 FIDA and the conversion from USDC is approximately <a target="_blank" href="https://coinmarketcap.com/currencies/bonfida/">4.6 USDC:1 FIDA</a>. This rounds out to around $12 (assuming your minimum bid wins the auction).</p>
<p>First, we'll need to convert Solana (SOL) or another currency in our wallet to Serum (SRM).</p>
<p>Here's a walk-through of that process, which can be done in the Phantom extension. ⬇️ </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/0e27c155368b4379937577a1148d8ee8">https://www.loom.com/share/0e27c155368b4379937577a1148d8ee8</a></div>
<p>Next, we'll need to convert SRM to FIDA. This can be done within the Bonfida bidding component. Be sure to leave some SRM in the account to execute the transaction on SRM. ⬇️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/6f830c11b51f46cdaa39a7cf5367584f">https://www.loom.com/share/6f830c11b51f46cdaa39a7cf5367584f</a></div>
<p>We're ready to bid! I suggest waiting until the auction has almost ended. This will ensure that your domain shows up as low as possible on the auction list and will help prevent squatters from out-bidding you. Just be sure to have your FIDA and SRM ready!</p>
<h1 id="heading-bidding-its-been-71-hours-what-now">⏰ Bidding: It's been 71 hours, what now?</h1>
<p>The time has come to claim your domain! I <strong>highly suggest</strong> against bidding on your domain before this time. Why? It could be bid on by squatters the higher it is listed in the auction list. (After writing this, I bid on a domain I was getting for my partner with 90 minutes left and 15 minutes later someone placed a bid on the domain! This then resulted in a bidding-war where I did not register the domain.)</p>
<p>When placing your bid, you will be prompted to approve two transactions. This is normal and you will need to approve both in order to place a bid! ⬇️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/9aa826a3a26146f48e751e909fb554b7">https://www.loom.com/share/9aa826a3a26146f48e751e909fb554b7</a></div>
<h1 id="heading-final-steps">🏁 Final Steps</h1>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/d04e8a25536d43acae4fb375db1e8c26">https://www.loom.com/share/d04e8a25536d43acae4fb375db1e8c26</a></div>
<p>Once the auction is up (assuming you are the top bidder), you will be notified that you have won the domain. Don't celebrate just yet, we still need to set the storage. Almost there. 😎</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/c33851ecf0f741fda2d8e332ac327772">https://www.loom.com/share/c33851ecf0f741fda2d8e332ac327772</a></div>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1640119510679/Dx86mrPQK.png" alt="congrats-wide.png" /></p>
<h2 id="heading-setting-storage-to-finalize-your-domain-registration">💾 Setting Storage to Finalize your Domain Registration</h2>
<p>Once your auction is up, you will need to submit and approve a transaction to select the amount of storage for your domain and pay <a target="_blank" href="https://docs.solana.com/developing/programming-model/accounts#rent">rent</a> (you only pay once) on this storage. This <strong>size is fixed</strong> and <strong>cannot be changed</strong> after it is set.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/matthewbarby/status/1461425543778287616">https://twitter.com/matthewbarby/status/1461425543778287616</a></div>
<p>Non-advanced users may select 1KB without running into any issues. If you plan to resolve an IPFS hosted website with your domain, you're best off setting your storage at 10KB. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/331ed24369c14d509cc2784e93a87233">https://www.loom.com/share/331ed24369c14d509cc2784e93a87233</a></div>
<p>If you're curious, more information on storage can be found in the Bonfida Docs ➡️ <a target="_blank" href="https://docs.bonfida.org/collection/v/help/domain-space">here</a>.</p>
<p>Once you set a storage size and pay rent, the domain is yours! </p>
<h1 id="heading-domain-dashboard">🏚 Domain Dashboard</h1>
<p>If logged into the wallet you own the domain with, you will be able to view your domains and set content in these domains. From this dashboard, you also have the ability to transfer domains between wallets. (More on that in the next tutorial!)</p>
<p>Here's what the  <a target="_blank" href="https://naming.bonfida.org/#/my-domains">My Domains</a> page looks like on a domain I already registered successfully. ⬇️</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1640125686029/CJh9eWQ-7.png" alt="owner-dashboard.png" /></p>
<h1 id="heading-claiming-your-twitter-handle">🐦 Claiming your Twitter handle</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1640110815324/fNUFtgDVqH.png" alt="payments-made-simple.png" /></p>
<p>You can also claim your Twitter handle to replace your unreadable Solana address with one that is human-legible. Here's a video showing how! ⬇️</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.loom.com/share/8d428f81535249bfaf8c214342df39c5">https://www.loom.com/share/8d428f81535249bfaf8c214342df39c5</a></div>
<h2 id="heading-thats-it-do-a-dance-go-outside-take-a-deep-breath-you-did-it">That's it! Do a dance! Go outside! Take a deep breath, you did it! 🙂</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://media.giphy.com/media/cklPOHnHepdwBLRnQp/giphy.gif">https://media.giphy.com/media/cklPOHnHepdwBLRnQp/giphy.gif</a></div>
]]></content:encoded></item></channel></rss>