<?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[Marcin Zduniak's Notes]]></title><description><![CDATA[Marcin Zduniak's Notes]]></description><link>https://zduniak.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 13:49:18 GMT</lastBuildDate><atom:link href="https://zduniak.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Drone Programming basics]]></title><description><![CDATA[https://youtu.be/LmEcyQnfpDA?si=RAaITicNLVnbfR-P]]></description><link>https://zduniak.com/drone-programming-basics</link><guid isPermaLink="true">https://zduniak.com/drone-programming-basics</guid><category><![CDATA[drone]]></category><category><![CDATA[Programming Blogs]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Tue, 21 May 2024 22:00:00 GMT</pubDate><content:encoded><![CDATA[<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/LmEcyQnfpDA?si=RAaITicNLVnbfR-P">https://youtu.be/LmEcyQnfpDA?si=RAaITicNLVnbfR-P</a></div>
]]></content:encoded></item><item><title><![CDATA[Solana learning materials]]></title><description><![CDATA[Solana Frontend Crash Course presentation

Solana tech videos]]></description><link>https://zduniak.com/solana-learning-materials</link><guid isPermaLink="true">https://zduniak.com/solana-learning-materials</guid><category><![CDATA[Solana]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Sun, 05 May 2024 22:00:00 GMT</pubDate><content:encoded><![CDATA[<ul>
<li><p><a target="_blank" href="https://docs.google.com/presentation/d/11GUcrzsY5lD72sWRr6lVhL_5OLCJkWoM-kxGifJPEHU/edit#slide=id.g1fd997e3698_0_472">Solana Frontend Crash Course presentation</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/@SolanaFndn">Solana tech videos</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Restricting access to the website to certain sanctioned countries]]></title><description><![CDATA[Often, in my projects, there is a need to somehow block access to some parts of the application to people connected from certain sanctioned or otherwise restricted jurisdictions. Doing it on the front end is usually not the best approach, but often, ...]]></description><link>https://zduniak.com/restricting-access-to-the-website-to-certain-sanctioned-countries</link><guid isPermaLink="true">https://zduniak.com/restricting-access-to-the-website-to-certain-sanctioned-countries</guid><category><![CDATA[ipfs]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[sanctions]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Tue, 05 Dec 2023 17:10:07 GMT</pubDate><content:encoded><![CDATA[<p>Often, in my projects, there is a need to somehow block access to some parts of the application to people connected from certain sanctioned or otherwise restricted jurisdictions. Doing it on the front end is usually not the best approach, but often, for blockchain projects that do not have any backend components, that might be the only option. Below is a small snippet of the code of how we did it using external APIs. This code can even run on a website powered by IPFS, i.e., without any single backend/server in your infrastructure.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> blockedCountries = [
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"VG"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"British Virgin Islands"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"PA"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Panama"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"BY"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Belarus"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"CU"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Cuba"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"IR"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Iran"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"IQ"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Iraq"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"CI"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Côte d'Ivoire"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"LR"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Liberia"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"KP"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"North Korea"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"SD"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Sudan"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"SY"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Syria"</span> },
  { <span class="hljs-attr">code</span>: <span class="hljs-string">"ZW"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"Zimbabwe"</span> },
];

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> isCountryBlocked = <span class="hljs-keyword">async</span> () =&gt; {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-comment">// Get the user's IP address</span>
    <span class="hljs-keyword">const</span> ipResponse = <span class="hljs-keyword">await</span> axios.get(<span class="hljs-string">"https://api.ipify.org/?format=json"</span>);
    <span class="hljs-keyword">const</span> ipAddress = ipResponse.data.ip;

    <span class="hljs-comment">// Get the user's country</span>
    <span class="hljs-keyword">const</span> locationResponse = <span class="hljs-keyword">await</span> axios.get(<span class="hljs-string">`https://api.iplocation.net/?cmd=ip-country&amp;ip=<span class="hljs-subst">${ ipAddress }</span>`</span>);
    <span class="hljs-keyword">const</span> countryCode = locationResponse.data.country_code2;

    <span class="hljs-comment">// Check if the country is blocked</span>
    <span class="hljs-keyword">const</span> blockedCountry = blockedCountries.find(<span class="hljs-function">(<span class="hljs-params">country</span>) =&gt;</span> country.code === countryCode);
    <span class="hljs-keyword">return</span> blockedCountry !== <span class="hljs-literal">undefined</span>;
  } <span class="hljs-keyword">catch</span> (error) {
    notify(error);
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>; <span class="hljs-comment">// Assume country is not blocked if there's an error</span>
  }
};
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Account Abstraction resources]]></title><description><![CDATA[I have been studying quite a lot about Account abstraction and ERC-4337 recently. I will point out here some resources worth reviewing:

Walk through a thinking process of arriving at the current AA design, showing which problems had to be resolved a...]]></description><link>https://zduniak.com/account-abstraction-resources</link><guid isPermaLink="true">https://zduniak.com/account-abstraction-resources</guid><category><![CDATA[account abstraction]]></category><category><![CDATA[ethereum smart contracts]]></category><category><![CDATA[Ethereum]]></category><category><![CDATA[ERC-4337]]></category><category><![CDATA[eip-4337]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Thu, 30 Nov 2023 23:00:00 GMT</pubDate><content:encoded><![CDATA[<p>I have been studying quite a lot about <a target="_blank" href="https://ethereum.org/en/roadmap/account-abstraction/">Account abstraction</a> and <a target="_blank" href="https://www.erc4337.io">ERC-4337</a> recently. I will point out here some resources worth reviewing:</p>
<ul>
<li><p>Walk through a thinking process of arriving at the current AA design, showing which problems had to be resolved along the way: <a target="_blank" href="https://www.alchemy.com/blog/account-abstraction">https://www.alchemy.com/blog/account-abstraction</a></p>
</li>
<li><p>Modularization of AA: <a target="_blank" href="https://blog.rhinestone.wtf/modulekit-deep-dive-ad84ee0797c6">https://blog.rhinestone.wtf/modulekit-deep-dive-ad84ee0797c6</a></p>
</li>
<li><p>Early experimentation with AA by Visa: <a target="_blank" href="https://usa.visa.com/solutions/crypto/auto-payments-for-self-custodial-wallets.html">https://usa.visa.com/solutions/crypto/auto-payments-for-self-custodial-wallets.html</a></p>
</li>
<li><p>Panther Protocol explanation of AA: <a target="_blank" href="https://blog.pantherprotocol.io/ethereum-account-abstraction-everything-you-need-to-know/">https://blog.pantherprotocol.io/ethereum-account-abstraction-everything-you-need-to-know/</a></p>
</li>
<li><p>SDK facilitating operations on AA: <a target="_blank" href="https://accountkit.alchemy.com/overview/why-account-kit.html">https://accountkit.alchemy.com</a></p>
</li>
<li><p>Safe Wallet implementation for AA: <a target="_blank" href="https://safe.global/core">https://safe.global/core</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Blockchain Fintech: History of innovation]]></title><description><![CDATA[Innovations come to existence through different means and circumstances. Some of them start as meticulously planned inventions. Others – due to pure luck and uncontrollable external conditions. It’s never just one source that transforms promising inn...]]></description><link>https://zduniak.com/blockchain-fintech-history-of-innovation</link><guid isPermaLink="true">https://zduniak.com/blockchain-fintech-history-of-innovation</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[fintech]]></category><category><![CDATA[fintech software development]]></category><category><![CDATA[Blockchain technology]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Wed, 01 Aug 2018 22:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-innovations-come-to-existence-through-different-means-and-circumstances-some-of-them-start-as-meticulously-planned-inventions-others-due-to-pure-luck-and-uncontrollable-external-conditions-its-never-just-one-source-that-transforms-promising-innovation-into-a-successful-product-or-services-its-usually-mix-of-different-factors-what-about-fintech-innovation-and-blockchain-fintech-challenges-was-it-luck-or-the-invisible-hand-of-the-free-market-ill-have-to-give-you-a-bit-of-history-first"><strong>Innovations come to existence through different means and circumstances. Some of them start as meticulously planned inventions. Others – due to pure luck and uncontrollable external conditions. It’s never just one source that transforms promising innovation into a successful product or services. It’s usually mix of different factors. What about Fintech innovation, and blockchain Fintech challenges? Was it luck or the Invisible Hand of the Free Market? I’ll have to give you a bit of history first.</strong></h4>
<h2 id="heading-lets-go-back-a-decade"><strong>Let’s go back a decade…</strong></h2>
<p>We can’t talk about blockchain Fintech without mentioning Bitcoin. Bitcoin was the first successful decentralized cryptocurrency. It launched, at least as far as we can tell, before the financial crisis of 2008. In Bitcoin’s genesis block (the very first block created by Satoshi) there’s even a reference to a Times article mentioning a banks bailout program. There were several pre-crisis signs that could ignite Satoshi’s vision and spark Fintech innovation.</p>
<ul>
<li><p>fractional-reserve banking</p>
</li>
<li><p>lack of transparency in government monetary decisions (inflation, printing new money)</p>
</li>
<li><p>greedy financial institutions creating financial products to benefit mainly themselves (subprime mortgage derivatives)</p>
</li>
</ul>
<p>Satoshi worked towards creating a truly stateless currency that would be used directly between parties. The parties interested would trade (person to person or between businesses) without any third party who could stop, corrupt, ban or censor transactions.</p>
<h2 id="heading-financial-crisis"><strong>Financial crisis</strong></h2>
<p>This ‘shock to the system’ amplified the focus on cryptocurrencies and its values in later years. We could see this during the <a target="_blank" href="https://en.wikipedia.org/wiki/Greek_government-debt_crisis"><strong>Greek government debt crisis</strong></a> and later during the <a target="_blank" href="https://en.wikipedia.org/wiki/2012%E2%80%9313_Cypriot_financial_crisis">Cypriot financial crisis</a>. Statistics gathered by Google Trends show how often people searched for the term “bitcoin” in Google. During these times of hardship, you could see a <a target="_blank" href="https://twitter.com/cburniske/status/896380577871536130/photo/1">correlation</a> between the economic climate and the Bitcoin price on major crypto exchanges. It shows that <strong>people were trying to partially escape from certain ‘difficult’ currencies</strong>. For instance, EUR deposits of some Cypriots were confiscated in 50% at that time. People considered moving to something that they saw as <strong>less susceptible to government oppression</strong>.</p>
<h2 id="heading-blockchain-fintech-technology-stack"><strong>Blockchain FinTech technology stack</strong></h2>
<p>The above mentioned source of innovation helped cryptocurrencies to form their basic manifesto and define their initial properties. But to exist and work as advertised, cryptocurrencies needed a sophisticated technology stack. In its core, Bitcoin and other cryptocurrencies created later derive a lot from other technologies, created much earlier. This can be regarded as part of a ‘Watching others’ source of Fintech innovation. Starting with the <a target="_blank" href="https://bitcoin.org/bitcoin.pdf">Bitcoin White Paper</a> that refers to such inventions as: hash functions (<a target="_blank" href="https://en.wikipedia.org/wiki/SHA-2">SHA256</a>) for anonymizing data and summarizing digital signatures, <a target="_blank" href="https://en.wikipedia.org/wiki/Elliptic-curve_cryptography">Elliptic Curve Cryptography</a> for signing transactions and <a target="_blank" href="http://www.hashcash.org/papers/hashcash.pdf">Hashcash</a> for its proof of work algorithm. <strong>All of these technologies have existed much earlier than Bitcoin</strong> (some even 50 years earlier). However, they created the product we now know only <strong>in combination</strong>.</p>
<p>Cryptocurrencies created after the publication of the Bitcoin protocol  derive a lot from Bitcoin itself, but also from other inventions and technologies. These include: quantum computing, <a target="_blank" href="https://en.wikipedia.org/wiki/Schnorr_signature">Schnorr signatures</a>, Scrypt algorithm, Ring signatures, <a target="_blank" href="https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/">zero-knowledge proofs</a>, <a target="_blank" href="https://github.com/ethereum/wiki/wiki/White-Paper#computation-and-turing-completeness">Turing-complete</a> programming languages for smart contract development or many more. All of these inventions were and are mixed and matched together, forming remarkable combination of various cryptocurrencies with distinct features.</p>
<p>Suddenly, entrepreneurs had many options to choose from to build products on top of existing cryptocurrencies. This spurred the ‘Recombination’ source of Fintech innovation. Companies and individuals from various industries started to look how they could <strong>utilize blockchains and cryptocurrencies in their fields of expertise</strong>. Also, they considered how they can disrupt other industries with trustless principles.</p>
<h2 id="heading-the-cloud"><strong>The cloud</strong></h2>
<p>From <strong>cloud computing providers</strong> (experienced with delivering easy-to-use development experience) to <strong>software developers interested in particular technologies</strong>: various people started to offer blockchain-based technologies in the <a target="_blank" href="https://azure.microsoft.com/en-us/solutions/blockchain/">cloud</a>. These were pre-configured and ready to use, for everybody who wanted to experiment. All without spending days or weeks on proper configuration of the servers and setting up nodes.</p>
<p>Things became easier then for blockchain Fintech innovators. Insurance companies started to work on top of blockchain technologies like <a target="_blank" href="https://www.r3.com/blog/portfolio-item/r3-and-acord-launch-insurance-industry-centre-of-excellence-for-distributed-ledger-technology/">R3 Corda</a>. Small insurance startups now experiment with blockchain technologies to offer products that aren’t feasible for other technologies (<a target="_blank" href="https://tontinetrust.com/">Tontine Trust</a>). Financial startups try to reposition funds and assets settlement <a target="_blank" href="https://www.setl.io/opencsd/">markets</a>. <a target="_blank" href="https://www.setl.io/opencsd/">Internet of Things (IoT) firms</a> are looking at blockchains to <strong>safeguard access to devices</strong> and to make sure data gathered by the IoT monitoring devices are not tampered with.</p>
<h2 id="heading-risks-and-regulations"><strong>Risks and regulations</strong></h2>
<p>As the technological, social, financial and business revolution progresses, there are new risks emerging. We couldn’t anticipate them: lost of access to investors’ fund, complex fraud schemes, Ponzi schemes using cryptocurrencies, money laundering, breaches to capital controls or financing terrorism. No government would turn a blind eye on these problems. Hence, we are seeing various forms of regulations popping up in different parts of the world, trying to curb some of the risks observed. Some of these regulations try to ban a particular form of cryptocurrency activities. Others are trying to stop some of the business participants from using crypto. These <a target="_blank" href="https://espeoblockchain.com/blog/blockchain-regulation/">blockchain regulations</a>, constraints and additional external factors drive further innovations in cryptocurrencies. How? Creators try to make them regulatory compliant and still useful for the consumers.</p>
<h2 id="heading-the-ico-as-fintech-innovation"><strong>The ICO as FinTech innovation</strong></h2>
<p>Cryptocurrencies show up more and more often in mass media. There’s a heightened awareness that there are more investments coming into  crypto projects, especially from non-professional investors in form of the <a target="_blank" href="https://www.investopedia.com/terms/i/initial-coin-offering-ico.asp">ICO</a>. These investments are driven mainly by sophisticated and innovative <strong>marketing campaigns</strong>. They target private investors with relatively small capitals, but open to invest in high-risk ventures. There are advertising agencies solely created to support the needs of this type of activity. This Fintech innovation is curbed to some extent. Regulatory requirements change towards investments in risky startups, spurring even more innovations on the verge of these two competing forces. These include blockchain-based KYC or blockchain identities project.</p>
<h2 id="heading-academia"><strong>Academia!</strong></h2>
<p>I’ve been calling it Fintech innovation but to be honest, blockchain penetrates various disciplines. Finance, technology, governance or social needs. No wonder it receives <strong>academic attention</strong>. It’s pushing curious scientific communities to look into blockchain deeper and to conduct research projects on it and its potentials. Institutions like <a target="_blank" href="https://www.media.mit.edu/">MIT Media Lab</a>, <a target="_blank" href="http://www.initc3.org/">Cornell University</a> or <a target="_blank" href="https://digitalcurrency.unic.ac.cy/">University of Nicosia</a> are investing substantial money and involving top researchers and lecturers to deepen our understanding of this innovation. What’s more, they spin-off further developments on top of their research outcomes. In addition to research institutions, there are also commercially-led research projects. A good example is <a target="_blank" href="https://blockstream.com/technology/">Blockstream</a> with their impressive list of Bitcoin Core developers involved. There’s also individual lead research (for example <a target="_blank" href="https://github.com/ignopeverell/grin/blob/master/doc/intro.md">MimbleWimble</a>).</p>
<h2 id="heading-design-driven-innovation"><strong>Design-driven innovation</strong></h2>
<p>Some blockchain Fintech innovators try to create completely new values in this space. They start from a different angle. Rather than innovating on top of the existing technologies and amending them, they try more of a design-driven approach. They learn from other projects’ mistakes and build better initial concepts. Then, basing on those concepts, they build new technologies better suited to fulfill different users’ needs. An example might be <a target="_blank" href="https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md">EOS</a>. It was designed from scratch for massive scale, built from earlier experiments with BitShares technology.</p>
<h2 id="heading-the-frustrated-user-as-a-source-of-innovation"><strong>The frustrated user as a source of innovation</strong></h2>
<p>Yet another Fintech innovation comes from the needs of the end users. It’s designed and developed by the frustrated (but technically capable) users. Examples could be <strong>cryptocurrency mixers</strong>. These try to hide the source and destination of the funds transfers in public ledgers by mixing many transactions into one. Another example is <strong>Monero</strong>, which tries to hide transfer details by cryptographic techniques.</p>
<p>As technology matures, and less technical users can begin to use it, ‘User innovation’ begins. <strong>Smart contract platforms were initially very complex to use.</strong> Now, they’re becoming more and more approachable. As an example, I’ll mention the <strong>Ethereum Solidity</strong> programming language (btw, do check out our <a target="_blank" href="https://espeoblockchain.com/blog/smart-contracts-explained/">Solidity tutorial</a>). It’s very similar to JavaScript, and it opened smart contract development – and blockchain Fintech opportunities – to Web Developers.</p>
<p>This is further simplified by <strong>WYSIWYG-type of innovative platforms</strong> that will allow users to create sophisticated contracts by only interacting with intuitive wizards. ICOs are also an example of user-inspired innovations. <strong>Capital or years of development expertise might no longer be needed to set up innovative companies</strong>. If the project has enough convincing factors, an enthusiastic team behind it, it might get the funding needed to start off the ground.</p>
<h2 id="heading-so-what-do-you-need-to-be-an-innovator"><strong>So what do you need to be an innovator?</strong></h2>
<p>Each innovation is different and each can come into life differently.  I hope that I’ve managed to explain how blockchain Fintech came to be . What I can tell you is that at the beginning, innovation <strong>definitely needs sufficient resources</strong>. These can be financial resources or a dedicated team focused on delivery. Those resources promote it to the stage where you can observe its value. Over time, as the snowball effect takes place, a different type of  participant enters. And by mixing and matching one type of innovation with other innovations these varied participants create products that nobody even thought of at the beginning. This is the way industry disruption works. This same cycle happens until a new and significantly superior invention appears and takes its place. Then, the cycle starts from the beginning….</p>
]]></content:encoded></item><item><title><![CDATA[How blockchain traceability can change your organization]]></title><description><![CDATA[Businesses, governments – various entities can benefit from decentralization. However, even criminals may derive some use from decentralized operation modes and various cryptographic primitives. The goals and objectives of those three categories of o...]]></description><link>https://zduniak.com/how-blockchain-traceability-can-change-your-organization</link><guid isPermaLink="true">https://zduniak.com/how-blockchain-traceability-can-change-your-organization</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Blockchain technology]]></category><category><![CDATA[Blockchain development]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Thu, 12 Jul 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-businesses-governments-various-entities-can-benefit-from-decentralization-however-even-criminals-may-derive-some-use-from-decentralized-operation-modes-and-various-cryptographic-primitives-the-goals-and-objectives-of-those-three-categories-of-organizations-are-different-so-the-way-blockchain-traceability-can-be-used-also-varies-ill-look-at-predictive-markets-daos-and-crypto-anonymity"><strong>Businesses, governments – various entities can benefit from decentralization. However, even criminals may derive some use from decentralized operation modes and various cryptographic primitives. The goals and objectives of those three categories of organizations are different, so the way blockchain traceability can be used also varies. I’ll look at predictive markets, DAOs …and crypto anonymity.</strong></h4>
<h2 id="heading-businesses-and-blockchain-traceability-amp-transparency"><strong>Businesses and blockchain traceability &amp; transparency</strong></h2>
<p>Businesses (for-profit organizations) owned by  groups of shareholders often value the <strong>transparency</strong> of the way the organization is run. Those organizations aren’t led by a single person, but by an elected group of directors. The most fundamental feature of businesses governed by smart contracts is that <strong>all of the transactions and decisions are stored in a publicly verifiable ledger</strong>. This sort of businesses can be called a DAO (a <a target="_blank" href="https://espeoblockchain.com/blog/decentralized-organization/">decentralized organization</a>). No director can refute the decisions they make, as their cryptographic signatures can’t be forged (direct accountability).</p>
<p>In DAOs, shareholders or members also have a direct and immediate <strong>impact on the direction of growth and future decisions</strong>. All costs or expenses in organizations like that are accountable, including employee remuneration. In an environment like that any gender, religious, political or other biases can’t exist.</p>
<h2 id="heading-governments-and-prediction-markets"><strong>Governments and prediction markets</strong></h2>
<p>Governments run in a decentralized mode are a form of a larger DAO. There are some thought experiments to organize governments in the form of a <a target="_blank" href="https://blog.ethereum.org/2014/08/21/introduction-futarchy/"><strong>futarchy</strong></a>. In a futarchy, the <strong>legislative branch bases on the results of prediction markets</strong>. Prediction markets are sort of like betting or voting systems, and they proved to be an accurate way of extracting value from the wisdom of crowds. Any citizen participating in nation-wide prediction markets can have an immediate impact on the bills passed. What’s more, <strong>they can easily see the impact of those bills on their own welfare</strong>. That’s probably the best form of traceability that exists!</p>
<p>As the decisions are transparent (and the assets/value allocation is transparent) the money allocation to projects/bills is <strong>unbiased</strong>, and the money is assigned to <strong>objectively</strong> the best contractors. We won’t see any shady connections between government representatives and their families or friends.</p>
<h2 id="heading-criminal-organizations-blockchain-traceability-vs-anonymity"><strong>Criminal organizations – blockchain traceability vs. anonymity</strong></h2>
<p>Speaking of shady. There’s something we should be aware of. Criminals can also use the blockchain in creative ways, sadly. For example, let’s look at markets that trade in illicit goods or those offering nefarious services. The objective is to <strong>tangle up all the dealings and transactions conducted</strong> to hide both the nature and the parties to the transaction. Seems like something that just won’t work on the blockchain? Wrong. Distributed systems include, most importantly, the <strong>full anonymity of the transacting parties.</strong> These are paired with encryption algorithms of the data exchanged by the parties. This allows such organizations to reach their objectives.</p>
<p><strong>Cryptocurrency systems where you can’t see the parties to the transaction or the actual amounts</strong> (but with full guarantee of the actual value transfer!) are perfect tools for organizations that value their… privacy. If those parties get caught, the <strong>deniability</strong> of the transaction is a vitally important feature. (Un)fortunately, that’s what some of the more complex cryptocurrency systems can offer. Those are the problems regulators should definitely research.</p>
<h2 id="heading-blockchain-for-different-needs"><strong>Blockchain for different needs</strong></h2>
<p>To conclude, various organizations have different needs. <strong>Distributed and blockchain technologies are not one-size-fits-all techniques</strong>. They can combine and match these technologies in different ways. Prediction markets won’t work for all, and neither will an anonymous crypto system. The goal is to end up with features that suit the needs of a given organization. As we can see, they can sometimes provide an answer to <strong>contradicting needs</strong>, such as both transparency and deniability.<br />Just so you know, I’m organizing a <a target="_blank" href="https://espeo.eu/blog/workshops/run-professional-ico-stellar-developers/">workshop on Stellar</a> soon, check it out. Also, if you’re wondering how traceability (or any other feature I wrote about) can work in practice, say, in your company, write to me using the box below.</p>
]]></content:encoded></item><item><title><![CDATA[Trustless off-chain computing on the blockchain]]></title><description><![CDATA[Blockchain technologies as we know now were not designed to sustain massive amount of computation operations: they are slow and extremely costly for such scenarios. Yet for many practical applications meaningful and sometimes massive amount of comput...]]></description><link>https://zduniak.com/trustless-off-chain-computing-on-the-blockchain</link><guid isPermaLink="true">https://zduniak.com/trustless-off-chain-computing-on-the-blockchain</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[offchain ]]></category><category><![CDATA[Trustless]]></category><category><![CDATA[computing]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Mon, 18 Jun 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Blockchain technologies as we know now were not designed to sustain massive amount of computation operations: they are slow and extremely costly for such scenarios. Yet for many practical applications meaningful and sometimes massive amount of computation operations are a must. During the presentation, we will discuss and demonstrate how holding blockchain promises of trustlessness and data immutability we can still implement computation-intensive applications.</p>
<p>Slides from the presentation available below and here: <a target="_blank" href="https://www.slideshare.net/EspeoSoftware/trustless-off-chain-computing-on-the-blockchain">https://www.slideshare.net/EspeoSoftware/trustless-off-chain-computing-on-the-blockchain</a></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.slideshare.net/EspeoSoftware/trustless-off-chain-computing-on-the-blockchain">https://www.slideshare.net/EspeoSoftware/trustless-off-chain-computing-on-the-blockchain</a></div>
]]></content:encoded></item><item><title><![CDATA[How blockchain regulation should look]]></title><description><![CDATA[Despite what you might read online, not all blockchain regulation is bad. Regulations are, in general, necessary. They help businesses thrive on markets that suffer from information asymmetry. What’s more, they also make the industry landscape cleare...]]></description><link>https://zduniak.com/how-blockchain-regulation-should-look</link><guid isPermaLink="true">https://zduniak.com/how-blockchain-regulation-should-look</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Blockchain technology]]></category><category><![CDATA[Blockchain development]]></category><category><![CDATA[Regulations]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Wed, 13 Jun 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-despite-what-you-might-read-online-not-all-blockchain-regulation-is-bad-regulations-are-in-general-necessary-they-help-businesses-thrive-on-markets-that-suffer-from-information-asymmetry-whats-more-they-also-make-the-industry-landscape-clearer-and-sanction-the-governments-approach-towards-it-regulations-also-protect-customers-interests-if-access-to-information-is-limited-or-if-theres-a-constraint-on-competition-between-market-actors-however-blockchain-regulation-can-be-done-wrong-as-weve-seen-in-some-cases-lets-raise-some-questions-and-try-to-look-for-solutions-from-green-addresses-to-exemptions"><strong>Despite what you might read online, not all blockchain regulation is bad. Regulations are, in general, necessary. They help businesses thrive on markets that suffer from information asymmetry. What’s more, they also make the industry landscape clearer and sanction the government’s approach towards it. Regulations also protect customers’ interests if access to information is limited or if there’s a constraint on competition between market actors. However, blockchain regulation can be done wrong, as we’ve seen in some cases. Let’s raise some questions and try to look for solutions: from green addresses to exemptions.</strong></h4>
<h2 id="heading-thinking-cross-nationally"><strong>Thinking cross-nationally</strong></h2>
<p>Regulations are usually national. There are certain cross-national regulations, but they happen only to some extent. You don’t want people financing terrorism, for example. However, it can be <strong>futile to try and regulate companies that operate through using blockchain technologies only on the national level</strong> . That’s because companies can change the jurisdiction of their inc. to avoid unnecessarily harsh blockchain regulation. It would be very beneficial for the whole industry to create <strong>cross-national non-profit organizations and self-governing bodies that can address policy blind spots</strong> . Their members can range from industry representatives to government representatives. They could be tasked with suggesting and promoting good regulatory practices across the members and jurisdictions they represent.</p>
<h2 id="heading-educating"><strong>Educating</strong></h2>
<p><strong>As a technology, blockchain can’t be regulated or banned</strong> , as it’s only a concept/algorithm and a technical data structure. Entities (especially those non-formalized) operating purely on the blockchain that don’t interact with real-world companies <strong>can’t be regulated either</strong>. However, <strong>regulators should also be involved in education campaigns</strong> , spreading awareness of fully decentralized schemes or pointing to risks of suspicious schemes (example <a target="_blank" href="https://en.wikipedia.org/wiki/OneCoin">here</a>).</p>
<h2 id="heading-focusing-on-entities-interacting-with-blockchain"><strong>Focusing on entities interacting with blockchain</strong></h2>
<p>Blockchain regulation should be focused on the <strong>entities that interact with blockchain technologies.</strong> They operate on the blockchain network, offering their services to other real-world consumers or companies. Regulation on this level shouldn’t be much different from what we have for similar non-blockchain services. This includes any financial operations, insurance, logistics, etc.</p>
<h2 id="heading-allowing-exemptions"><strong>Allowing exemptions</strong></h2>
<p>As the technology is very innovative and can create positive change across many industries, there should be <strong>regulatory exemptions</strong> in place. Good examples include blockchain regulations in Switzerland or <a target="_blank" href="http://www.gibraltarfinance.gi/downloads/20170508-dlt-consultation-published-version.pdf">Gibraltar</a> for small-scale operations. They’re measured, for example, by a maximum value of customers’ assets held by the operation without full license or by the exemption time. In these cases, the regulation is won’t limit innovation before it’s able to prove its positive value.</p>
<h2 id="heading-self-regulation"><strong>Self-regulation</strong></h2>
<p>Some fully decentralized schemes can and will impose <strong>self-regulation practices and extreme</strong> <a target="_blank" href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=822385"><strong>transparency</strong></a> . An entire industry built around providing analytical, monitoring and transparency services to existing fully decentralized schemes may <a target="_blank" href="https://medium.com/@MyFunSpirit/eu-commits-%C3%A25-million-to-fund-blockchain-surveillance-research-f818731770b6">emerge</a> . This would increase the customers’ confidence in the schemes. So, <strong>regulators should also promote these practices</strong> – or companies offering them. Regulators and Central Banks can even go one step further and <strong>create national cryptocurrencies</strong> <strong>with self-regulating capabilities</strong> built right into their scheme. Decentralized services built on top of national cryptocurrencies can be considered safer by the end customers. Of course, if the scheme can self-enforce regulation best practices (proper KYC and AML).</p>
<h2 id="heading-anonymous-schemes"><strong>Anonymous schemes</strong></h2>
<p>It’s possible that national governments and regulators may create their technical interfaces/<a target="_blank" href="https://www.webopedia.com/TERM/A/API.html">APIs</a> . For example, for proper tax calculation or for direct sales tax payment. So, those fully decentralized services offering their products to the citizens can become fully compliant with the local regulations <strong>even if they lack any real-world manifestation</strong> . Schemes like that can increase the customer’s safety. What’s more, they contribute to the view that customers can <strong>operate within the law even in the case of fully anonymous schemes</strong> . At the very minimum, regulators have to <a target="_blank" href="https://news.bitcoin.com/japan-sale-bitcoin-exempt-consumption-tax/">clarify their stance</a> on the sales and VAT taxation applications to transactions conducted with blockchain .</p>
<h2 id="heading-using-green-addresses"><strong>Using green addresses</strong></h2>
<p>In some jurisdictions (like China), capital controls, especially the flow of capital abroad, are an important part of regulatory responsibilities. It’s hard to curb Bitcoin transactions as they’re naturally borderless. However, <strong>it’s possible to control all the participants that take part in converting fiat money to Bitcoin</strong> – and vice versa. There’s also the concept of <strong>Green Addresses</strong>. These are Bitcoin addresses that belong to a known and trusted financial institution which also manages the users’ bitcoin wallets. Whenever a user wants to make a transaction from a wallet to an external party, they can send it via its Green Address provider. Then, the outgoing transactions will look as if they’re coming from a trusted address of the Green Addresses provider. <strong>Regulators can require all transactions into and out of exchanges in a given jurisdiction to go via Green Addresses.</strong></p>
<h2 id="heading-fixing-information-asymmetry"><strong>Fixing information asymmetry</strong></h2>
<p>The concept of information asymmetry exists in the general economy. For example, in used cars trading. Let’s say the buyer can’t really tell if a car is good or bad. The seller can easily hide some defects, which leads to increased distrust between two parties. Blockchain technologies can help, as they can provide irrefutable provenance proves. Every object can be traced back to its producer and all the previous owners. Additionally, you have trackable quality assessments and can see all the amendments and repairs ordered in the meantime. This information can’t be removed or hidden from the blockchain. <strong>Regulators could structure market transactions so that proper provenance collection is required for every newly built product</strong> from a certain market. This way, it gradually introduces complete reliability to this market and lowers information asymmetry.</p>
<h2 id="heading-blockchain-regulation-catches-up"><strong>Blockchain regulation catches up</strong></h2>
<p>These are only some of the issues that national regulators have to face. Some advancements were impossible to predict when regulators passed resolutions. It’s a difficult game of catching up. And if you feel you need to catch up with what’s currently allowed and what’s not, go for <a target="_blank" href="https://espeoblockchain.com/blockchain-training/">blockchain training</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Crypto payments: 4 benefits and 3 problems]]></title><description><![CDATA[Most customers don’t buy a technology for its own sake, no matter how novel it is. They are interested in what value it brings to their lives. Digital currencies and crypto payments are no different. Their adoption is slow, as this is a novel technol...]]></description><link>https://zduniak.com/crypto-payments-4-benefits-and-3-problems</link><guid isPermaLink="true">https://zduniak.com/crypto-payments-4-benefits-and-3-problems</guid><category><![CDATA[crypt]]></category><category><![CDATA[Cryptocurrency]]></category><category><![CDATA[payment]]></category><category><![CDATA[payment gateway]]></category><category><![CDATA[fintech]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Tue, 12 Jun 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-most-customers-dont-buy-a-technology-for-its-own-sake-no-matter-how-novel-it-is-they-are-interested-in-what-value-it-brings-to-their-lives-digital-currencies-and-crypto-payments-are-no-different-their-adoption-is-slow-as-this-is-a-novel-technology-that-needs-to-be-recognized-to-become-usable-lets-review-what-sort-of-advantages-and-disadvantages-could-digital-cash-bring-to-the-end-users-in-the-payments-market"><strong>Most customers don’t buy a technology for its own sake, no matter how novel it is. They are interested in what value it brings to their lives. Digital currencies and crypto payments are no different. Their adoption is slow, as this is a novel technology that needs to be recognized to become usable. Let’s review what sort of advantages and disadvantages could digital cash bring to the end users in the payments market.</strong></h4>
<p>To become adopted within a product development process, a new technology – like digital cash – has to bring significant improvements to existing technologies, either in terms of cost saving, function, efficiency or design. Alternatively, many consider it a disruptive innovation — poised to completely replace some existing technologies, processes or products.</p>
<p>In their inception phase, crypto payments were only a technical idea with a proof-of-concept showing that the reasoning behind them is sound. However, without an ease of use factor, large-scale adoption remains limited. This is about to change.</p>
<h2 id="heading-crypto-payments-advantage-1-cost-effectiveness"><strong>Crypto payments advantage #1 – Cost effectiveness</strong></h2>
<p>A major differentiating factor is the applicability of this technology to both domestic payment market needs and transactions for small value amounts as well as to high-value, across-the-globe payments between governments and corporations. <strong>As there are no 3rd parties that need to secure, process and proxy the transactions, costs are pushed down significantly</strong> .</p>
<p>The cost-effectiveness factor of the product also means that we’d be able to use this technology to create products for “unbanked” people. For example, in regions where suppliers can’t offer traditional payment products as they’re not financially viable.</p>
<h2 id="heading-crypto-payments-advantage-2-variety-of-use-cases-for-digital-cash"><strong>Crypto payments advantage #2: Variety of use cases for digital cash</strong></h2>
<p>The second most important advantage of digital currencies is their applicability in vastly varying business scenarios. They support diverse use cases. Digital cash can be tailored to support <strong>person-to-person payment scenarios</strong> , like borrowing money from your colleague for lunch or handing a small amount of pocket money to your kids. However, we could also use them for <strong>regular purchases</strong> , such as online or in-person shopping with brick-and-mortar merchants.</p>
<p>On top of that, the model can also cover much more <strong>complex scenarios</strong> for the <strong>corporate</strong> world. Example: a hierarchically organized group of people controls fund spending. CEOs can make decisions themselves up to some specified monthly limit — or with other board members above that limit. We can apply digital cash to scenarios where the paying party is either online or offline.</p>
<h2 id="heading-crypto-payments-advantage-3-speed-of-transaction"><strong>Crypto payments advantage #3 – Speed of transaction</strong></h2>
<p>The amount of time that user has to wait from the purchase decision to payment confirmation <strong>can be significantly lowered, even to microseconds</strong> . It would only be necessary to check the transaction’s validity using digital currencies and their cryptographic capabilities. You wouldn’t need to wait long seconds for the card transaction to filter through the chain of complex integration networks between intermediaries. Acquiring banks, issuing banks, card schemes, payment gateways – you can remove the requirement for trust in any of these intermediary parties.</p>
<h2 id="heading-crypto-payments-advantage-4-anonymity"><strong>Crypto payments advantage #4 – Anonymity</strong></h2>
<p>For some types of transactions, like donations to a political party, we wouldn’t like to reveal our personal data. Cash offers that feature, but only for in-person payment and only for products of smaller value. Digital currencies, when used properly, reintroduce anonymity. Parties can make transactions for purchases of any value and without any physical or geographical boundaries.</p>
<p>On the other hand, each and every transaction is permanently and irreversibly recorded in the public ledger. So, if a regulatory body only knows one party to the transaction someone could extract valuable information about the payment parties themselves and their past activities from the ledger. This makes digital currencies product compliant with various local and national regulations (KYC, AML or ATF).</p>
<h2 id="heading-problem-1-anonymity"><strong>Problem #1 – …anonymity!</strong></h2>
<p>We should also note some features that can cause problems to crypto payments users. The first one would be… again, anonymity. It can be an advantage, but under some conditions, we can see it as a disadvantage. Shadowy partners in a transaction can cause regulatory interest and even police investigations.<br />What’s more, making sure that a transaction is truly anonymous isn’t easy. You have to take certain technical factors into account. External services on top of a digital currency can assure that, but then you have to trust them to some extent.</p>
<h2 id="heading-problem-2-fraud"><strong>Problem #2 – Fraud</strong></h2>
<p>As with any new means of payment, hackers and fraudsters can target its users in sophisticated and clever ways. <strong>The education process for a new product (like crypto payments) always takes time</strong> . During that time, <strong>users are more vulnerable to various forms of attack</strong> . A lot of unique features of digital currencies (anonymity, cost-effectiveness, lack of intermediaries) stem from the decentralized nature of the technology. But as an end-user, you don’t usually see the decentralization complexities. You rely on the regular communication interfaces available (mobile phone application, web browser sites) which increases your vulnerability. Transactions, by design, are irreversible, no matter if fraudulent or legitimate. This may discourage some users.</p>
<h2 id="heading-problem-3-valuation-swings"><strong>Problem #3 – Valuation swings</strong></h2>
<p>Classical digital currency value isn’t pegged to any national fiat currencies, which can cause big swings in currency valuation. These swings might make the currency unusable for some use cases. In time, <strong>when adoption grows, the swings will be smaller</strong> and spectrum of use cases will increase. However, right now this is a disadvantage. On the same note, if the number of merchants and other parties willing to accept digital cash is small, adoption will remain limited.</p>
<h2 id="heading-what-are-the-properties-of-the-perfect-digital-currency"><strong>What are the properties of the perfect digital currency?</strong></h2>
<p>With all that knowledge, we can try to design a <strong>list of properties the ideal digital currency should have to reach the widest possible adoption</strong>:</p>
<ol>
<li><p>Ease of use, preferably in an already familiar way. For instance, it can interface with some existing means of payments like mobile payments or card initiated payments, QR-codes and NFS.</p>
</li>
<li><p>A regular mobile phone should be enough to make transactions.</p>
</li>
<li><p>Very small cost of usage. This would allow micropayments.</p>
</li>
<li><p>Value-added products and services (loans, investment, savings, corporate products) should be possible to be built on top of the digital currency (expandable, programmable money).</p>
</li>
<li><p>Government sanctioned: it adds legitimacy and greatly widens adoption.</p>
</li>
<li><p>Global reach, acceptable around the world for both online and in-person purchases.</p>
</li>
<li><p>Value pegged to basket of fiat currencies (so that it’s not that volatile and can appeal to various geographical regions).</p>
</li>
</ol>
<p>With these features, the number of uses cases for crypto payments and digital payments is vast and various. Adoption of digital cash can start with <a target="_blank" href="https://espeo.eu/blog/micropayments/">micropayment</a> scenarios, where there is little competition. Gradually, we can move to other more competitive areas. Read more about more <a target="_blank" href="https://espeoblockchain.com/blog/blockchain-business-ideas-challenges/">blockchain business ideas</a> and challenges on our blog – and sign up to our newsletter for more!</p>
]]></content:encoded></item><item><title><![CDATA[Blockchain legal issues with DAOs]]></title><description><![CDATA[In my first article, I covered the benefits and possible problems that come with joining a decentralized organization. Today I’ll focus on some blockchain legal issues concerning DAOs.
Keeping things safe

At its core, DAO was designed as an informal...]]></description><link>https://zduniak.com/blockchain-legal-issues-with-daos</link><guid isPermaLink="true">https://zduniak.com/blockchain-legal-issues-with-daos</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Blockchain technology]]></category><category><![CDATA[Blockchain development]]></category><category><![CDATA[DAOs]]></category><category><![CDATA[DAO]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Thu, 07 Jun 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-in-my-first-article-i-covered-the-benefits-and-possible-problems-that-come-with-joining-a-decentralized-organizationhttpsespeoblockchaincomblogdecentralized-organization-today-ill-focus-on-some-blockchain-legal-issues-concerning-daos"><strong>In my first article, I covered the benefits and possible problems that come with joining a</strong> <a target="_blank" href="https://espeoblockchain.com/blog/decentralized-organization/"><strong>decentralized organization</strong></a><strong>. Today I’ll focus on some blockchain legal issues concerning DAOs.</strong></h4>
<h2 id="heading-keeping-things-safe"><strong>Keeping things safe</strong></h2>
<ol>
<li><p>At its core, DAO was designed as an <strong>informal group of parties which operates entirely within the algorithm of its code</strong> . Theoretically, they can stay anonymous. However, it’s impossible that this code would cover every possible future case. There’s the obligations and interaction mechanisms between different DAOs and between different members and participants of the DAO. Moreover, if there’s no formalized legal structure in place for this entity, courts will impose one. A DAO most resembles a general partnership in which members/partners jointly represent DAO and are liable for its actions and obligations. The DAO may not have assets from which to indemnify third parties. So, it lacks assets or legal form. Therefore, <strong>the court could see the entity as fiction and could allow a lawsuit to proceed against individual members</strong> .</p>
</li>
<li><p>A safe approach for DAO members would be to create <strong>a standard legal entity</strong> to which the DAO belongs. Every change in the DAO membership will have to be reflected in the entity membership/shareholding structure.</p>
</li>
<li><p>A DAO can control cryptoassets. They can represent almost anything, including real-world assets, fiat money, valuable objects like cars, houses or precious metals. Those assets should be put <strong>under control of multisignature wallets</strong> (escrow) which DAO members have control over. Of course, proportionally to their DAO membership shares.</p>
</li>
<li><p>There are <a target="_blank" href="https://aragon.one/network/">initiatives</a> in development that plan to setup <strong>“virtual jurisdiction”</strong> within which DAOs could operate. They could then cooperate with each other safely and with clearly defined rules. What’s more, they could have dedicated arbitration procedures in case of an unresolvable dispute.</p>
</li>
<li><p>A DAO smart contract could also include a clause referring to a <strong>private court which specializes in smart contract disputes</strong>. It’s far better to determine preferred jurisdiction beforehand, than let a plaintiff or a government choose it afterwards.</p>
</li>
</ol>
<h2 id="heading-blockchain-legal-issues-dao"><strong>Blockchain legal issues – DAO</strong></h2>
<ol>
<li><p>In the real world a ‘principal’ is liable for its agent’s actions . Check out <a target="_blank" href="https://www.investopedia.com/terms/a/agencytheory.asp">agency theory</a> for more. An individual developer or software company that created a DAO can be considered as principal in some scenarios. That principal can be <strong>held liable for the actions of the DAO</strong> (and its members) without having any control over them.</p>
</li>
<li><p><strong>Legal language is very different from procedural computer language.</strong> Usually, a software developer isn’t able to express all legal details accurately. Development of specialized smart contract law programming languages is still in its very early stages.</p>
</li>
<li><p><strong>There’s no common way, yet, to represent fiat money</strong> <strong>on the blockchain.</strong> <a target="_blank" href="https://tether.to/">Here’s</a> an attempt. However, most of the traditional contracts still need to represent value using fiat money or <a target="_blank" href="https://digix.global/">precious metals</a> . Possibly, Central Banks can also digitize fiat money on the blockchain. Until that happens, most of the DAOs operations will be very limited in scope.</p>
</li>
<li><p><strong>If we treat a DAO as a for-profit company, there is whole set of unanswered questions.</strong> For example:</p>
<ol>
<li><p>Can DAO members or DAO itself claim expenses against profits?</p>
</li>
<li><p>If the DAO needs to buy a physical asset, whose name goes on the paperwork?</p>
</li>
<li><p>If the DAO creates and patents intellectual property, who’s the registered owner?</p>
</li>
<li><p>How a DAO can own an internet domain when domains still need to be registered to a person or company?</p>
</li>
<li><p>How should taxes be paid if the DAO (or its members) make a profit?</p>
</li>
</ol>
</li>
</ol>
<h2 id="heading-final-remarks"><strong>Final remarks</strong></h2>
<p>Naturally, my article doesn’t constitute any blockchain legal advice. But these are certainly blockchain legal issues to consider. A DAO is definitely an interesting initiative that can fix real problems. Just make sure you’re prepared for every contingency. If you’re not sure you are – consider our <a target="_blank" href="https://espeoblockchain.com/blockchain-training/">blockchain training</a> sessions. We’ll work through your problems.</p>
]]></content:encoded></item><item><title><![CDATA[What is a DAO, or a decentralized organization?]]></title><description><![CDATA[A Distributed Autonomous Organization (DAO) is a combination of software and social connections. It’s able to act as a decentralized company for the benefits of its members – but no member has a controlling stake in it. My analysis of this phenomenon...]]></description><link>https://zduniak.com/what-is-a-dao-or-a-decentralized-organization</link><guid isPermaLink="true">https://zduniak.com/what-is-a-dao-or-a-decentralized-organization</guid><category><![CDATA[DAOs]]></category><category><![CDATA[DAO]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[decentralization]]></category><category><![CDATA[decentralized finance development]]></category><category><![CDATA[Decentralised Identity]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Mon, 04 Jun 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-a-distributed-autonomous-organization-dao-is-a-combination-of-software-and-social-connections-its-able-to-act-as-a-decentralized-company-for-the-benefits-of-its-members-but-no-member-has-a-controlling-stake-in-it-my-analysis-of-this-phenomenon-will-be-split-into-two-parts-in-the-first-part-well-focus-on-the-benefits-and-risks-of-a-decentralized-organization"><strong>A Distributed Autonomous Organization (DAO) is a combination of software and social connections. It’s able to act as a decentralized company for the benefits of its members – but no member has a controlling stake in it. My analysis of this phenomenon will be split into two parts. In the first part, we’ll focus on the benefits and risks of a decentralized organization.</strong></h4>
<h1 id="heading-what-is-a-dao"><strong>What is a DAO?</strong></h1>
<p>In short, a decentralized organization relies on hard-coding certain important company rules, so that specific actions can be automatically carried out. A DAO relies on smart contracts to enforce those rules digitally.</p>
<h2 id="heading-benefits-of-a-dao"><strong>Benefits of a DAO</strong></h2>
<ol>
<li><p>Shareholders/members of the DAO can have a very <strong>direct and immediate impact</strong> on key company operations.</p>
</li>
<li><p><strong>Cheap distribution of shares.</strong> What is a DAO benefit is that there’s no middleman. We have peer-to-peer communication between members who want to sell/buy DAO shares.</p>
</li>
<li><p><strong>Cheap distribution of dividends</strong> (directly from the decentralized organization to members).</p>
</li>
<li><p>You can code many standard corporation activities in the algorithm. So, they can be <strong>executed automatically without any human intervention</strong>. Accounting, auditing, tax payment, payroll – you name it. It adds transparency to the operation, removes the risk of human error and lowers employment costs.</p>
</li>
<li><p>You can also code <strong>integration with suppliers</strong> (exposed as other DAOs) in the algorithm. So, execution can work based on that interactive algorithm. If not disputed, cooperation between parties can be much smoother and cheaper.</p>
</li>
<li><p>No single person (like a CEO) exists who represents the DAO. <strong>All members, even minor,  represent it collectively.</strong></p>
</li>
</ol>
<h2 id="heading-risks-of-participating-in-a-decentralized-organization"><strong>Risks of participating in a decentralized organization</strong></h2>
<ol>
<li><p>If you lose the cryptographic private key, or someone steals it, you also <strong>lose access to the DAO</strong> and voting rights in it.</p>
</li>
<li><p>The programming code of the DAO can have <strong>bugs which might be impossible to correct</strong>. As we know, the smart contract code is immutable (read more about <a target="_blank" href="https://espeoblockchain.com/blog/ethereum-smart-contract/">blockchain immutability</a>). These bugs can result in anything, from money loss to unexpected liability incurment.</p>
</li>
<li><p>Public blockchain networks (like Ethereum or Bitcoin) aren’t controlled by any single party. <strong>Their evolution can go into an unexpected direction</strong>, resulting in DAO disruption. In extreme cases, a DAO might become unusable.</p>
</li>
<li><p>Most useful decentralized organizations need <strong>access to data outside of the blockchain</strong>. These data can be provided by automatic or semiautomatic centralized oracle mechanisms. To disrupt the operation of that DAO, it’s easiest to target the oracles it depends on.</p>
</li>
<li><p><strong>The algorithm can’t go beyond what it was programmed for</strong>. Hence, it can make biased or plainly bad decisions if you don’t account for every reasonable fact and circumstance. A DAO should be structured so that there’s always a human factor involved that can take back or stop automatic decisions.</p>
</li>
<li><p>Parties (cooperating decentralized organizations) might not be explicitly defined in the smart contract. In case of a dispute not covered by the code (and without an automatic arbitrator) it <strong>might be difficult to resolve it in traditional legal system</strong>.</p>
</li>
</ol>
<p>What is a DAO capable of? Stay tuned for the second part. In the coming weeks I’ll take a look at DAOs from a legal perspective. And if you’re considering blockchain for your company, but you’re still stuck on terms and crypto jargon – it may be time for <a target="_blank" href="https://espeoblockchain.com/blockchain-training/">blockchain training</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Blockchain immutability: Behind smart contracts]]></title><description><![CDATA[The Ethereum smart contract has taken the world by storm, with its wide adoption for ICOs. Smart contracts are, in essence, computer programs executed in a sandboxed environment, so one that restricts them. That restriction provides special functions...]]></description><link>https://zduniak.com/blockchain-immutability-behind-smart-contracts</link><guid isPermaLink="true">https://zduniak.com/blockchain-immutability-behind-smart-contracts</guid><category><![CDATA[Smart Contracts]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[immutable]]></category><category><![CDATA[immutability]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Tue, 29 May 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-the-ethereum-smart-contract-has-taken-the-world-by-storm-with-its-wide-adoption-for-icoshttpsespeoblockchaincombloghow-start-an-ethereum-icohttpsespeoblockchaincombloghow-start-an-ethereum-ico-smart-contracts-are-in-essence-computer-programs-executed-in-a-sandboxed-environment-so-one-that-restricts-them-that-restriction-provides-special-functions-and-properties-the-famous-blockchain-immutability-is-one-of-them-lets-dive-into-those"><strong>The Ethereum smart contract has taken the world by storm, with its wide</strong> <a target="_blank" href="https://espeoblockchain.com/blog/how-start-an-ethereum-ico/https://espeoblockchain.com/blog/how-start-an-ethereum-ico/"><strong>adoption for ICOs.</strong></a> <strong>Smart contracts are, in essence, computer programs executed in a sandboxed environment, so one that restricts them. That restriction provides special functions and properties: the famous blockchain immutability is one of them. Let’s dive into those.</strong></h4>
<h2 id="heading-blockchain-immutability"><strong>Blockchain immutability</strong></h2>
<p>As I wrote, one of the defining properties of smart contracts like the Ethereum smart contract is that their code is <strong>immutable</strong> . Blockchain immutability means that parties agree to the terms or “code” of the contract, that code can’t be changed by any party unilaterally.</p>
<p>The result of the execution of the smart contract is similarly unchangeable. Of course, that happens once the agreed-on code is executed and produces a result. The result should be objectively verified by the other party to that contract, or even by an external party. For example, this could be a regulator or observer. Only then you can be 100% certain it’s valid.</p>
<h2 id="heading-free-from-external-factors"><strong>Free from external factors</strong></h2>
<p>The immutability of the results of the executed smart contracts stems from what I’ve mentioned at the beginning. What’s important is the context in which the smart contract is executed: <strong>sandboxes</strong> . <strong>That means the contract is free from the influence of any external factors</strong>. An environment like that guarantees the <em>determinism</em> of computational results.</p>
<p>T he only factors that influence the result are the <strong>input data to the smart contract, and the data stored within the smart contract environment</strong> . By the latter, I’m referring to the data that was stored there when smart contract was instantiated for the first time. Or, by the previous execution iterations of the same contract. In some smart contract environments (like Ethereum) smart contracts can also communicate with each other and influence the execution of one another. However, <strong>this is still done in controlled and deterministic way.</strong></p>
<h2 id="heading-the-ethereum-smart-contracts-not-the-only-one-other-implementations"><strong>The Ethereum smart contract’s not the only one. Other implementations</strong></h2>
<p>Various implementations of smart contracts seek to leverage their benefits. <strong>Bitcoin’s</strong> smart contract language (script) is intentionally limited in complexity. The logic that can be expressed in it is very restricted. On the other hand, we have the Ethereum smart contract. The set of the operations that can be executed within the <strong>Ethereum Virtual Machine</strong> is much broader. Almost any reasonable algorithm or logic could be expressed in it, though there are still limitations on the number of operations per invocation.</p>
<p>Going even further, <strong>Hyperledger Fabric</strong> has no restriction on the complexity of the smart contract logic or the number of operations. That means it’s very powerful. However, it it also greatly increases the risk of node consensus divergence if that power isn’t used properly. Generally speaking, the level of <strong>expressiveness</strong> is a feature of a particular implementation. It can vary, providing different levels of security and strength for particular use cases.<br />It’s worth knowing the <strong>consensus doesn’t have to be immediate</strong>. Depending on the implementation, it might take around 1 hour (Bitcoin) to reach the semi-final consensus, or be almost immediate (Hyperledger Fabric). That’s despite the fact that once the consensus is reached, the smart contract execution result is <strong>provable and immutable.</strong></p>
<h2 id="heading-controlled-access"><strong>Controlled access</strong></h2>
<p>Some smart contracts need to have <strong>access to structured data from the outside of their environment</strong> . In most implementations, controlled access to that data can be provided by privileged actors. They’re able to fetch the data needed at the specified time. Then, they can provably transform the data to a format that can be processed by the smart contract. Actors like that are called <strong>Oracles</strong>. They’re an inherent part of the productive smart contract ecosystem. They don’t change the other properties of the smart contracts. Oracles also work in the same sandboxed environment as the other smart contracts. Once the data is provided, it can’t be modified and is ‘provable’ forever.</p>
<h2 id="heading-can-smart-contracts-function-without-a-blockchain"><strong>Can smart contracts function without a blockchain?</strong></h2>
<p>If we want to execute smart contracts with the listed properties, they need to have access to some form of history inalterability. At the least, we’d need a way to prove that the history was changed and the observed results can’t be trusted any longer.</p>
<p><strong>Blockchain</strong> is one technique that gives that particular feature but there’s research being done on other techniques. One of them is <strong>DAG</strong> (directed acyclic graph) where the smart contract transactions form a graph of relations (not being part of the chain of blocks). Yet another approach was undertaken by the <a target="_blank" href="https://www.corda.net/"><strong>Corda</strong></a> platform. There are no blocks in Corda, and transactions are exchanged directly between interested parties in the form of cryptographically signed sets of data.</p>
<p>Blockchain immutability brings many advantages to <a target="_blank" href="https://espeoblockchain.com/blog/crypto-payments-digital-cash/">various industries</a>, and is one of the features that inspire our clients to get on the blockchain. So, the Ethereum smart contract and the blockchain platform are what we deal with every day at Espeo Blockchain. That, and much more. If you’d like to leverage blockchain immutability in your project, we’re interested! Let us know in the box below.</p>
]]></content:encoded></item><item><title><![CDATA[6 ways to stay ahead of blockchain competition]]></title><description><![CDATA[It’s not enough to throw in blockchain as a buzzword to get ahead. To be competitive, crypto-based organizations constantly have to innovate. An ‘edge’ or competitive advantage leading from just an innovative product is usually short-lived. Why? In a...]]></description><link>https://zduniak.com/6-ways-to-stay-ahead-of-blockchain-competition</link><guid isPermaLink="true">https://zduniak.com/6-ways-to-stay-ahead-of-blockchain-competition</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Blockchain technology]]></category><category><![CDATA[Blockchain development]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Wed, 23 May 2018 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h4 id="heading-its-not-enough-to-throw-in-blockchain-as-a-buzzword-to-get-ahead-to-be-competitive-crypto-based-organizations-constantly-have-to-innovate-an-edge-or-competitive-advantage-leading-from-just-an-innovative-product-is-usually-short-lived-why-in-a-reasonable-amount-of-time-its-easy-for-other-market-participants-to-imitate-the-product-or-even-improve-on-it-to-be-sustainable-innovation-should-be-coupled-with-some-sort-of-protection-done-in-a-form-thats-not-easily-visible-to-the-consumers-and-competitors-ill-demonstrate-on-how-existing-cryptocurrency-market-participants-utilize-innovation-hopefully-this-will-serve-as-inspiration-to-stay-ahead-of-blockchain-competition"><strong>It’s not enough to throw in blockchain as a buzzword to get ahead. To be competitive, crypto-based organizations constantly have to innovate. An ‘edge’ or competitive advantage leading from just an innovative product is usually short-lived. Why? In a reasonable amount of time, it’s easy for other market participants to imitate the product or even improve on it. To be sustainable, innovation should be coupled with some sort of protection, done in a form that’s not easily visible to the consumers and competitors. I’ll demonstrate on how existing cryptocurrency market participants utilize innovation. Hopefully, this will serve as inspiration to stay ahead of blockchain competition.</strong></h4>
<h2 id="heading-be-the-first"><strong>Be the first</strong></h2>
<p>Novelty in <strong>product offering</strong> is an edge given to the <strong>first</strong> market participant that offers a product that their blockchain competition hasn’t released before. Or they won’t be able to for some time. A blockchain example of this strategy is <a target="_blank" href="https://www.bitgo.com/info/">BitGo</a> . BitGo built its brand on the association with secure cryptocurrency storage and fund processing for enterprises. In the early days of Bitcoin, it utilized 2-of-3 <a target="_blank" href="https://en.bitcoin.it/wiki/Multisignature">multisig wallet technology</a> and secured its label as the first company to offer it to professional customers. Later on, driven by that association, they offered other custodial services for financial clients ( <a target="_blank" href="https://blog.bitgo.com/bitgo-instant-the-on-chain-solution-for-instant-bitcoin-commerce-surpasses-10-000-btc-transacted-65040cd48d3a">crypto exchanges</a> , but not only that). They covered <strong>support of other cryptocurrencies</strong> and offered <strong>easy to use APIs</strong> on top of their platform, extending their offering to products for the retail market. Examples include Secure Wallets or Instant Payments to <strong>circumvent Bitcoin’s requirements</strong> for 10-minute block confirmation time.</p>
<h2 id="heading-address-regulation"><strong>Address regulation</strong></h2>
<p>Another part of BitGo’s business – still highly connected to their initial offering – is <strong>regulatory compliance</strong> . National regulators are demanding more and more from financial institutions and from startups interested in using cryptocurrencies. Therefore, those ventures need to invest more resources into becoming fully compliant with regulations. Being able to outsource those obligations and associated processes (as well as paying for it in a pay-as-you-go model) is a <strong>big advantage for new market shakers.</strong> Not to mention a <strong>steady stream of income</strong> for BitGo. Nicely done!</p>
<h2 id="heading-implement-sustainable-processes"><strong>Implement sustainable processes</strong></h2>
<p>Another way to implement a sustainable level of innovation in blockchain is to focus on <strong>handling processes in a new and improved way</strong> . By processes I mean both internal – visible only within the company – and external, related to the way customers or external resources are handled. A company that’s a good blockchain example of mastering process innovation is <a target="_blank" href="https://shapeshift.io/#/coins">ShapeShift</a> . On the surface, it looks like a plain, straightforward <strong>exchange for all possible combinations of cryptocurrencies</strong> . The difference is that users don’t deposit their funds on the platform and then try to bid against each other, as is the case with other crypto exchanges. The ShapeShift platform offers spot rates for all the pairs it supports. The user can only accept the rate and exchange one asset for another one.</p>
<p>Under the hood, ShapeShift uses a complex matching engine to integrate with many other cryptocurrency exchanges (both distributed and traditional centralized exchanges). It can <strong>shift funds from one exchange to the other</strong>, to internal wallets and to distributed p2p transaction engines. At the same time, it tries to squeeze as much as it can from the market spread to <strong>make a profit for itself (arbitration)</strong> . The internal optimization of these processes increases ShapeShift’s profitability and a risks profile it’s willing to accept. To the end user, the whole process is very smooth.</p>
<h2 id="heading-have-a-tech-combination-thats-hard-to-copy"><strong>Have a tech combination that’s hard to copy</strong></h2>
<p>The <strong>complexity of your product</strong> gives you an edge in a very particular sense – it’s difficult to copy you. The blockchain example is actually a great one. Bitcoin or, generally speaking, blockchain technologies are highly complex technical combinations of cryptographic techniques, distributed computing, efficient data storage and clever algorithms. If you combine all the experts in those blockchain technologies under one roof, <strong>you’ll get a truly remarkable combination</strong> . This is exactly what <a target="_blank" href="https://blockstream.com/">Blockstream</a> did – they hired quite a few Bitcoin Core Developers with unique skills and enthusiasm to work on complex technical problems. Then they started to work on difficult problems no one has worked on earlier, but in an organized fashion. Lightning, Sidechains, Segregated Witness, Confidential Transactions, <a target="_blank" href="https://blockstream.com/satellite/">Satellite</a> to broadcast Bitcoin blockchain from space, and so on.</p>
<h2 id="heading-unique-blockchain-example-patent-it"><strong>Unique blockchain example? Patent it!</strong></h2>
<p>Companies can also seek protection from blockchain competition by patenting their technologies and other intellectual properties. One of the companies headed down this route is <a target="_blank" href="https://www.accenture.com/us-en/insight-editing-uneditable-blockchain">Accenture</a> , one of the biggest accounting and consulting firms in the world. Together with Dr. Giuseppe Ateniese, they’ve patented technology that could allow them to offer blockchain technologies with an exceptional feature: <strong>editable blockchains</strong> . It appears to go against blockchain common sense – it’s advertised as an immutable ledger where the data that is already stored can’t be amended. Yet, in many business scenarios mistakes can happen. Having an ability to edit the data in a way that’s <strong>still fully controllable by the consortium</strong> (yet the previous data won’t be accessible after the edit) might be a feature that draws the attention of enterprises. Having that feature protected by a patent certainly gives Accenture a head start.</p>
<h2 id="heading-adapt-to-fix-problems"><strong>Adapt to fix problems</strong></h2>
<p>Many different blockchain technologies and companies/organizations behind them compete against each other. They all try to innovate and by doing it, <strong>they’re amending the rules of their blockchain technology</strong> . If the community around a particular technology is small, it’s not that difficult. They simply agree on the change and the date when all community members should upgrade the software. <strong>The problems start when the project is really successful</strong>, with a big community gathered around it. Then, changing its internal rules of operation is not that easy. Not all the community members agree with the change, or simply not all of them are ready to upgrade.</p>
<p>Solving this particular problem is a foundation upon which <a target="_blank" href="https://medium.com/@linda.xie/a-beginners-guide-to-tezos-c9618240183f">Tezos works</a> . They created a blockchain technology with <strong>an on-chain governance model embedded into the protocol</strong> . All of the changes to the internal operations of the protocol can be <strong>voted on</strong> . If sufficient backing is found, the changes can be implemented and will be automatically accepted. This stands in stark contrast to the governance model of Ethereum or Bitcoin. As we know, a disagreement between the involved group of developers resulted in them forking to respectively Ethereum Classic and Bitcoin Cash. This innovation could still potentially give Tezos an advantage against their blockchain competition (<strong>their legal issues are another matter</strong>), as they can be very flexible in their approach toward future developments and challenges.</p>
<h2 id="heading-blockchain-competition-conclusions"><strong>Blockchain competition – conclusions</strong></h2>
<p>The blockchain ecosystem is a fertile ground for experimentation and innovation. At Espeo Blockchain, we’re often amazed at the novel ways our clients try to utilize blockchain. It goes without saying that the truly innovative projects are a joy to work on. That’s why we’re always looking for more! To be able to compete against constant innovation in a long term perspective, <strong>companies have to think wider</strong> . Innovate fast, or try to protect your innovations from the competitors by hiding them in internal processes or protect your knowledge using patents. If you’re not sure how to innovate using blockchain, <a target="_blank" href="https://espeoblockchain.com/blockchain-training/">custom blockchain training</a> might be a good idea.</p>
<p>You can read more about <a target="_blank" href="https://espeoblockchain.com/blog/crypto-payments-digital-cash/">crypto payments</a> and <a target="_blank" href="https://espeoblockchain.com/blog/blockchain-business-ideas-challenges/">blockchain challenges</a> on our blog. And if you have an innovative blockchain example of yours, let us know below.</p>
]]></content:encoded></item><item><title><![CDATA[Introduction to blockchain]]></title><description><![CDATA[The presentation I did for the Girls in Tech Gibraltar event in 2017/18.
https://docs.google.com/presentation/d/1LVwUfTVJTtwtKaHpjI1ByOIiQBiki6jM/edit?usp=sharing&ouid=102276855851715091376&rtpof=true&sd=true]]></description><link>https://zduniak.com/introduction-to-blockchain</link><guid isPermaLink="true">https://zduniak.com/introduction-to-blockchain</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Blockchain technology]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Mon, 01 Jan 2018 11:00:00 GMT</pubDate><content:encoded><![CDATA[<p>The presentation I did for the <a target="_blank" href="https://girlsintech.org">Girls in Tech Gibraltar</a> event in 2017/18.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://docs.google.com/presentation/d/1LVwUfTVJTtwtKaHpjI1ByOIiQBiki6jM/edit?usp=sharing&amp;ouid=102276855851715091376&amp;rtpof=true&amp;sd=true">https://docs.google.com/presentation/d/1LVwUfTVJTtwtKaHpjI1ByOIiQBiki6jM/edit?usp=sharing&amp;ouid=102276855851715091376&amp;rtpof=true&amp;sd=true</a></div>
]]></content:encoded></item><item><title><![CDATA[RobotME: Automation testing of J2ME applications]]></title><description><![CDATA[I focused my master's thesis on automated quality assurance of J2ME (ie mobile apps before the iOS/Android era). You can find some presentations related to my work here:

https://github.com/mz7mz7mz7/RobotME/blob/main/seminar/seminar2.pdf

https://gi...]]></description><link>https://zduniak.com/robotme-automation-testing-of-j2me-applications</link><guid isPermaLink="true">https://zduniak.com/robotme-automation-testing-of-j2me-applications</guid><category><![CDATA[j2me]]></category><category><![CDATA[QA]]></category><category><![CDATA[automation testing ]]></category><category><![CDATA[automation]]></category><category><![CDATA[Java]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Tue, 01 Jan 2008 11:00:00 GMT</pubDate><content:encoded><![CDATA[<p>I focused my master's thesis on automated quality assurance of J2ME (ie mobile apps before the iOS/Android era). You can find some presentations related to my work here:</p>
<ol>
<li><p><a target="_blank" href="https://github.com/mz7mz7mz7/RobotME/blob/main/seminar/seminar2.pdf">https://github.com/mz7mz7mz7/RobotME/blob/main/seminar/seminar2.pdf</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/mz7mz7mz7/RobotME/blob/main/paper-bis2007/presentation/lecture.pdf">https://github.com/mz7mz7mz7/RobotME/blob/main/paper-bis2007/presentation/lecture.pdf</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/mz7mz7mz7/RobotME/blob/main/seminar-idss/seminar-idss.pdf">https://github.com/mz7mz7mz7/RobotME/blob/main/seminar-idss/seminar-idss.pdf</a></p>
</li>
</ol>
<p>The full thesis and the source code are available here: <a target="_blank" href="https://github.com/mz7mz7mz7/RobotME">https://github.com/mz7mz7mz7/RobotME</a></p>
]]></content:encoded></item><item><title><![CDATA[Automated Integration Tests for Mobile Applications in Java 2 Micro Edition]]></title><description><![CDATA[Applications written for mobile devices have become more and more complex, adjusting to the constantly improving computational power of hardware. With the growing application size comes the need for automated testing frameworks, particularly framewor...]]></description><link>https://zduniak.com/automated-integration-tests-for-mobile-applications-in-java-2-micro-edition</link><guid isPermaLink="true">https://zduniak.com/automated-integration-tests-for-mobile-applications-in-java-2-micro-edition</guid><category><![CDATA[j2me]]></category><category><![CDATA[automation testing ]]></category><category><![CDATA[Automated Testing]]></category><category><![CDATA[Automation Test Framework]]></category><category><![CDATA[automation]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Sun, 30 Dec 2007 11:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Applications written for mobile devices have become more and more complex, adjusting to the constantly improving computational power of hardware. With the growing application size comes the need for automated testing frameworks, particularly frameworks for automated testing of user interaction and graphical user interface. While such testing (also called <em>capture-replay</em>) has been thoroughly discussed in literature with respect to desktop applications, mobile development limits the possibilities significantly. To our best knowledge only a few solutions for creating automated tests of mobile applications exist and their functionality is very limited in general or constrained to only proprietary devices. In this paper we demonstrate preliminary results of our attempt to design and implement a framework for capturing and replaying user interaction in applications written for the Java 2 Micro Edition environment. Our evaluation test bed is a complex commercial mobile navigation system and the outcomes so far are very promising.</p>
<p>Conference paper published in Springer available here: <a target="_blank" href="https://link.springer.com/chapter/10.1007/978-3-540-72035-5_37">https://link.springer.com/chapter/10.1007/978-3-540-72035-5_37</a></p>
]]></content:encoded></item><item><title><![CDATA[Framework for Mutation Testing]]></title><description><![CDATA[1.   Introduction
Mutation Testing allows us to evaluate the quality of tests prepared for a software application. It aims to determine test set thoroughness by measuring the extent to which a test set can detect slight variations in the program. If ...]]></description><link>https://zduniak.com/framework-for-mutation-testing</link><guid isPermaLink="true">https://zduniak.com/framework-for-mutation-testing</guid><category><![CDATA[mutation testing]]></category><dc:creator><![CDATA[Marcin Zduniak]]></dc:creator><pubDate>Sun, 11 Jun 2006 10:00:00 GMT</pubDate><content:encoded><![CDATA[<h1 id="heading-1-introduction">1.   Introduction</h1>
<p>Mutation Testing allows us to evaluate the quality of tests prepared for a software application. It aims to determine test set thoroughness by measuring the extent to which a test set can detect slight variations in the program. If we change the source code in a way that changes its behavior and the prepared test suite doesn't detect it, then the quality of tests is probably not good enough.</p>
<p>There are three approaches to mutation testing:</p>
<p>-         lexical-based, in which the source code is modified in a raw, lexical form, which in some cases may lead to producing uncompilable code</p>
<p>-         syntax-based, in which the source code is modified while in form of a syntax tree, which is much more reliable than the lexical-based approach, but the code still needs to be compiled</p>
<p>-         bytecode-based, in which the code is changed after compilation, on a bytecode level</p>
<h1 id="heading-2-chosen-approach">2.   Chosen approach</h1>
<p>The prepared framework is based on the bytecode approach, as it allows introducing mutations without the need to recompile the code over and over again. Therefore it is much faster than the other two approaches. We’ve also chosen the ASM library (instead of BCEL) to modify bytecode, as it is smaller and faster than BCEL.</p>
<h1 id="heading-3-design-specification">3.   Design specification</h1>
<p>One of the aims of our project was to fully integrate the mutator with Ant, so that users familiar with ant tasks may easily use our mutator. Everyone capable of configuring ant to run JUnit tests will also be capable of configuring it to run our mutation testing framework. The only additional required parameters are:</p>
<p>-         path to jad.exe, so that the changed bytecode might be decompiled to the java source</p>
<p>-         path to directory where report should be placed</p>
<p>-         path to project to mutate</p>
<p>-         path to directory for temporary files</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1704447151851/f6b3cfca-3861-447d-8ac0-c6107acb15c3.jpeg" alt class="image--center mx-auto" /></p>
<p><strong>Figure 1: Example Mutator engine configured in ANT’s build file</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1704447189966/1cf73312-9257-4da1-834e-3dc0c436e8d4.jpeg" alt class="image--center mx-auto" /></p>
<p><strong>Figure 2: Equivalent JUnit configuration in ANT’s build file</strong></p>
<p>Another asset of this approach is the possibility of including standard junit reports in mutation framework report, so that the user can easily navigate the results and see what tests failed because of the mutation.</p>
<p>From a developer point of view, it helped  us that we didn’t have to implement timeouts (in case the mutation resulted in an infinite loop) – it was already present in the junit ant task we used.</p>
<p>Reports are generated by Apache Velocity templates, which might be easily adjusted to user needs. The architecture allows adding new mutations in a very straightforward way – by simply adding one class for every new mutation.</p>
<p>A UML diagram of developed architecture is presented on the next page.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1704447212542/81820c66-1c2d-4853-afd9-82c450284bf7.gif" alt class="image--center mx-auto" /></p>
<h1 id="heading-4-mutations-description">4.   Mutations description</h1>
<p><strong>a.      Arithmetic operators replacement</strong></p>
<p>All addition operators are replaced with subtraction operators and vice-versa. All multiplication operators are replaced with division operators and vice-versa. This mutator is quite simple; in projects more computational than the “dbutils” however, it may be very effective.</p>
<p>On a bytecode level, this means changing operators:</p>
<p>·        XADD             -&gt;    XSUB,</p>
<p>·        XSUB             -&gt;    XADD,</p>
<p>·        XMUL            -&gt;    XDIV,</p>
<p>·        XDIV              -&gt;    XMUL,</p>
<p>where X is I (for integers), D (for doubles), L (for longs) or F (for floats)</p>
<p><strong>b.      Numeric literals replaced</strong></p>
<p>All appearances of “0” number were replaced with “1”. All other byte numbers &gt;=1 were replaced with 0. Note that this implies replacing boolean value false by true value and vice-versa. Therefore it is a very effective mutator (producing many mutants), as boolean values are very popular in any type of code.</p>
<p>On a bytecode level, this means changing:</p>
<p>·        ICONST_0 -&gt; ICONST_1</p>
<p>·        ICONST_1 to ICONST_5 and BIPUSH x (where x is a byte number) -&gt; ICONST_0</p>
<p><strong>c.       Equality and non-equality changes</strong></p>
<p>Equality operators ( == ) were changed into non-equality operators ( != ) and vice-versa. This mutation was applied to both object and primitive value comparisons.</p>
<p>On a bytecode level, this means changing:</p>
<p>·        IF_ICMPEQ   -&gt;    IF_ICMPNE</p>
<p>·        IF_ICMPNE   -&gt;    IF_ICMPEQ</p>
<p>·        IFNONNULL -&gt;    IFNULL</p>
<p>·        IFNULL          -&gt;    IFNONNULL</p>
<p><strong>d.      Null objects and zero number returned</strong></p>
<p>In all methods returning numbers 0 was returned instead of the proper value. In all methods returning objects instead of the object, a null value was returned. In every object-oriented program this should be quite an effective mutation.</p>
<p>On a bytecode level, this means that for any of the codes ARETURN, IRETURN, DRETURN, FRETURN, LRETURN instead of one mnemonic we put a sequence:</p>
<p>·        POP (the value that was to be returned is dropped)</p>
<p>·        ACONST_NULL, ICONST_0, DCONST_0,FCONST_0, LCONST_0 (inserting 0 or null on stack)</p>
<p>·        ARETURN, IRETURN, DRETURN, FRETURN, LRETURN (returning)</p>
<p><strong>e.      Relational operators changes</strong></p>
<p>Relational operators were replaced as follows:</p>
<p>&lt;          by        &gt;=</p>
<p>&lt;=       by        &gt;</p>
<p>\&gt;          by        &lt;=</p>
<p>\&gt;=       by        &lt;</p>
<p>Note that this mutation may lead to code falling into an infinite loop.</p>
<p>On a bytecode level, this means changing:</p>
<p>·        IF_ICMPLT    -&gt; IF_ICMPGE</p>
<p>·        IF_ICMPLE    -&gt; IF_ICMPGT</p>
<p>·        IF_ICMPGT   -&gt; IF_ICMPLE</p>
<p>·        IF_ICMPGE   -&gt; IF_ICMPLT</p>
<p>As all aforementioned mutations were applied at bytecode-level, some of them were rather unreadable after decompiling – e.g.:</p>
<pre><code class="lang-java">+    <span class="hljs-keyword">static</span> Class <span class="hljs-class"><span class="hljs-keyword">class</span>$<span class="hljs-title">java</span>$<span class="hljs-title">lang</span>$<span class="hljs-title">Long</span></span>; <span class="hljs-comment">/* synthetic field */</span>
[ …]

-        <span class="hljs-keyword">if</span>(((Object) (type)).equals(((Object) (Long.TYPE))) &amp;&amp; (java.lang.Long.class).isInstance(value)) {
+       <span class="hljs-keyword">if</span>(((Object) (type)).equals(((Object) (Long.TYPE))) &amp;&amp; (class$java$lang$Long == <span class="hljs-keyword">null</span> ? class$java$lang$Long : (class$java$lang$Long = _mthclass$("java.lang.Long"))).isInstance(value)) {
             <span class="hljs-keyword">return</span> <span class="hljs-keyword">true</span>;
</code></pre>
<p>However, on the whole we find applied mutations quite useful. Although they may seem trivial, they still leave many mutants alive which may be helpful in improving prepared test suite. For such a simple project as dbutils they are completely sufficient.</p>
<h1 id="heading-5-evaluation-for-jakarta-commons-dbutils-project">5.   Evaluation for Jakarta Commons-DBUtils project</h1>
<p>The results of running implemented mutators are presented in the following table:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Mutator name</td><td>Total number of mutations</td><td>Dead mutants</td><td>Live mutants</td><td>Score [%]</td></tr>
</thead>
<tbody>
<tr>
<td>ChangeADD2SUBVisitor</td><td>4</td><td>2</td><td>2</td><td>50</td></tr>
<tr>
<td>ChangeSUB2ADDVisitor</td><td>0</td><td>0</td><td>0</td><td></td></tr>
<tr>
<td>ChangeDIV2MULVisitor</td><td>0</td><td>0</td><td>0</td><td></td></tr>
<tr>
<td>ChangeMUL2DIVVisitor</td><td>0</td><td>0</td><td>0</td><td></td></tr>
<tr>
<td>EqualityVisitor</td><td>37</td><td>20</td><td>17</td><td>54,05</td></tr>
<tr>
<td>ZeroOneVisitor</td><td>67</td><td>37</td><td>30</td><td>55,22</td></tr>
<tr>
<td>ComparisonVisitor</td><td>7</td><td>6</td><td>1</td><td>85,71</td></tr>
<tr>
<td>ReturnZerosNullsVisitor</td><td>97</td><td>63</td><td>34</td><td>64,95</td></tr>
<tr>
<td>ALL</td><td>212</td><td>128</td><td>84</td><td>60,38</td></tr>
</tbody>
</table>
</div><p>Execution time of whole suite of mutators lasts 9 minutes 10 seconds.</p>
<p>ChangeSUB2ADDVisitor, ChangeDIV2MULVisitor and ChangeMUL2DIVVisitor do not produce any mutations, as mutated source does not contain any subtraction, division nor multiplication operators.</p>
<p>From the presented results we can see, that probably the most effective mutators are EqualityVisitor (implementing mutation c) and ZeroOneVisitor (implementing mutation b). They have the lowest scores (not including ChangeAdd2SUBVisitor, but it has only 4 mutations so it is not very representative). This means that they can indicate the weaknesses of tests and find carelessly designed and/or implemented parts of code.</p>
<p>Of course, as implemented mutations are applied at bytecode level and they are context-free, not all of them produce readable code. Therefore, for some of them it will be difficult to check if they meet all three required conditions: reachability, necessity and sufficiency.</p>
<p>After analysing not dead mutants we made the following observations:</p>
<p>-                     Inner class BasicRowProcessor$CaseInsensitiveHashMap is probably not well tested, as changes introduced by mutation b are not detected.</p>
<p>-                     Method “private boolean isCompatibleType(Object value, Class type)” in class BasicRowProcessor leaves many mutants alive. However, code produced by mutator c is difficult to read and it might happen that produced mutants are equivalent to proper code. On the other hand, other mutations (from mutators b and d) are also not dicovered by tests, so probably the method is not tested well.</p>
<p>-                     Other mutations on methods of BasicRowProcessor class show, that probably this class is generally lacking good tests</p>
<p>-                     Tests for classes DbUtils and QueryLoader do not detect invertion of equality operators</p>
<p>-                     Tests for QueryRunner do not detect changes introduced by most of mutators</p>
<p>-                     Other classes tests also fail to detect some of the introduced mutations, but it seems that the aforementioned 4 classes are the ones that lack tests the most.</p>
<p><strong>Authors:</strong> Liliana Ziołek &amp; Marcin Zduniak</p>
]]></content:encoded></item></channel></rss>