<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Paweł Bylica on Medium]]></title>
        <description><![CDATA[Stories by Paweł Bylica on Medium]]></description>
        <link>https://medium.com/@chfast?source=rss-68218f86e690------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*sd_OE9fe_VHxpew6tTa6Ow.jpeg</url>
            <title>Stories by Paweł Bylica on Medium</title>
            <link>https://medium.com/@chfast?source=rss-68218f86e690------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 22 May 2026 00:40:40 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@chfast/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Re-airdrop of OMG tokens]]></title>
            <link>https://medium.com/golem-project/re-airdrop-of-omg-tokens-403ef9e379f4?source=rss-68218f86e690------2</link>
            <guid isPermaLink="false">https://medium.com/p/403ef9e379f4</guid>
            <category><![CDATA[golem]]></category>
            <category><![CDATA[omg]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Paweł Bylica]]></dc:creator>
            <pubDate>Thu, 01 Feb 2018 18:27:15 GMT</pubDate>
            <atom:updated>2018-02-09T21:08:00.041Z</atom:updated>
            <content:encoded><![CDATA[<p>We have just initiated the re-airdrop of OMG tokens transferred to Golem’s multisig.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/780/1*sc7CKTeN_GcwjrR8uG3aew.jpeg" /><figcaption>Airdrop Image under Creative Commons License</figcaption></figure><p><strong>Important:</strong> <em>We will not request anything from your side. Any e-mail, website, etc. asking you to do something for the re-airdrop is fake. Remember, </em><strong><em>you do not have to do anything</em></strong><em>, just wait for your OMG to arrive. If anyone reaches out and asks you for information to participate in the OMG airdrop they are trying to scam you. If you come across any potential scams or other malicious behavior regarding this airdrop please notify us via contact@golem.network.</em></p><p>We will use the distribution of GNT from block 4269226 (13–07–2017 10:46:05 UTC), which is the block when a portion of OMG was transferred to Golem’s multisig. The amount for re-airdrop is 29,303.67 OMG. Here is an overview of the process and what you need to know going forward:</p><ul><li>Golem is going to redistribute OMG tokens sent to Golem multisig wallet <a href="https://etherscan.io/address/0x7da82C7AB4771ff031b66538D2fB9b0B047f6CF9">0x7da82C7AB4771ff031b66538D2fB9b0B047f6CF9</a> in the OMG airdrop.</li><li>Golem received OMG tokens in the transaction <a href="https://etherscan.io/tx/0xa9cd19cdb0f7a7ba4ffa56950bb961f1efa50eb40a6d7441b10047f658d9e51f">0xa9cd19cdb0f7a7ba4ffa56950bb961f1efa50eb40a6d7441b10047f658d9e51f</a> in block <a href="https://etherscan.io/block/4269226">4269226</a>.</li><li>The distribution of OMG tokens available in Golem’s multisig to GNT holders has been calculated according to GNT balances in the same block 4269226.</li><li>Addresses of wallets owned by Golem and Golem team have been filtered out and will not receive any OMG.</li><li>The minimum GNT balance required to receive any OMG was ~ 25633 GNT. Holders with this amount will receive just above 1 OMG.</li><li>1547 GNT addresses meet the requirements for the re-airdrop.</li><li>If you held more than 25633 GNT at the time of the block your allotment will be proportional to your holding.</li><li>The transfers are going to be executed in 30 batch transactions of 50 using a helper contract.</li></ul><p><strong>Reminder: you are responsible for your own security. Avoid phishing traps by sticking to official sources.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=403ef9e379f4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/golem-project/re-airdrop-of-omg-tokens-403ef9e379f4">Re-airdrop of OMG tokens</a> was originally published in <a href="https://medium.com/golem-project">The Golem Project</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Find $10M Just by Reading the Blockchain]]></title>
            <link>https://medium.com/golem-project/how-to-find-10m-by-just-reading-blockchain-6ae9d39fcd95?source=rss-68218f86e690------2</link>
            <guid isPermaLink="false">https://medium.com/p/6ae9d39fcd95</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <dc:creator><![CDATA[Paweł Bylica]]></dc:creator>
            <pubDate>Thu, 06 Apr 2017 10:24:19 GMT</pubDate>
            <atom:updated>2017-04-06T12:00:42.493Z</atom:updated>
            <content:encoded><![CDATA[<p>Two weeks ago, one Golem enthusiast and GNT holder reported a strange <a href="https://etherscan.io/tx/0x0213fb70e8174c5cbd9233a8e95905462cd7f1b498c12ff5e8ec071f4cc99347">GNT transfer transaction</a> bug. After investigating the data attached to the transaction, I discovered that there <em>had</em> to be a problem in the way the exchange was preparing data for the transaction. “<em>Oh no,”</em> I thought, “<em>this bug could be used to empty the whole GNT account on the exchange!”</em> And quite a large number of tokens were stored there!</p><p>The bug was indeed the exchange’s fault, but it was also related to the way Ethereum contracts see the transaction input data and Solidity ABI (e.g. the way the methods of Solidity contracts encode and decode arguments). So of course it was not specific to GNT, but indeed to <em>all</em> ERC20 tokens, as well as other contracts which have transfer-like methods. Yes you read it right: this could potentially work for <em>any</em> Ethereum-based token listed on said exchange, if only withdrawals were managed in the same way as GNT. We do not know this to be the case, but assume it was very likely.</p><h3>Ethereum Contract ABI</h3><p>Raw Ethereum contracts have neither methods nor functions. Methods are features of high level languages like Solidity, and they use the Ethereum Contract ABI to specify how a contract’s bytecode is divided into methods, as well as how different types of arguments are encoded in transaction input data. <em>(See </em><a href="https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI"><em>https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI</em></a><em> for a reference.)</em></p><p>To invoke the transfer(address a, uint v) method of the GNT contract to transfer 1 GNT to address 0xabcabcabcabcabcabcabcabcabcabcabcabcabca one needs to include 3 pieces of data:</p><ul><li>4 bytes, being the method id: a9059cbb</li><li>32 bytes, with the destination address (20 bytes) filled with leading zeros: 000000000000000000000000abcabcabcabcabcabcabcabcabcabcabcabcabca</li><li>32 bytes, being the value to transfer, 1 * 10¹⁸ GNT: 0000000000000000000000000000000000000000000000000de0b6b3a7640000</li></ul><p>The full transaction would therefore look like this: a9059cbb000000000000000000000000abcabcabcabcabcabcabcabcabcabcabcabcabca0000000000000000000000000000000000000000000000000de0b6b3a7640000.</p><h3>Transaction input data is infinite</h3><p>This is one of the messier aspects of the Ethereum Virtual Machine, but it is critical to understanding the issue fully. The EVM can read bytes of any given input data offset using CALLDATALOADopcode. If the data in this offset is not provided in the transaction by the transaction creator, the EVM will get zeros as the answer. At the same time, the contract is able to check the real length of the provided transaction input data with the CALLDATASIZE opcode.</p><h3>The bug</h3><p>The service preparing the data for token transfers assumed that users will input 20-byte long addresses, but the length of the addresses was not actually checked. In the aforementioned transaction, the user filled in an invalid address of a shorter length: 79735. The resulting data was malformed because the address argument took 14.5 bytes (12 bytes for leading zeros + 4.5 bytes from user input). To be precise, the transaction data was fine for the Ethereum platform as it does not care about data included in the transactions except applying fee for every byte. The only reason why the token transfer was not executed by the GNT contract was that the amount in the transaction was ridiculously high (higher than the total supply, and <em>of course</em> higher than the balance of the address in question). The owner of the address was really quite lucky in that the user used such a short string for the address: with some (bad) luck, the user would be able to <em>*</em><strong><em>incidentally</em></strong><em>* empty the address of all GNT and send them to some random address</em>. This is when we realized that bug could also be used for attack, and was very serious.</p><h3>The possible attack</h3><p>As you may have noticed, allowing a user to input a shorter transfer address shifts the “amount of tokens to transfer” value to the left, making the value larger. It is also very easy to find a private key to an Ethereum address with zeros in the end of the address, e.g. 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000.</p><p>Therefore, the owner of this address can enter 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (skipping zeros) in the service interface. The attacker could then order a transfer of some value X from the service, to the inserted malformed address. This would actually cause a transfer of a value shifted by 16 bits, i.e. 65536 times larger than X, to attacker’s Ethereum account!</p><h3>What we have done about it?</h3><p>Once identifying the possible attack, we contacted the exchange and informed them about the bug. That was a surprisingly difficult and annoying process; our CEO Julian had a call with a support line whose representative didn’t want to listen, and continued shouting that bugs are not his business, and was refusing to redirect us further up in the chain of command. Eventually however, after couple of hours of this, Alex managed to put us through to the CEO level, and our message went through. Once we heard confirmation that bug was fixed, we reached out to other exchanges. While we had no reason to assume that they were vulnerable, we also had no reason to assume the opposite. While we have to admit that we have not tested that for other exchanges or other tokens, we were shocked and a little bit terrified to realize the potential consequences of someone taking advantage of that bug for multiple tokens on multiple exchanges: The entire Ethereum token economy and startup ecosystem might be set back by years.</p><h3>What can Ethereum do about this?</h3><p>While I don’t think the Ethereum developers can do much more than continuing to educate the public about how the Ethereum actually works, we might suggest additional checks added in the future versions of Solidity, for example validating that the transaction input data length matches the expected data for the given contract method.</p><h3>What should exchanges absolutely do about this?</h3><ol><li>Verify user input as strictly as possible. Simply checking the length of an address provided by a user secures them from the described attack. Moreover, validate the Ethereum address checksum if available (see <a href="http://ethereum.stackexchange.com/a/1379/489">EIP55</a>), or even accept addresses <em>exclusively</em> with checksums. This both increases both security and user-friendliness.</li><li>Make sure that transaction data is properly encoded.</li><li>The generated transaction data might be also parsed back and checked against given user input.</li><li>Check if other parameters like gas, gas price, and the destination address of the generated transaction matches the expected values.</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6ae9d39fcd95" width="1" height="1" alt=""><hr><p><a href="https://medium.com/golem-project/how-to-find-10m-by-just-reading-blockchain-6ae9d39fcd95">How to Find $10M Just by Reading the Blockchain</a> was originally published in <a href="https://medium.com/golem-project">The Golem Project</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Ethereum?]]></title>
            <link>https://medium.com/golem-project/why-ethereum-b398df34df9b?source=rss-68218f86e690------2</link>
            <guid isPermaLink="false">https://medium.com/p/b398df34df9b</guid>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[p2p]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Paweł Bylica]]></dc:creator>
            <pubDate>Tue, 17 May 2016 16:11:21 GMT</pubDate>
            <atom:updated>2016-05-17T16:11:21.108Z</atom:updated>
            <content:encoded><![CDATA[<p>The Golem Project is about creating a technology enabling users to trade idle time of their computers. However, this requires a mean for requestors (those seeking more computing power) to transfer remuneration to providers (those providing spare computing power) in exchange for their services. We have chosen Ethereum to do the job.</p><h3>Ethereum project is more than smart contracts</h3><p>Ethereum is all about a new cryptocurrency, smart contracts, the world computer, right? That is just the first piece of the puzzle. It is probably the biggest, the most famous and the most advanced system in comparison to anything else out there. But people behind the Ethereum project have also designed and created other peer-to-peer solutions and technologies:</p><ul><li>Ethereum is powered by the <a href="https://github.com/ethereum/devp2p/blob/master/rlpx.md">Cryptographic Network &amp; Transport Protocol RLPx</a>, also known as ÐΞVp2p after the names of its implementing software libraries. It is just one of the RLPx subprotocols. What about creating a P2P protocol for your application? Why not base it on RLPx/ÐΞVp2p?</li><li><a href="https://github.com/ethereum/wiki/wiki/Whisper">Whisper</a> is a communications protocol designed for internal use by decentralized applications. It allows peers to exchange and broadcast encrypted messages within the same network. Ethereum does not interfere with the blockchain and messages are delivered free of charge.</li><li><a href="https://github.com/ethersphere/swarm">Swarm</a> is a distributed storage platform and a content distribution service — yet another network protocol based on RLPx. This is a platform where applications can store their resources. We think about using such a platform for Golem to distribute resources needed for computing tasks.</li></ul><p>Moreover, the Ethereum components are available in many programming languages, including Go, C++, Rust, Python, JavaScript. This is quite impressive considering the complexity of the project and the fact that it has been launched today. This is also great news for startup projects that aim at preparing prototypes in short time cycles.</p><p>So, Ethereum is not only a breakthrough for the blockchain technology. It also creates a great environment and vibrant community for us, who are very much inside the new P2P Internet. It is a great source of software components, protocol designs or inspirations. So why do we need Ethereum in the Golem Project?</p><h3>Highly extensible solution for payments</h3><p>The Golem Network requires a reliable payment system to automatically transfer value between network peers. At the end, a peer should get a reward for computing done on behalf of others. The Golem Network is a peer-to-peer network, so the payment system must be decentralized as well. The blockchain-based technologies are natural candidates. So why is it Ethereum that we chose among other solutions?</p><p>The value of a single payment processed by the Golem Network is very low. We call them nanopayments. However, the problem with nanopayments is that transaction fees have to be even smaller. Ethereum allowed us to design a payment scheme where smart contracts act as an intermediary: we optimized the costs of the payment system by using the Bank of Deposit smart contract as the central payment proxy. This solution aggregates payments and sends them as a single Ethereum transfer to save on fees. It is nothing new, nor very “smart”; it is usually referred to as <a href="https://blog.ethereum.org/2014/09/17/scalability-part-1-building-top/">transaction batching</a>. E.g. the cost of 10 payments processed in a single transaction is half of 10 payments processed in 10 transactions. And the lower the fee, the more payments you are able to aggregate.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/514/1*NNnTMOLRyq5lv2PYR8035Q.png" /><figcaption>Batch payments in Golem network</figcaption></figure><p>Transaction batching makes Golem feasible for our initial use cases at the present costs of gas. But this is just the beginning: we decreased the transaction cost even further by introducing a probabilistic payment scheme. See <a href="http://golemproject.net/doc/GolemNanopayments.pdf">A Probabilistic Nanopayment Scheme for Golem</a> for more details.</p><p>Apart from lower transaction costs, the central contract, which proxies all payments, opens up a number of opportunities, like imposing (voluntary or obligatory) fees on transactions within the Golem Network; or introducing escrow-like solutions for improved security; or compensation for the use of third-party software in the software-as-a-service model, where the Golem Network serves as a platform-as-a-service. Especially the latter opens up a broad spectrum of business applications that can be used in the Golem Network. So it does not only compete with cloud providers, but can serve as a distribution channel for software developers — both in a proprietary and an open source model.</p><p>So, are you frustrated that you can only buy DAO tokens with your Ethers? Worry no more, soon you will be able to buy much more using Golem!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b398df34df9b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/golem-project/why-ethereum-b398df34df9b">Why Ethereum?</a> was originally published in <a href="https://medium.com/golem-project">The Golem Project</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>