<?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>Azephiar</title>
        <link>https://paragraph.com/@azephiar</link>
        <description>undefined</description>
        <lastBuildDate>Fri, 03 Apr 2026 19:51:14 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[The future of web3]]></title>
            <link>https://paragraph.com/@azephiar/the-future-of-web3</link>
            <guid>xNVPnRP8nMTrM0XkdLWR</guid>
            <pubDate>Fri, 15 Jul 2022 15:07:00 GMT</pubDate>
            <description><![CDATA[PremiseNowadays everybody’s focus seems to be on general-purpose smart contract blockchains, particularly Ethereum. That makes sense, the entrance barrier is not too high, solidity is fairly simple, the costs to deploy a Dapp is low, a lot of dev tools are available and people in the space are familiar with it. But every general-purpose blockchains comes at a cost, let’s see how. If deployment of arbitrary code on a blockchain is allowed and no security measures are in place some troublesome ...]]></description>
            <content:encoded><![CDATA[<h2 id="h-premise" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Premise</h2><p>Nowadays everybody’s focus seems to be on general-purpose smart contract blockchains, particularly Ethereum.</p><p>That makes sense, the entrance barrier is not too high, solidity is fairly simple, the costs to deploy a Dapp is low, a lot of dev tools are available and people in the space are familiar with it.</p><p>But every general-purpose blockchains comes at a cost, let’s see how.</p><p>If deployment of arbitrary code on a blockchain is allowed and no security measures are in place some troublesome code might be deployed, an example being a piece of code that runs forever. Some of this security measures might be familiar to you under the name of “gas fees”.</p><p>The issue should be quite clear. If a deployed Dapp is less general than the hosting blockchain (which must be the case) then the Dapp is paying for security measures it itself doesn’t need.</p><h2 id="h-the-comeback-of-blockchains-development" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The comeback of blockchains development</h2><p>The ecosystem efforts and resources seems to be focused on making Ethereum scale with the goal of lowering gas fees. For the reasons stated above to me this is approaching the problem from a dead angle. In addition to this all the so-called Layer 2 are making the ecosystem extremely complex from an UX point of view.</p><h3 id="h-so-what-can-we-do" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">So what can we do?</h3><p>What about Dapps building and running on their own self-tailored blockchains? This is what was happening in the cryptocurrencies space in the pre-ethereum era.</p><p>However, as seen in the past, taking this road comes with some issues:</p><ol><li><p>Blockchains development requires great expertise to get right and great expertise is expensive.</p></li><li><p>Upgrading our Dapp would mean having to upgrade the blockchains which requires some degree community off-chain coordination.</p></li><li><p>Gathering a community of miners or validators to keep the blockchain safe and decentralised is also expensive and resource intensive.</p></li><li><p>Blockchains cannot communicate, which means our Dapp would be completely isolated from the world.</p></li></ol><p>In the following sections we are going to tackle this 4 problems.</p><h2 id="h-substrate-problem-1-and-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Substrate: problem 1 &amp; 2.</h2><p>Parity is a company that developed a Bitcoin client, an Ethereum client and the Polkadot client. By doing this they noticed most the code in the 3 clients was the same.</p><p>So they took the overlapping code and made a framework out of it: Substrate.</p><h3 id="h-blockchain-development-is-easier" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Blockchain development is easier</h3><p>Substrate makes blockchain development way easier, the entrance barrier is still high but way lower than implementing a blockchain from scratch. Which means it solves problem 1: <s>Blockchains development requires great expertise to get right and great expertise is expensive.</s></p><h3 id="h-forkless-upgrades" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Forkless upgrades</h3><p>In addition to this blockchains built using substrate allow for upgrades that can be deployed as a normal transaction. No forks needed. This gets rid of problem 2: <s>Upgrading our Dapp would mean having to upgrade the blockchains which requires some degree community off-chain coordination.</s></p><h2 id="h-polkadot-problem-3-and-4" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Polkadot: problem 3 &amp; 4.</h2><p>Polkadot is a blockchain developed using substrate. It’s a so-called layer 0. It allows for other blockchains to attach to it.</p><h3 id="h-shared-security" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Shared security</h3><p>Blockchains connected to polkadot, called parachains, inherit it’s security and decentralization. Remember that a system is as secure as its weakest point. Connecting to polkadot is still expensive, but way less expensive than building your own community of miners and validators. This gets rid of problem 3: <s>Gathering a community of miners or validators to keep the blockchain safe and decentralised is also expensive and resource intensive.</s></p><h3 id="h-interoperability" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Interoperability</h3><p>Blockchains connected to polkadot are able to communicate and send arbitrary messages to each other. This creates a rich ecosystem of blockchains that can interoperate with each other and gets rid of problem 4: <s>Blockchains cannot communicate, which means our Dapp would be completely isolated from the world.</s></p><h2 id="h-conclusions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusions</h2><p>I believe Substrate and Polkadot are approaching the problem from a good angle. However the ecosystem is still ripe: it’s lacking tools for developers and the UX for non-technical people is kind of bad. As of now it’s probably not worth it to port your project to this ecosystem, but it’s worth keeping an eye on.</p>]]></content:encoded>
            <author>azephiar@newsletter.paragraph.com (Azephiar)</author>
        </item>
        <item>
            <title><![CDATA[How an hacker made 191.000$ in less than an hour.]]></title>
            <link>https://paragraph.com/@azephiar/how-an-hacker-made-191-000-in-less-than-an-hour</link>
            <guid>WqFTBQgaF7KqMO2lkO57</guid>
            <pubDate>Sun, 06 Feb 2022 09:25:13 GMT</pubDate>
            <description><![CDATA[Someone was able to buy BAYC #9991, valued at 84.2ETH, for 0.77ETH. First of all, I don’t consider this person to necessarily be a skilled hacker. It’s probably just a random dev which was playing with opensea API. But how did he pull this off?⚠️ Opensea API is now protected against this kind of attack.The exploit in theoryOpensea allows for gas-free NFT listing via a user generated off-chain signature of the NFT collection, the NFT ID and the NFT price. When this signature is sent to a smart...]]></description>
            <content:encoded><![CDATA[<p>Someone was able to buy BAYC #9991, valued at 84.2ETH, for 0.77ETH.</p><p>First of all, I don’t consider this person to necessarily be a skilled hacker. It’s probably just a random dev which was playing with opensea API. But how did he pull this off?</p><h3 id="h-opensea-api-is-now-protected-against-this-kind-of-attack" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">⚠️ Opensea API is now protected against this kind of attack.</h3><h2 id="h-the-exploit-in-theory" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The exploit in theory</h2><p>Opensea allows for gas-free NFT listing via a user generated off-chain signature of the NFT collection, the NFT ID and the NFT price. When this signature is sent to a smart contract it triggers the selling for the price specified in the signature. This signature is stored on Opensea centralised databases, an anybody who has access to this signature can buy the NFT for the specified price. This wouldn’t be a problem in most cases.</p><p>The problem arose when the user generated multiple signatures for different prices for the same NFT. <strong>The Opensea interface only showed the signature for the higher price</strong> but <strong>the Opensea API also showed the signature for the lowest price.</strong></p><p>This means that it was possible to buy NFTs for a lower price than the listed one if a signature with a lower price existed using Opensea APIs.</p><h2 id="h-the-exploit-in-practice" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The exploit in practice</h2><p>First we install <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ProjectOpenSea/opensea-js">opensea-js</a>.</p><p>With this library we can interact with opensea API using NodeJS.</p><p>This is the code that can be used to get informations about selling orders on a specific NFT:</p><pre data-type="codeBlock" text="const { orders, count } = await seaport.api.getOrders({
    side: &quot;1&quot;,
    asset_contract_address: &quot;0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D&quot;,
    token_ids: [&quot;9991&quot;],
});
"><code><span class="hljs-keyword">const</span> { orders, count } = await seaport.api.<span class="hljs-title function_ invoke__">getOrders</span>({
    <span class="hljs-attr">side</span>: <span class="hljs-string">"1"</span>,
    <span class="hljs-attr">asset_contract_address</span>: <span class="hljs-string">"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D"</span>,
    <span class="hljs-attr">token_ids</span>: [<span class="hljs-string">"9991"</span>],
});
</code></pre><p>After we run it the <code>orders</code> variable will contain a bunch of informations including something called <code>basePrice</code>:</p><pre data-type="codeBlock" text="{
...
&quot;basePrice&quot;: &quot;770000000000000000&quot;,
&quot;extra&quot;: &quot;0&quot;,
&quot;currentBounty&quot;:
&quot;100000000000&quot;,
&quot;currentPrice&quot;: &quot;84200000000000000000&quot;,
&quot;createdTime&quot;: &quot;1643912802&quot;,
&quot;listingTime&quot;: &quot;1643912697&quot;,
&quot;expirationTime&quot;: &quot;1646331916&quot;,
...
}
"><code>{
...
<span class="hljs-string">"basePrice"</span>: <span class="hljs-string">"770000000000000000"</span>,
<span class="hljs-string">"extra"</span>: <span class="hljs-string">"0"</span>,
<span class="hljs-string">"currentBounty"</span>:
<span class="hljs-string">"100000000000"</span>,
<span class="hljs-string">"currentPrice"</span>: <span class="hljs-string">"84200000000000000000"</span>,
<span class="hljs-string">"createdTime"</span>: <span class="hljs-string">"1643912802"</span>,
<span class="hljs-string">"listingTime"</span>: <span class="hljs-string">"1643912697"</span>,
<span class="hljs-string">"expirationTime"</span>: <span class="hljs-string">"1646331916"</span>,
...
}
</code></pre><p>Wait. The basePrice is <code>770000000000000000 wei</code> which is <code>0.77ETH</code> but the listing price on the opensea interface is <code>currentPrice</code> which is <code>84.2ETH</code> . There is something fishy going on here.</p><p>What happens if we try to buy this NFT with the opensea APIs? Let’s write the code to do this:</p><pre data-type="codeBlock" text="const order = orders[0];
const accountAddress = &quot;0x...&quot;;
const transactionHash = await seaport.fulfillOrder({
  order,
  accountAddress,
});
"><code>const <span class="hljs-attr">order</span> = orders[<span class="hljs-number">0</span>]<span class="hljs-comment">;</span>
const <span class="hljs-attr">accountAddress</span> = <span class="hljs-string">"0x..."</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">transactionHash</span> = await seaport.fulfillOrder({
  order,
  accountAddress,
})<span class="hljs-comment">;</span>
</code></pre><p>Boom. We just bought an NFT valued at 84.2ETH for 0.77ETH. Now we just need to list it again for a quick ~83ETH.</p>]]></content:encoded>
            <author>azephiar@newsletter.paragraph.com (Azephiar)</author>
        </item>
        <item>
            <title><![CDATA[DAOs]]></title>
            <link>https://paragraph.com/@azephiar/daos</link>
            <guid>TZ9Ob36C9oDvyz1sWEUd</guid>
            <pubDate>Wed, 19 Jan 2022 15:53:04 GMT</pubDate>
            <description><![CDATA[A DAO is a bunch of people with a shared bank account doing stuff. The technology that allows a community of people to collectively own and manage a treasury lies in blockchains. It’s possible to use a technology such as Ethereum to deploy a bunch of code which:It’s able to own some assets (a treasury)Creates a bunch of shares (a token) which represents ownership of the treasuryOnce this code gets deployed members will all have access to a token which will represent their share in the DAO. Ho...]]></description>
            <content:encoded><![CDATA[<p>A DAO is a bunch of people with a shared bank account doing stuff.</p><p>The technology that allows a community of people to collectively own and manage a treasury lies in blockchains.</p><p>It’s possible to use a technology such as Ethereum to deploy a bunch of code which:</p><ol><li><p>It’s able to own some assets (a treasury)</p></li><li><p>Creates a bunch of shares (a token) which represents ownership of the treasury</p></li></ol><p>Once this code gets deployed members will all have access to a token which will represent their share in the DAO. How to distribute tokens is usually up to the founders or a pre-existing community.</p><p>In DAOs any member can make and vote proposals, which can then be voted on if you own some tokens.</p><p>Let’s suppose we make a proposal about building a website to sell bananas. If the proposal gets approved we can then have access to part of the treasury and start collaborating with other members of the DAO (or anyone, really) on how to bring the project to life. Fast forward 6 month and the website is live. We will probably receive some tokens for the value we added. In addition to that our contribution increased the net value of the whole DAO. In which, of course, you own a part.</p><p>Contributing to a DAO means your goal is to add as much value as possible based on the skillset you have and the goal of the DAO. You can potentially define your own role and your own responsibilities. You can contribute to multiple DAOs, join and leave when you prefer. It’s the ownership economy.</p>]]></content:encoded>
            <author>azephiar@newsletter.paragraph.com (Azephiar)</author>
        </item>
    </channel>
</rss>