<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[The Orbs Blog - Medium]]></title>
        <description><![CDATA[The Orbs Project Blog - Medium]]></description>
        <link>https://medium.com/orbs-network?source=rss----9871d64a9ea6---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>The Orbs Blog - Medium</title>
            <link>https://medium.com/orbs-network?source=rss----9871d64a9ea6---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 23 Sep 2026 03:54:03 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/orbs-network" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[We Have Moved!]]></title>
            <link>https://medium.com/orbs-network/we-have-moved-609438c67f31?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/609438c67f31</guid>
            <category><![CDATA[industry-insights]]></category>
            <category><![CDATA[updates]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[identity]]></category>
            <dc:creator><![CDATA[ORBS HQ]]></dc:creator>
            <pubDate>Wed, 17 Mar 2021 14:08:08 GMT</pubDate>
            <atom:updated>2021-03-17T14:19:22.646Z</atom:updated>
            <content:encoded><![CDATA[<p>Thank you for visiting the Orbs Medium page.</p><p>This Medium account is no longer active since July 2019.</p><p>You can now find the Orbs blog on the official Orbs website at the following link:</p><p><a href="https://www.orbs.com/blog/">https://www.orbs.com/blog/</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4d-wvt9gD532xVigx1IRZg.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=609438c67f31" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/we-have-moved-609438c67f31">We Have Moved!</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Orbs R&D Update July 2019]]></title>
            <link>https://medium.com/orbs-network/orbs-r-d-update-july-2019-14ab4f3e9308?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/14ab4f3e9308</guid>
            <category><![CDATA[updates]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[ethereum]]></category>
            <dc:creator><![CDATA[Nate Simantov]]></dc:creator>
            <pubDate>Thu, 18 Jul 2019 15:19:40 GMT</pubDate>
            <atom:updated>2019-07-18T15:19:25.745Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u6HM3pyW8REyhwEbuRhw_Q.jpeg" /><figcaption>Lots of juicy dev ahead</figcaption></figure><h3>Highlights</h3><p><em>This segment was contributed by </em><a href="https://github.com/OdedWx"><em>@OdedWx</em></a><em> and</em> <a href="https://github.com/talkol"><em>@talkol</em></a></p><p><strong>Hi community, this has been a busy month since the </strong><a href="https://www.orbs.com/orbs-rd-update-june-2019/"><strong>last R&amp;D update</strong></a><strong>!</strong></p><p>The biggest thing happening was the first-ever rewards distribution. As you know, the rewards are given and accounted for on an ongoing basis (on every election), but the tokens themselves are distributed over Ethereum in bulk after 3 months. We’ve had our first successful distribution which included the first 27 election periods (1 through 27)!</p><p><strong>Some statistics:</strong> 18,018,788 ORBS were distributed to 1,448 addresses. The distribution took place by a <a href="https://etherscan.io/tx/0x5627766a3f55354a2cd70f9153a2bebe1053d2f5c99aec647027ce85e93b3f1b">smart contract on Ethereum</a>, to make sure we have a third party external verification of the entire process. There’s a very nice architecture that requires only a single transaction with commitments for the entire distribution event. Following the commitment transaction, any account may send the distribution transactions relying on the commitments. This means that the process is transparent and easy to review and also very efficient (50 distributions per transaction). <a href="https://www.orbs.com/first-orbs-rewards-distribution-summary/">See this post describing the entire process</a>.</p><p>Another area the contributors have been focusing on this month is production network fixes. The network is up in production since March, and is constantly monitored for issues and improvements. For example, the lean helix threading model was improved, preventing corner cases that may cause a delay in a block creation. Another example is improvements to the gossip threading model.</p><p>There’s a lot of excitement in the community for working with the system and making this process easy for developers. One very exciting project I want to point out is the Orbs Playground — an online IDE for smart contract developers that lets them experiment and develop smart contracts on Orbs directly from their web browser — without downloading and installing any tools! This very cool tool started as a hackathon project, but got such a good feedback that it became a standalone project that is now actively maintained. Also look forward to seeing it embedded more in more in the various Orbs websites.</p><h3>Blockchain Core</h3><p><em>This segment was contributed by</em> <a href="https://github.com/orbs-network/orbs-network-go/pulls/IdoZilberberg"><em>@IdoZilberberg</em></a></p><p>Last month marked the completion of the first release since the Orbs platform was launched in March. While several patches have already been released earlier, June signified the first full release with actual features.</p><p>Updates include improvements to <a href="https://github.com/orbs-network/gamma-cli">Gamma</a>, various stability and monitoring updates, design &amp; implementation work on the Lean Helix consensus algorithm goroutine model and more.</p><p><a href="https://github.com/itamararjuan"><em>@itamararjuan</em></a> was working on a feature that intends to increase confidence against the introduction of bugs or regressions, and help measure improvement or degradation in performance, when changing the codebase.</p><p>This entails introducing a new step to the CI process, where, upon, the creation of a new pull-request on the <a href="https://github.com/orbs-network/orbs-network-go">orbs-network-go</a> GitHub repo, provisions a new virtual chain (network) and runs the e2e (end-to-end) test suite against it.</p><p><a href="https://github.com/itamararjuan"><em>@itamararjuan</em></a> upgraded <a href="https://github.com/orbs-network/nebula">Nebula</a> — Orbs’ node deployment tool — to support Terraform 0.12.</p><p>BTW, <a href="https://github.com/itamararjuan"><em>@itamararjuan</em></a> also managed to complete a difficult bicycle tour of northern Italy during the same time, so great job and thank you :)</p><p><a href="http://ronnno/">@ronnno</a> and <a href="https://github.com/orbs-network/orbs-network-go/pulls/electricmonk"><em>@electricmonk</em></a> have been busy converting integrative tests that span Orbs and Ethereum into Javascript. Check out the results in the subrepo <a href="https://github.com/orbs-network/orbs-ethereum-contracts/tree/master/psilo">Psilo</a>.</p><p><a href="https://github.com/ronnno"><em>@ronnno</em></a> wrote the contracts of rewards distribution, along with extensive testing.</p><p>The work is in <a href="https://github.com/orbs-network/orbs-ethereum-contracts/pull/110">PR110</a> and you can read more about it in this <a href="https://www.orbs.com/first-orbs-rewards-distribution-summary/">post</a>. Also, thanks to <a href="https://github.com/gilamran"><em>@gilamran</em></a> for adding rewards history to the <a href="https://orbs-network.github.io/voting/reward">Rewards page</a>.</p><p><a href="https://github.com/ronnno"><em>@ronnno</em></a> and <a href="https://github.com/orbs-network/orbs-network-go/pulls/IdoZilberberg"><em>@IdoZilberberg</em></a> have been modifying the goroutine model of the <a href="https://github.com/orbs-network/lean-helix-go">Lean Helix consensus algorithm</a> of the Orbs platform. Presently, the algorithm suffers from less-than-ideal performance when the rate of incoming transactions is low, due to having a single goroutine for waiting for new transactions, and for handling external events such as Node Sync and Leader Election in Lean Helix. Following several proof-of-concept iterations, a new model was decided upon, and development is underway! This work is expected to complete during July, more details will be available in the next update (stay tuned).</p><p><a href="https://github.com/orbs-network/orbs-network-go/pulls/electricmonk"><em>@electricmonk</em></a> completed an update of the Gossip goroutine threading model in <a href="https://github.com/orbs-network/orbs-network-go/pull/1211">PR1121</a>. Before this change, DirectTransport had a goroutine per connection, and handling a message occurred on that goroutine. This effectively blocked further communication from that peer for the duration it takes to handle the message. Some Gossip consumers, such as the LeanHelix consensus algo, may block for a long time, if — for instance — it is waiting for a new block to be produced.</p><p>This PR creates a goroutine per Gossip topic, writing from the connection goroutines to the topic goroutines via a buffered channel. Essentially this serializes all messages from <em>all peers</em> to a single goroutine, but frees the connection goroutines to handle subsequent messages, and guarantees QoS per topic.</p><p>In addition, the code now creates a one-off goroutine per Block Sync request, so that scanning blocks or reading chunks from disk will not block the Block Sync topic goroutine. Another PR, <a href="https://github.com/orbs-network/orbs-network-go/pull/1193">#1193</a>, upgrades the Orbs platform to compile using Golang 1.12.6 (previously 1.11.x was used).</p><p>It is expected that the Lean Helix topic will not be blocked, as it will have a goroutine that deals with reading from the topic.</p><p><a href="https://github.com/noambergIL"><em>@noambergIL</em></a><em> and </em><a href="https://github.com/orbs-network/orbs-network-go/pulls/IdoZilberberg"><em>@IdoZilberberg</em></a> updated code in <a href="https://github.com/orbs-network/lean-helix-go/pull/49">PR49</a>, <a href="https://github.com/orbs-network/orbs-network-go/pull/1202">PR1202</a> to support <em>Sign()</em> becoming an external service — to that end, a cancellable Go context was added as a parameter to this method.</p><p>More PRs by <a href="https://github.com/noambergIL"><em>@noambergIL</em></a>:</p><ul><li><a href="https://github.com/orbs-network/orbs-network-go/pull/1186">PR1186</a> — To fix rewards &amp; double delegate state</li><li><a href="https://github.com/orbs-network/orbs-ethereum-contracts/pull/99">PR99</a> — For election review created a script to show every election breakdown</li></ul><p>More PRs by <a href="https://github.com/ronnno"><em>@ronnno</em></a>:</p><ul><li><a href="https://github.com/orbs-network/orbs-ethereum-contracts/pull/110">PR110</a>, <a href="https://github.com/orbs-network/orbs-ethereum-contracts/pull/112">PR112</a> — Orbs Rewards distribution</li><li><a href="https://github.com/orbs-network/orbs-network-go/pull/1188">PR1188</a> — NodeSync test for when both petitioner and responder have no blocks</li><li><a href="https://github.com/orbs-network/orbs-ethereum-contracts/pull/95">PR95</a> — Preparatory refactor; part of the larger effort to convert integrative tests that span both Orbs and Ethereum to Javascript. To that end, <a href="http://ronnno/">@ronnno</a> and <a href="https://github.com/orbs-network/orbs-network-go/pulls/electricmonk"><em>@electricmonk</em></a> created the subrepo <a href="https://github.com/orbs-network/orbs-ethereum-contracts/tree/master/psilo">Psilo</a>.</li></ul><h3>Network Production</h3><p><em>This segment was contributed by </em><a href="https://github.com/jlevison">@jlevison</a></p><h4>Rewards distribution</h4><p>At the beginning of July, the first Orbs protocol rewards distribution occurred. Orbs has built a database to mirror Ethereum and run the calculations based on the raw delegation and stake data. You can check the <a href="https://github.com/orbs-network/token-bi">token-bi repo</a> on Github, more information about the distribution <a href="https://www.orbs.com/first-orbs-rewards-distribution-summary/">can be found at our blog</a>.</p><p>You can read more about how Orbs Rewards are calculated in <a href="https://community.orbs.network/u/andrey/summary">@Andrey</a>’s recent post, “<a href="https://www.orbs.com/rewards-distribution/">Orbs Rewards Distribution</a>”.</p><h4>Development</h4><ul><li><a href="https://github.com/orbs-network/nebula/pull/77">Revamped the AWS roles</a> in Nebula as part of an ongoing security review process.</li><li>Published a <a href="https://github.com/orbs-network/orbs-network-go/blob/master/Metrics.md">list of the most important metrics</a> for guardians, validators and app developers. Introduces <a href="https://github.com/orbs-network/orbs-network-go/pull/1203">two new metrics</a>: transactions per second submitted to an individual virtual chain and queries per second served by an individual virtual chain per node.</li><li>Created a <a href="https://github.com/orbs-network/notary/pull/3">library</a> for notary apps, to enable building various solutions that rely on the notary core features of tracking information.</li><li>Orbs core team invested some time into <a href="https://www.orbs.com/making-sense-of-libra/">making sense of Libra</a>.</li><li>Explored a <a href="https://github.com/orbs-network/contract-external-libraries-go/pull/1">possibility of analytics contracts</a>, when smart contracts method calls are being tracked and the information about the use of the main contract can be made available via a separate contract. This opens many roads to tracking, analytics, and an audit via dedicated contracts with a common standardized interface.</li></ul><h3>Use Cases and Dev Experience</h3><p>This segment was contributed by <a href="https://github.com/jlevison">@jlevison</a></p><h4>Application Use Cases</h4><p>There are multiple application use cases being developed across the community these days (that I’m aware of). These projects will be elaborated upon in dedicated blog posts as they mature, so here we’ll provide some basic descriptions and details:</p><ul><li>A POC with a leading academic institution regarding blockchain-based music rights management — this is a well-known pain in the industry, and we believe our Orbs-based solution can provide a valuable service. The developed POS combines on-chain rights registry with off-chain indexing and storage.</li><li>A collection of use-cases with a media distributor to create a blockchain-based content registry (photos, videos etc.) and enable search, collaboration and monetization. Some interesting use-cases include:</li><li>Smart contracts to register and search for registered images — including a perceptual hash search that finds images similar to provided ones</li><li>Chrome extension — to highlight registered images in a browser and retrieve their metadata</li><li>Webcrawler — retrieve metadata for all images on a webpage</li><li>Document notarization — we’ve further developed the document notarization use-case, introducing encrypted fields, ownership and more. These concepts have been presented to multiple parties interested in blockchain-based document registration and notarization (<a href="https://github.com/orbs-network/notary">https://github.com/orbs-network/notary</a>).</li></ul><h4>Developer Experience</h4><ul><li>Added ability to <a href="https://github.com/orbs-network/gamma-cli/pull/5">read smart contract debug logs via gamma-cli</a> for development, more info documented at the <a href="https://docs.orbs.network/contract-sdk/gamma-in-depth/reading-logs-from-contracts">following page</a> in the contract SDK documentation.</li><li>Expanded the packages available for smart contract development by whitelisting more of the available packages in Go, the full list is <a href="https://docs.orbs.network/contract-sdk/orbs-contracts/limitations-of-orbs-contracts">available here</a>.</li><li>Introduced experimental libraries for contract development available at <a href="https://github.com/orbs-network/contract-external-libraries-go">https://github.com/orbs-network/contract-external-libraries-go<br></a>Currently includes extending the state to natively store structs.</li></ul><p>This is part of a larger SDK architecture change to enable experimental vs. stable, production-ready code, the team will expand on this subject and the rationale in a dedicated post.</p><ul><li>More documentation updates in regards to <a href="https://docs.orbs.network/contract-sdk/gamma-in-depth/starting-and-stopping-the-server#running-prism">prism</a> and the <a href="https://docs.orbs.network/contract-sdk/getting-started/the-orbs-starter-kit">starter kit</a>.</li></ul><h3>User Facing Products</h3><p><em>This segment was contributed by </em><a href="https://github.com/gilamran"><em>@gilamran</em></a></p><h4>Prism (Block Explorer)</h4><ul><li>Added a new script to automatically upgrade prims’s version, and publish it (<a href="https://github.com/orbs-network/prism/commit/ab90462d75029ddbad7ef0898929324734c056ea">commit</a>).</li><li><strong>Prism </strong>will now get published to docker hub on every push (experimental) and on every version upgrade.</li><li>Added dbVersion to the db (<a href="https://github.com/orbs-network/prism/commit/58c44688799dfc58a0375f6aa785be2acbefccf9">commit</a>), upgrading according to semver (<a href="https://github.com/orbs-network/prism/commit/e8c6af0008942da702f5fcac6dfb21bf444a02c0">commit</a>)</li><li>Introducing <strong>dbBuilder</strong> for first time/upgrade situations. (<a href="https://github.com/orbs-network/prism/commit/3db88589c40f99c1fe0b30445d679ad219cdfc28">commit</a>)</li></ul><h4>Hedron (Voting UI)</h4><ul><li>Fully supports Japanese and Korean language translations (<a href="https://github.com/orbs-network/orbs-ethereum-contracts/commit/5db3e68ee30ddd4867ed55eb2cd5be7b1b125039">commit</a>).</li><li>Removed old JS/KO sites (using permanent redirect) (<a href="https://github.com/orbs-network/orbs-ethereum-contracts/commit/9ec78203b5098e5c020e19476bb2cedd9b4fd927">commit</a>)</li><li>Using a new rewards contract, it is now possible to view past rewards on the site (<a href="https://orbs-network.github.io/voting/reward">link</a>)</li><li>Fixed stake calculation bug (<a href="https://github.com/orbs-network/orbs-ethereum-contracts/commit/cdd7756824433b9309f12a8a1351308c080f4552">commit</a>). Was showing the wrong percent.</li><li>Better locale when displaying numbers. (Was send as string from the server) (<a href="https://github.com/orbs-network/orbs-ethereum-contracts/commit/c973bf29949dc3bf4d74c8bbc2964cf2431ae16d">commit</a>)</li><li>Proxy server is now in the process of deprecation, and all the web3 code is being extracted (<a href="https://github.com/orbs-network/orbs-ethereum-contracts/commit/5f3c7b19208118c4d5fc0bf0c3ca99899f7a610b">commit</a>) and will be moved soon to the client-web project.</li><li>A big refactor to the <strong>client-web</strong> was done in order to separate Ethereum read/write services (with metamask and without). <a href="https://github.com/orbs-network/orbs-ethereum-contracts/commit/b343bd8345551dbe89c68bd7371e9dc69343bfb8">Commit</a>.</li><li>Removed unused contracts from the proxy server. (<a href="https://github.com/orbs-network/orbs-ethereum-contracts/commit/5af07a910ece78bc7966fece9aa6d60425caa9fa">commit</a>)</li></ul><h4>Playground (Online IDE)</h4><p>The Orbs Playground is an online IDE for developers, a fast an easy way to tryout Orbs smart contract creation and debugging. Deploy a smart contract, execute functions and view events and state history. Available on <a href="http://playground.orbs.network/">http://playground.orbs.network</a> for everyone.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VeIJ63dloYvXd3ika40inQ.png" /></figure><h3>Research and Architecture</h3><p><em>This segment was contributed by </em><a href="https://github.com/avilanthe1"><em>@Avilanthe1</em></a></p><p>Orbs’ research efforts continue with researchers and developers work on different aspects of the Orbs blockchain infrastructure! Here is a breakdown:</p><h3>PoS Research</h3><p><strong>Market research</strong></p><p>Resources are dedicated to researching the PoS market. There are two sides to this market: Projects, and ecosystem players. On the projects’ side, Orbs researchers have been focused on learning ~20 different projects which have a PoS element to them. In particular, they’ve been trying to understand what goals were the projects trying to realize via specific design choices, and how ecosystem players eventually chose to respond. On the ecosystem players side, mapping the market to different types of players — staking services, infrastructure services, lending platforms, exchanges, etc to how each type may benefit/harm a PoS network.</p><p><strong>Open and competitive validators nomination process</strong>.</p><p>Currently, Validators undergo a due diligence process in order to evaluate their technical abilities and enabling gradual rollout. Orbs architects are working on an architecture that enables to remove the need for due diligence and enables an open and competitive process. This competition, as a by-product, should increase the security of the network and its usability.</p><p>As a first step to achieve this, we are working on a locking contract for Validators and Validator candidates. This locking contract, deployed on Ethereum, is designed to match the Orbs election architecture and support efficient queries by the election contract that runs on top of the Orbs platform. In order to allow the protocol to evolve in the future, they’ve designed the contract to be migratable, while still requiring participants to provide their agreement for the migration.</p><h3>Threshold BLS signature scheme security proof</h3><p>An ongoing <em>Random Beacon</em> project is carried out by members of the research team. In this work, a set of rational players jointly perform a multiparty computation that results in a random number, that can be used in diverse applications. One such notable application is the selection of random committees in Orbs’ consensus mechanism.</p><p>A cryptographic primitive that naturally appears in this context, is ‘<em>threshold digital signature’</em>; the set of participants sign messages in an incorruptible manner as long as a large portion of them is honest. One manifestation of a threshold digital signature builds upon the well-known (single player) BLS signature scheme. However, security proof of the threshold version of this scheme is not covered in the literature. More specifically, the question raised is whether the devised scheme indeed holds the threshold property, meaning that a (certain specific) portion of players cannot produce a valid signature, while larger sets of players can. Orbs’ Research team has prepared a mathematical proof of security to ensure the security of the threshold version of the BLS signature scheme.</p><h3>Zero-Knowledge</h3><p>The Orbs core team continues to explore the subject of privacy through zero-knowledge proofs, focusing primarily on a few subjects:</p><ul><li><strong>Trusted Setup.</strong> Most efficient forms of zero-knowledge proofs require a <em>trusted setup, </em>a subject of controversy, as it entails an expensive procedure and is specified to an application. In other words, different applications (including updates to an application) require different trusted setups. We study zero-knowledge proof systems where the trusted setup only has to be carried out once and is universal in the sense that it supports all applications. These usually come at a price of efficiency, and we focus on mitigating this problem, taking advantage of the efficiency of the Orbs blockchain infrastructure.</li><li><strong>Key generation ceremony.</strong> The generation of keys is a process ideally performed by a trusted party, as leakage of the private keys has severe implications. However, In typical blockchain usually, such a party does not exist. Our team has been studying the procedure to ensure that keys do not leak while avoiding the need for a trusted third party.</li></ul><h3>File Systems and Immutable Large Data Storage</h3><p>Orbs Network aims for accommodating apps that (among others) require large amounts of storage. After all, how would you run a <a href="https://www.quora.com/What-is-the-total-size-storage-capacity-of-YouTube-and-at-what-rate-is-it-increasing-How-is-Google-keeping-up-with-the-increasing-demands-of-Youtube%E2%80%99s-capacity-given-that-thousands-of-videos-are-uploaded-every-day">distributed YouTube</a> if storage is limited? One direction the research team has taken to explore immutable storage for large data.</p><p>Part of the research included the reviewing of the IPFS (InterPlanetary File System) protocol. IPFS is a distributed peer to peer storage system that has recently gained a lot of interest from various blockchain projects that see IPFS as a good candidate for their protocol’s storage layer (like TrueBit).</p><p>The research team has been scrutinizing the different components of IPFS in order to learn from them towards a solution tailored particularly for the purpose of the Orbs blockchain infrastructure.</p><p>Among these components are Distributed Hash Tables (DHTs) for fast content lookup and peer locating the network; GIT protocol for version control; block exchange protocol for data swapping marketplace — all may be relevant for the future design of the ever-evolving Orbs infrastructure.</p><p>A prominent piece that is missing in the original design of IPFS is the incentive layer. When considering distributed storage solutions at scale, with recurrent data reads and writes, there must be an incentive layer that allows nodes to withstand their costs. The FileCoin protocol is designed to complement exactly that. The research team has recently focused on one of FileCoin’s most interesting innovations: Proof-of-Replication (PoRep). PoRep provides an entity with a way to prove that a specific number of replications of a particular file are stored in her local storage system. A distributed file system protocol that is able to absorb the overhead PoRep incurs can solve the problem of data availability, which is one of the major issues when dealing with vast amounts of storage.</p><p><strong>Thanks for reading!</strong> I hope this recurring monthly segment is educational and does a great job informing Orbs followers on the R&amp;D happenings. If something is unclear, or you wish to comment or otherwise participate in the open-source Orbs project, join the Orbs Community on Discourse or <a href="mailto:hello+nate@orbs.com">email us directly</a> :). Also, be sure to check out the links below for more information.</p><p>Till next time,</p><p>Ciao</p><p>❤</p><h3>Get involved with Orbs</h3><ul><li>Visit the <a href="https://www.orbs.com/?source=post_page---------------------------">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network?source=post_page---------------------------">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/?source=post_page---------------------------">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/rd-update-orbs-july-2019/"><em>https://www.orbs.com</em></a><em> on July 18, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=14ab4f3e9308" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/orbs-r-d-update-july-2019-14ab4f3e9308">Orbs R&amp;D Update July 2019</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Sustainable Token Economy Cannot Be Inflationary]]></title>
            <link>https://medium.com/orbs-network/a-sustainable-token-economy-cannot-be-inflationary-orbs-88c2e98bc40b?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/88c2e98bc40b</guid>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[economics]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Oded Noam]]></dc:creator>
            <pubDate>Tue, 25 Jun 2019 11:45:01 GMT</pubDate>
            <atom:updated>2019-06-25T13:57:47.212Z</atom:updated>
            <content:encoded><![CDATA[<h4>In the long run, crypto-economies based on inflation are not sustainable. What incentive models do make sense for decentralized platforms?</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1LBE6E13lQPEq5tfB6N9QQ.jpeg" /></figure><p><em>Blockchain is a young business, too young for us to have seen any project fully develop. If we look around, we see how inflationary models benefit projects in their infancy. But this observation will not remain once these projects grow out of their infancy.</em></p><p>For bootstrapping a good blockchain platform, having a good protocol and implementation is not enough. A key element in the success of a decentralized system is having different and independent groups use it, operate it and govern it. Designing an economic incentives mechanism to incentivize such participation by all these different groups is a big part of the work related to launching a blockchain platform.</p><h3>How to take off, how to cruise</h3><p>It’s important to distinguish between incentives that can get a platform “off the ground” and what’s needed for it to sustain in the long run.</p><p>When starting from zero, none of the participants can expect to benefit from any normal course of business: The value generated is just not sufficient to sustain any economic activity, and surely there’s not enough to go around. The only asset a blockchain platform has at this point — and in fact, the same may apply to any product that is launching for the first time — is its growth potential and the benefits of joining early on what could become a success.</p><p>There are many ways the promise of future success can be used to promote participation: Sell shares of future success to investors and pay participants (or at least subsidize their service) to lure them in; distribute shares in the future success to the early participants; have an “early mover advantage” in place so participants can hope to enjoy the fruits of their seniority; and more. And though there are different ways to achieve this, the principle is one: Participants allocate value (either plainly by providing funding or in the form of putting in the effort, time or their reputations) and expect to gain benefits, financial or otherwise, if the platform takes off.</p><p>Of course, this cannot apply in the long run, when the growth potential has been exhausted. Just like other products, blockchain platforms that reached their “cruise altitude” must have a <strong>sustainable model</strong>. In a sustainable model, the total value gained from the platform surpasses its total operating costs and the parties gaining that value are sharing enough of their gains with the parties bearing the cost to make the operation beneficial.</p><p>Outside of blockchain, this can be seen with tech start-ups who raise venture funding and subsidize their services to gain market share, starting to monetize only after growing enough to ensure their market dominance. In the public blockchain space, no platform has yet reached that point. Even Bitcoin, the first blockchain platform, is still in its early growth stages, and is heavily subsidized: for example, in the past 3 months miners gained about 3,850 BTC from mining fees and 164,450 BTC from block rewards. In other words, block rewards paid for 97.5% of the mining cost. Block rewards are simply subsidies transferred from the pockets of early purchasers (whose BTC is worth slightly less due to inflation) to the pockets of miners. The purchasers, of course, are happy to subsidize Bitcoin use, because they expect it to enable wider adoption of the protocol and increased demand for the BTC they hold.</p><h3>Long-term Strategy</h3><p>It may sound as if creating an economic model that works during takeoff is the harder part of the problem: it involves estimating the future value of assets, including intangible assets such as experience, brand, seniority and so on. But in fact, takeoff models have been tried in the hundreds, and by observing which blockchain projects created a high-quality community of operators we can assess what works in the existing economic models. The long-term sustainability of an economic model is, on the other hand, mostly uncharted territory.</p><p>There are, though, two types of stakeholders we can profile: the token holders and the platform users (app developers).</p><h4>Who are the token holders and what do they want?</h4><p>Token holders in platforms that are taking off are a very diverse group that is quite hard to define. But the future is much simpler: When the platform has matured and its growth is completed, utility tokens’ use is just as their name suggests — to pay for a utility (for that matter, the utility can be for paying fees, staking, voting, etc). Naturally, those holding the token, are doing so <em>only</em> because they intend to use it in the future, or used it in the past. They don’t expect to get rewarded for holding it, and they surely don’t expect to be diluted for subsidizing someone else’s use of the network.</p><h4>What platform users want</h4><p>The needs of the app developers are actually easy to predict. When all the hype dissolves, we can expect to see that consumers using blockchain-based apps aren’t willing to pay more than — or experience a product inferior to — its centralized competitor. The watermark for the platform is cloud: centralized apps using cloud platforms have the best tools to create a great product in predictably low costs. Decentralized apps that compete with them must be able to offer similar quality at roughly the same costs.</p><p>Note that it’s not enough to have low fees in the present. If the network economics don’t make sense, the fees may be low now but skyrocket when there’s actual demand for the platform. This is the case with many of today’s public blockchain platforms. The economics of cloud services is aimed towards the exact opposite: in almost all services, users expect to pay less as they grow, and for all costs to decline over time — in proportion to ever-declining hardware costs.</p><p>Our full analysis of what blockchain platforms need to do in order to win in the bigger competition with centralized ones is now on our <a href="https://www.orbs.com/white-papers/blockchain-architecture-considerations-to-compete-with-paas-cloud-services/">website</a>.</p><h3>My conclusion</h3><p>I firmly believe that inflationary models and perpetual rewards models are unsustainable. In designing the economy of the Orbs platform, we focused mostly on making sure the users can expect to have low and predictable fees in the long term, so they don’t have to worry about changing their chosen platform as they begin to grow fast. Economic models need to be determined early on and are extremely hard to change at later stages, so getting the fundamentals right in the first time is critical. I’d be happy to answer questions or see comments on our models in our <a href="https://community.orbs.network/">discussion board</a>.</p><h4>Inflation on the Orbs platform</h4><p>Accordingly, the ORBS token which drives the Orbs platform is non-inflationary. All tokens have been pre-mined and the supply is fixed (at 10 billion tokens).</p><p>Funds needed for bootstrapping the platform in its early years, such as token rewards in the Proof-of-Stake model, do not come from inflation — unlike many PoS projects. Instead, the source of funds for token rewards is a pre-allocated and limited reserve pool (55% of the total supply, vested over 55 months from TDE).</p><p><strong>For the detailed breakdown of the ORBS token distribution, please take a look </strong><a href="https://www.orbs.com/orbs-token-distribution/"><strong>here</strong></a><strong>.</strong></p><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/sustainable-token-economy-cannot-be-inflationary/"><em>https://www.orbs.com</em></a><em> on June 24, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=88c2e98bc40b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/a-sustainable-token-economy-cannot-be-inflationary-orbs-88c2e98bc40b">A Sustainable Token Economy Cannot Be Inflationary</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Guide to Apps on the Orbs Network, Part II: Writing a Front-End Part]]></title>
            <link>https://medium.com/orbs-network/guide-to-apps-on-the-orbs-network-part-ii-writing-a-front-end-part-684ccf0595ae?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/684ccf0595ae</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[smart-contracts]]></category>
            <dc:creator><![CDATA[Sergey Bolshchikov]]></dc:creator>
            <pubDate>Wed, 19 Jun 2019 10:24:15 GMT</pubDate>
            <atom:updated>2019-06-19T10:24:15.218Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LhUezN9iuEoqvqM5PKMOZg.jpeg" /></figure><p><em>In the</em><a href="https://www.orbs.com/writing-an-app-on-orbs/"><em> previous post</em></a><em>, we’ve discussed how to write and deploy a smart contract on the Orbs Network. This part will be devoted to writing a front-end application, and interaction with the contract via orbs-client-sdk in JavaScript.</em></p><h3>Scaffolding the app</h3><p>For a quick and easy start-up, we will use React and the create-react-app to generate a new application.</p><p>Our application will contain only 3 components:</p><ul><li><strong>App </strong>— Higher-order component which will contain the state and the business login of our application</li><li><strong>Messages </strong>— Presentational component that will render list of messages, and</li><li><strong>MessageInput </strong>— Presentational component with &lt;/textarea&gt; for composing a new message.</li></ul><p>We would also need orbs-client-sdk to communicate with Orbs. It&#39;s an SDK that provides basic functionality like creating an account, querying and sending transactions, etc. For more documentation check out this <a href="https://github.com/orbs-network/orbs-client-sdk-javascript">repo</a>.</p><p>We install it via npm: npm install orbs-client-sdk.</p><h3>Creating a user</h3><p>Every chat application requires a user to post any message. We also need an account in order to communicate with the contract. For the purpose of our application, we will create an account per user in case one doesn’t exist yet.</p><p>Orbs-client-sdk has a method for that:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*hUf5s80j7hN_haIF.png" /></figure><p>Sender is an object with 3 fields: publicKey, privateKey and address. These fields uniquely identify our user. In order to avoid the generation of a new account every time the user enters the app, we will store it in the localStorage. <strong>Important! Storing privateKey in the localStorage is for demonstration purposes ONLY. Do not do this in the production environment.</strong></p><h3>Creating an SDK instance</h3><p>Besides the user account, we need an instance object of orbs-client-sdk for our app to function.</p><p>We can create it by calling a constructor function:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*0By7Vl3JOEtcCx3N.png" /></figure><p>The constructor of the client receives 3 parameters:</p><p>We will use this instance in the future for querying node and sending transaction.</p><h3>Sending a message</h3><p>Now, when we have an account, we can start adding messages. Fetching first won’t show us anything, so we’ll need to add some:</p><p>MessageInput component renders a simple TextArea with the submit button. It gets a prop “onSend”, but its logic is implemented in the app. Then a user hits the Submit button or Enter, the callback is invoked passing the message as a parameter.</p><p>The more interesting part is sending a message to the contract. Let’s take a look.</p><p>Firstly, we need to create a transaction:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*gvCFKNwV1aZBPwtt.png" /></figure><p>Transaction is like a write-to database, which is why we also need to pass our public and private key in order to sign the transaction. We specify the contract by its name and the method that we want to invoke (sendMessageToChannel in our case). Lastly, we pass the array of arguments that will be passed to the specified method during invocation.</p><p>Since the contract is implemented in Go language and it has different types from JavaScript, orbs-client-sdk provides utility function (e.g. argString) to normalize types between different languages.</p><p>With the transaction object in our hands, we can actually send it:</p><p>const response = await orbsClient.sendTransaction(tx);</p><p>At the end we can verify the response by reading transaction status and execution result. If the values are “COMMITTED” and “SUCCESS”, then out transaction has been executed successfully.</p><h3>Fetching messages</h3><p>In the previous part, we’ve been able to send the message. Now let’s try to display them in a live manner. We will start with just fetching the first batch, say, first 50 messages. Then we will improve the solution by using pagination and polling for live updates.</p><h3>Fetching the first batch</h3><p>Similar to sending a message, we start with creating a query. It’s different from transaction, because we are doing a read action and it doesn’t require the consensus between nodes. Therefore it’s much faster:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/924/0*9CU-oXgyELznPb4a.png" /></figure><p>In order to create a query, we are calling the corresponding method of the orbs client and passing our public key, contract name and the method that we would like to invoke on the specified contract. Lastly, we pass the array of arguments, very similar to what we’ve seen in createTransaction. In our case we specify the channel name and range of messages, say we want to get the first 5 messages.</p><p>When we send the query, we should expect the array of messages in return in JSON format.</p><p>We have the Messages component whose purpose is to render the list of messages. As soon as get a response from our query and update the state of the App component, messages will be rendered on the page.</p><p>There are two flaws with our current implementation — when a user sends a new message, we need to refresh the page in order to see it; when we have more than 5 messages, we won’t see them too. We can solve it with pagination and polling mechanism.</p><h3>Pagination</h3><p>Pagination, in a nutshell, is a mechanism of fetching only chunks of data instead of fetching all at once for a better performance.</p><p>The method ‘getMessageForChannel’ supports from and to arguments that allows us to specify the chunk of messages that we want. We start with the first message, and going to fetch 5 messages every time.</p><p>As soon as we get a response, we update the value of the message cursor with the amount of messages received and append new messages to the ones that we loaded previously:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*UJFSVwj7yy1r844I.png" /></figure><h3>Polling</h3><p>Now let’s address the problem with live updates. There are 3 possible solutions in the front-end world to this problem: polling, long-polling and web sockets. We will use the simplest of them — polling.</p><p>It means we will call our fetchMessages function at a constant rate to query the contract:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*APRDWm4xjT1gVTNw.png" /></figure><p>During the mount of our application, we firstly call fetchMessage to get the first batch and then we call setInterval. JavaScript event loop will invoke our fetch function at the given refresh rate. Thus, every 2 seconds we fetch a new batch and if it contains new messages, our state will be updated and messages are rendered.</p><h3>Deploying the app</h3><p>Our application is ready. It’s time to deploy it and see it live in production. Create-react-app supports the generation of a static website and deploying it to github pages. Follow this <a href="https://facebook.github.io/create-react-app/docs/deployment#github-pages-https-pagesgithubcom">guide</a> to enable it for your application.</p><p>You can see the Conversation application running live <a href="https://orbs-network.github.io/conversation/">here</a>.</p><h3>Conclusion</h3><p>In these two parts ( <a href="https://www.orbs.com/writing-an-app-on-orbs/">Part I</a>) we’ve discussed how to build a simple decentralized application end-to-end using Orbs platform. The full working code is available in this GitHub <a href="https://github.com/orbs-network/conversation">repository</a>. Feel free to fork and improve it.</p><p><em>Sergey (</em><a href="https://github.com/bolshchikov"><em>@bolshchikov</em></a><em>) is a passionate software engineer and manager who loves to solve complex problems. He previously worked as an engineering manager and developer at Wix.com and co-founded the biggest front-end conference in the Middle East — “YouGottaLoveFrontend”. Sergey holds an MSc in Industrial Engineering from the Technion.</em></p><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/writing-front-end-on-orbs/"><em>https://www.orbs.com</em></a><em> on June 17, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=684ccf0595ae" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/guide-to-apps-on-the-orbs-network-part-ii-writing-a-front-end-part-684ccf0595ae">Guide to Apps on the Orbs Network, Part II: Writing a Front-End Part</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Orbs Universe: The First Six Weeks]]></title>
            <link>https://medium.com/orbs-network/orbs-universe-the-first-six-weeks-20e41733110?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/20e41733110</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[proof-of-stake]]></category>
            <dc:creator><![CDATA[Andrey Dulkin]]></dc:creator>
            <pubDate>Thu, 13 Jun 2019 15:46:35 GMT</pubDate>
            <atom:updated>2019-06-18T16:50:45.785Z</atom:updated>
            <content:encoded><![CDATA[<h4>The following report highlights the main developments in the Orbs Proof-of-Stake ecosystem based on accumulated data for the first six weeks.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h0iRpfQmcM_DbZqOZsZrLA.jpeg" /></figure><p>The Orbs network was launched and opened to public participation at the end of March 2019 alongside the distribution of the ORBS token to private sale purchasers. The following report highlights the main developments in the Orbs Proof-of-Stake (PoS) ecosystem based on accumulated data for the first six weeks.</p><h4>Main findings:</h4><ul><li>Community analysis: Organic Guardian growth and education led to increased community interest in participating in securing the network through staking</li><li>Product contribution from third parties increases with community interests, spearheaded by Guardians</li></ul><p>The Orbs core team is excited that so many participants have already joined the Orbs community and begun making crucial contributions to the security, operation, and development of the Orbs network.</p><p><strong><em>Disclaimer</em></strong><em> — the data that serves as the basis for the findings of this report was gathered from various sources, as noted throughout the document. Naturally, due to the pseudonymous nature of the Ethereum blockchain, there is definitely some potential margin of error in conducting such analysis.</em></p><h3>Community interest</h3><p><strong>Delegated stake growth over time</strong></p><p>In the Orbs Universe, the Delegators assign their voting power to the Guardians, who, in turn, participate in Validator election on their behalf (DPoS). Growing delegated stake shows increasing interest in participating in the Orbs ecosystem:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DSoibW6r7HctGqQhbzKPoA.jpeg" /><figcaption><em>Growth of Orbs total delegated stake</em></figcaption></figure><h4><strong>Acquired stake (from Exchanges) and delegation over time</strong></h4><p>We are witnessing a growing interest in acquiring ORBS tokens on exchanges for the purpose of delegating them to participate in the Orbs Universe.</p><p>This analysis is based on collecting known addresses of cryptocurrency exchanges from various online sources (<a href="https://etherscan.io/">Etherscan</a>, <a href="https://bloxy.info">Bloxy</a>) and employing basic heuristics on address activities. The tokens retrieved from exchanges that changed their delegation status were identified.</p><p>The following graph shows the percentage of the delegated stake of tokens acquired on exchanges:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8b0KvdzlUL30MnsTIbQ9RQ.jpeg" /><figcaption><em>Growth of delegations of ORBS retrieved from exchanges</em></figcaption></figure><p>Based on our findings we can see that significant amounts of ORBS tokens acquired and retrieved from exchanges are delegated and participate in the Orbs PoS ecosystem. We believe this shows growing community education and interest, with a focus on long-term participation in the network (as opposed to speculation).</p><h3>Increasing Decentralization</h3><p>Decentralization of token holdings in public blockchain is critical to the health and sustainability of the network. Decentralization increases network security by reducing the risk of collusion between participating parties. For example, a more even distribution of stake between a growing number of token holders reduces the risk of a small number of token holders having too much of an influence over the network and creating a cartel. Similarly, a growing number of Guardians, with an evener voting weight distribution between them, increases the confidence of ecosystem participants that a small group of Guardians won’t be able to collude and take over the network governance.</p><h3>70% of Delegation over time</h3><p>In the current PoS model, Guardians vote frequently to exclude misbehaving Validators from the network. A Validator that was voted out by 70% of the participating vote over a course of 3 election cycles will be removed from the Validators list.</p><p>The diagram below indicates how many different addresses hold the top 70% of delegated ORBS tokens, which means the minimal number of Delegators needed to reach the threshold of 70% of delegated stake in order to vote out a Validator:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A-Cp1GCgJar8zwPoqJQyNg.jpeg" /><figcaption><em>Increasing delegation distribution</em></figcaption></figure><p>We see a growing distribution of the delegated stake, thus increasing the decentralization.</p><h3>80% of ORBS float holders over time</h3><p>In addition to the delegated stake, we also analyzed the distribution of ORBS token holdings. A significant portion of ORBS tokens is being held at exchanges (see above), which obscure the number of holders and their stakes. Thus, for this analysis, we focused on ORBS holdings out of exchanges.</p><p>The metric we chose is how many different addresses hold 80% of ORBS tokens in circulation, which we measured over time:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AWoxONPgZrLbZTQ1sZ9uTg.jpeg" /><figcaption><em>Increasing ORBS holdings distribution</em></figcaption></figure><p>We see that over time the holdings are distributed between more and more parties — currently, over 600 addresses hold 80% of ORBS float.</p><h3>Guardian activity</h3><h4><strong>Guardian growth over time</strong></h4><p>The initial number of community organizers indicates the commitment of large private sale holders to the network long-term. The later growths show an increased organic interest for creating new communities around the Orbs PoS Universe:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ASeWji8MG4pW8hAeRhipdw.jpeg" /><figcaption><em>Geographical distribution of ORBS Guardians</em></figcaption></figure><h4><strong>Guardian weight change over time</strong></h4><p>Guardians are soliciting appointments from Delegators to vote on their behalf in Validators elections. An interesting metric of decentralization is the Guardian voting weight over time relative to the overall voting weight.</p><p>The following chart shows that the voting power of Guardians becomes more evenly distributed over time:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6cFZKBPZReCOSEimD95Kvw.jpeg" /><figcaption><em>Guardians voting weight over time</em></figcaption></figure><h3>Guardian organization</h3><p>The Guardians have a central role in the Orbs Universe. They monitor the performance of the Validators to vote out misbehaving ones, and they also organize the Delegator communities and represent their interest.</p><p>Since the Orbs network launch, Guardians have developed tools to educate the Delegators and further ease the delegation process, translated Orbs material to various languages, created new communication channels and, perhaps most important, diligently participated in the voting process.</p><p>Some examples of Guardians activities:</p><h4>Paradigm Citadel</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*SI-CDl_xkS7wb0Tr.jpg" /></figure><p>Paradigm Fund is a Moscow-based technology fund, engaging in deep research of blockchain technology projects and participating accordingly. They researched the Orbs project, (team, technology etc.) and chose the Orbs project over alternatives. They are among Orbs Universe Guardians and have created tools to grow the ecosystem, such as website templates for new Guardians, Guardians communication channel and delegation scheduler.</p><h4>D.VA Group</h4><p>A Korean crypto group engaged in multiple activities in the blockchain space. They are among the Orbs Universe Guardians and have developed a Telegram-based delegation bot, which makes it very easy for Delegators to delegate and get information and updates about Orbs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/573/0*P3A2HTovxIBo-_6k.jpg" /></figure><h3>Technological interest</h3><p>Orbs is an open source project with over 70 repositories publicly available on GitHub under the MIT license. An important indication of a project’s success is the level of technological engagement by the community in the development of various modules, components, and tools to enable a more versatile, robust and easier operation of the entire ecosystem.</p><p>We already see technical interest both from Validators, who aim to make Orbs node operation smoother and cheaper and from Guardians, who develop tools for <a href="http://community.orbs.network">the community</a>.</p><h3>Validators adaptations</h3><p>The reference implementation provided by Orbs includes tools to deploy the Orbs Validator node on AWS. Several Validators expressed interest in further developing the tools to support node operation on their own infrastructure.</p><p>One Validator operates several data-centers around the world and has developed and implemented a toolchain to deploy the Orbs node on a bare-metal server.</p><p>Another Validator developed an alternative deployment procedure to deploy the Orbs node on any server and is planning on sharing the solution with the other Validators to provide an alternative deployment option reducing operational costs.</p><p>Both intend to share their developed tools and procedures with the community.</p><h3>Summary</h3><p>Orbs is a growing project that has already garnered significant interest and participation in its ecosystem in the first six-weeks since launch. We find growing participation both from Delegators, who hold and acquire ORBS to participate in the PoS model and from Guardians and Validators, who join the ecosystem and create tools to improve it.</p><p><strong><em>Liked this update? </em></strong><a href="https://community.orbs.network/t/orbs-universe-the-first-six-weeks/162"><strong><em>Join the discussion on the community board thread</em></strong></a><strong><em>!</em></strong></p><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/orbs-universe-first-six-weeks/"><em>https://www.orbs.com</em></a><em> on June 13, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=20e41733110" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/orbs-universe-the-first-six-weeks-20e41733110">Orbs Universe: The First Six Weeks</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Orbs Rewards Distributio]]></title>
            <link>https://medium.com/orbs-network/orbs-rewards-distributio-e74f3bad688c?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/e74f3bad688c</guid>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[proof-of-stake]]></category>
            <dc:creator><![CDATA[Andrey Dulkin]]></dc:creator>
            <pubDate>Thu, 13 Jun 2019 15:39:29 GMT</pubDate>
            <atom:updated>2019-06-18T14:07:07.222Z</atom:updated>
            <content:encoded><![CDATA[<h3>Orbs Rewards Distribution</h3><h4>At the beginning of July 2019, the first Orbs rewards distribution will occur! The following post describes the various rewards, how they are calculated and the distribution process:</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9rv1hMJpLBYe7T7H2HWXHw.jpeg" /></figure><p>The Orbs network launched on March 28th, 2019. The Orbs network relies on all of the participants in the proof of stake ecosystem to provide for the security and operation of the network. There are 17 active Guardians currently registered and 14 Validators running in production. There are now over 1300 Delegators participating in the Orbs PoS ecosystem.</p><p>At the beginning of July 2019, the first rewards distribution will occur. This post describes the various rewards, how they are calculated and the distribution process.</p><h3>Reward Types</h3><p>Rewards are accumulated following every election cycle. There are 3 types of rewards: Participation Rewards, Guardian Excellency Rewards, and Validator Rewards.</p><p>Active Guardians are eligible for Delegator rewards for their own stake.</p><p>It is important to note that the same address can be eligible for all 3 types of rewards, i.e. a Validator can serve as a Guardian, and also receive self-delegation rewards.</p><p>The accumulated rewards for a specific address are available here:<br><a href="https://orbs-network.github.io/voting/reward">https://orbs-network.github.io/voting/reward</a></p><h4>Participation Rewards (Delegators and Guardians)</h4><p>Token holders that delegate their voting weight to an active Guardian directly or indirectly, are rewarded proportionally to their stake. In order to receive the delegation reward for an election term, Delegators must have delegated to a Guardian that participated in the election.</p><p>An annual aggregate sum of 60M ORBS tokens is allocated to reward participation (of Delegators or Guardians). The reward allocation per election term is determined as a fraction of the annual allocation proportional to the duration of the election term.</p><p>Participants are rewarded in proportion to the stake they own and delegate at the time of each election event. The rewards are calculated at the end of each election term. The reward allocated to any specific Participant at any specific election term shall be capped to such Participant’s delegated stake for that election term multiplied by 8% divided by the annual number of election periods (for detailed calculation, see <em>“Rewards calculation”</em> section below).</p><h4>Guardian Excellency Rewards</h4><p>Guardians enforce the security of the network and are rewarded for their own stake as part of the participation reward (described in the previous section). In order to encourage Guardian participation, top-ranking Guardians are also rewarded with the Guardians Excellence Program.</p><p>An annual aggregate sum of 40M Orbs is allocated to reward top-ranking Guardians for their work. The reward allocation per election term is determined as a fraction of the annual allocation proportional to the duration of the election term.</p><p>In each election term, rewards will be allotted to the 10 leading Guardians that actively participated in the elections, ranked by the amount of stake delegated to them (including their own stake) in that election. The Guardian Excellency reward is distributed to Guardians in the top 10 group (in proportion to that stake). The rewards are calculated at the end of each election term. The reward allocated to any specific Guardian at any specific election term shall be capped to such Guardian’s total delegated stake for that election term multiplied by 10% divided by the annual number of election periods (for detailed calculation, see <em>“Rewards calculation”</em> section below).</p><h4>Validator Rewards</h4><p>Validators are rewarded for running the network protocol and the actual steps they take to keep the network active and secure. The Validators rewards comprise:</p><ul><li>4% annual rate of the Validator own stake. Awarded for the duration the Validator was elected</li><li>Fees paid by any applications which may run on Orbs, divided equally between the active Validators</li><li>Validator Introduction Program — 1M ORBS tokens per Validator, on an annualized basis. Awarded in proportion to the duration the Validator was elected, for the duration of the Validator Introduction Program.</li></ul><h3>Rewards Distribution Process</h3><ul><li>Rewards will be distributed at the beginning of July (exact schedule to follow).</li><li>The rewards will be pushed to the recipients’ addresses on Ethereum.</li><li>The rewards will comprise the accumulated rewards for each address (for all its relevant roles), up until (and including) the 27th elections, which will be based on Ethereum block number 8048900, which will occur at the end of June (<a href="https://etherscan.io/block/countdown/8048900">https://etherscan.io/block/countdown/8048900</a>)</li></ul><h3>Rewards calculation</h3><p>The rewards calculation is available in the “Orbs PoS Ecosystem” document ( <a href="https://www.orbs.com/proof-of-stake-ecosystem/">https://www.orbs.com/proof-of-stake-ecosystem/</a>). The calculations will be published in parallel with the actual rewards distribution so that anyone can retrieve the relevant information from the Ethereum network and confirm the calculations.</p><p><strong>An example of calculated rewards for the 19th election cycle </strong><a href="https://docs.google.com/spreadsheets/d/1xFcErCbMfltISEOQjVMw3kZACszGBcvLQnmO487RqQk/edit?usp=sharing"><strong>is available here.</strong></a> <em>Note — these rewards are just for the 19th election cycle, </em><strong><em>NOT</em></strong><em> the total accumulated rewards.</em></p><h3>The actual calculations</h3><p><strong>For elections and rewards calculation purposes, only whole ORBS tokens are considered:</strong></p><ul><li>For example, for a Delegator stake of 15,240.13 ORBS the participating stake is 15,240 ORBS</li><li>This “whole ORBS only” approach is carried throughout all calculations</li></ul><p><strong>Number of election periods in a year = 117.23</strong></p><ul><li>This calculation is based on the original blockheight progression on the Ethereum network</li><li>Elections occur every 20,000 Ethereum blocks</li></ul><p><strong>Per election Validator reward = validator_stake * (4%/num_periods) + (1M / num_periods)</strong></p><ul><li>At this point, there are no application fees on the network</li></ul><p><strong>Per election Guardian Excellency reward = top10_guardian_reward_ratio * guardian_total_voting_power</strong></p><ul><li>Where top10_guardian_reward_ratio = MIN(10%,(40M / sum_of_top10_guardians_total_voting_power)) / num_periods</li><li>This reward is for the Top 10 (by their total voting power) of the Guardians who voted in this election round</li></ul><p><strong>Per election Participation reward = delegator_reward_ratio * delegator_stake</strong></p><ul><li>Where delegator_reward_ratio = MIN(8%,(60M / all_participating_stake))/num_periods</li></ul><h3>Reward calculation fixes</h3><p>Lately, one of the Guardians notified the core team regarding an issue with rewards calculations. The core team has researched the issue and discovered a bug (an incorrect spec implementation) in the reward calculation contract. This bug caused a miscount for a small number of delegations, affecting 29 participating addresses, to the total sum of 89,668 ORBS (less than 0.5% of the projected total rewards for the first 3 months).</p><p>A fix for this issue was approved and deployed by the Validators.</p><p>The affected participants will be compensated manually by Orbs sending them the difference, after the general rewards distribution.</p><p><a href="https://docs.google.com/spreadsheets/d/164u7hawrcs-VqCICSJU8Z1PKgLgdJZ0F4DAJWwDBVf0/edit?usp=sharing">Click to view the list of affected addresses.</a></p><h3>Summary</h3><p>The upcoming rewards distribution marks a milestone in the Orbs network journey. We are all excited to see what’s next for Orbs and look forward to the entire ecosystem working together to make the Orbs vision a reality!</p><p>PLEASE NOTE: RECEIPT OF REWARDS OR OTHER VALUE, AS WELL AS ANY USE OF THE ORBS NETWORK OR ACTIVITY THEREON, IS SUBJECT TO THE <strong>ORBS NETWORK TERMS OF USE,</strong> WHICH ARE AVAILABLE AT <a href="https://github.com/orbs-network/orbs-spec/blob/master/NETWORK-TOU.md">https://github.com/orbs-network/orbs-spec/blob/master/NETWORK-TOU.md </a>, INCLUDING, WITHOUT LIMITATION, ANY TERMS AND CONDITIONS THEREOF PERTAINING TO TAX CONSEQUENCES, WITHHOLDING OBLIGATIONS AND/OR TAX INDEMNIFICATION.</p><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/rewards-distribution/"><em>https://www.orbs.com</em></a><em> on June 12, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e74f3bad688c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/orbs-rewards-distributio-e74f3bad688c">Orbs Rewards Distributio</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Complete Guide to Writing an Application on the Orbs Network (Part I of II)]]></title>
            <link>https://medium.com/orbs-network/complete-guide-to-writing-an-application-on-the-orbs-network-part-i-of-ii-6038ae3260a?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/6038ae3260a</guid>
            <category><![CDATA[development]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[smart-contracts]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Kirill Maksimov]]></dc:creator>
            <pubDate>Tue, 11 Jun 2019 13:59:57 GMT</pubDate>
            <atom:updated>2019-06-11T14:00:36.645Z</atom:updated>
            <content:encoded><![CDATA[<h3>Complete Guide to Writing an App on the Orbs Network (Part I of II)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6XQa23_inRDU34vWSSs3qg.jpeg" /></figure><h4>Introduction</h4><p>We believe that the development of blockchain technologies is going to change the way developers write applications as we know today. Orbs is a part of this massive effort by existing as a public platform, open to anyone. These two articles (Parts I &amp; II) will demonstrate how to build a fully working chat application using Orbs platform.</p><p>In general, decentralized applications consists of two parts: A smart contract which stores information, and a client-side that communicates with it via sdk. In Part I, we will describe how to write a simple smart contract on the Orbs network, test it, and finally to deploy it.</p><p>Part II is devoted to writing a simple client-side application using React. I will demonstrate how to use orbs-client-sdk to query smart contract and send a transaction written under consensus.</p><h4>Prerequisites</h4><p>Before we start, you will need the following tools installed on your machine:</p><p>Docker is used to run Orbs smart contracts locally. NodeJS and npm are used to write client-side application that will communicate with the smart contract.</p><h3>Part 1: Writing, testing &amp; deploying an Orbs smart contract</h3><h4>Anatomy of a simple smart contract</h4><p>Writing contracts for Orbs is very simple. Currently, it supports Go language only, which uses a basic syntax familiar enough to most programmers without prior knowledge.</p><p>Let’s look at the sample contract that increments a counter and returns its current value:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*UWXrFO1x961K2U3k.png" /></figure><p>A contract consists of two exported functions — add and get. They will be available to be called from a client application. We reveal them by defining a global variable PUBLIC.</p><p>System function (_init) is called by the system only once when the contract is deployed. This function is not part of the public interface.</p><h4>Orbs-contract-sdk</h4><p><a href="https://github.com/orbs-network/orbs-contract-sdk">Contract SDK</a> allows developers of smart contracts to interact with the Orbs platform. There is plenty of documentation about it in the <a href="https://orbs.gitbook.io">gitbook</a>, so we won’t discuss it in too much detail right now.</p><p>What is important for us in this tutorial is the ability to set and read <em>state</em>. State is a simple map between key and its value. In the example above, we create a counter and update its value on add operation. The initial value is 0 as defined in _init() function. Add function reads the current value in the state and adds the amount which has been passed to the function.</p><h4>Running locally with Gamma-cli</h4><p>When we have a contract, we execute it by running it on a local server.</p><p>Orbs provides its own toolchain (similar to Ganache for Ethereum) for running a simulated blockchain environment. It is called Gamma-cli, and is available here: <a href="https://github.com/orbs-network/gamma-cli">https://github.com/orbs-network/gamma-cli</a>.</p><p>On Mac, you can install it with a single command (you need to have Docker installed for gamma to run):</p><p>brew install orbs-network/devtools/gamma-cli</p><p>You can start it with gamma-cli start-local and stop with gamma-cli stop-local. After restart, all the data will be lost.</p><p>Then you can deploy the contract similar to the command below:</p><p>gamma-cli deploy Counter.go -name counter -signer user1</p><h4>Our first real contract</h4><p>Now that we have covered the prerequisite knowledge, we can begin developing the contract for our chat application.</p><p>In the spirit of test-driven development, we will start with an end-to-end test that will help us flesh out our API in the process.</p><p>First, we should be able to add new messages to the chat and get a message ID in return:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*k4QsS-CgZ38kHGek.png" /></figure><p>This e2e test completes the first part of the flow — putting information into the system. A simple contract that could achieve that goal would be something like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*7Hpt6-ECCP1NEQC4.png" /></figure><p>Since our state is a key-value store, and we need to invent our own way to emulate a list of messages per channel. The easiest way to do that is to keep a counter of messages per channel and then simply increment it when we add a new key (`m_testChannel_1` will store content of the message, while `count_testChannel` will store the number of messages of `testChannel`).</p><p>After seeing that the e2e passes, we can modify the contract a little bit to store some more data, such as timestamp, sender, and block height.</p><p>Now we can focus on adding another crucial part of any chat app; retrieving the list of messages. We will update our e2e a bit to flesh out the behavior we want: Add a single message, then ask for a list of messages with ids between 1 and 10.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GAE_v615NHxnPtVF.png" /></figure><p>Why do we even need JSON? Orbs platform doesn’t yet support more complex values like arrays or structures (great opportunity for a pull request btw 😉)</p><p>JSON is a standard way of serialization and deserialization of data in JavaScript, and is supported by any major platform. We will use JSON and expect to get a response like this: [{ID: 1, Message: &quot;hello, world!&quot;}].</p><p>Inside the contract, we will define the new struct for serialization and the contract method to return the result of serialization as a string:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*dQABd8JhsM7H9BEc.png" /></figure><p>You can see the final version of the contract at the project <a href="https://github.com/orbs-network/conversation/blob/master/contract/contract.go">git repo</a>.</p><h3>Deploying contract to Orbs node</h3><p>The only thing is left — deploy it. Based on the configuration of gamma-cli environment, you can specify the targeted environment — local or mainnet. More about it <a href="https://orbs.gitbook.io/contract-sdk/gamma-in-depth/working-with-multiple-environments">here:</a></p><p>gamma-cli deploy contract.go -name Conversation</p><h3>Conclusion</h3><p>This is it! We’ve reached the end of Part I. Here we described how to create, test and deploy a smart contract on Orbs platform. On the next part (Part II) we will describe how to write a simple web client that is able to interact with our contract.</p><p>Feel free to dive into code of the app in the git repo or even play with the app itself.</p><p><em>Kirill is leading a cloud infrastructure effort at Orbs. He’s very passionate about his cats and the deepest lore of the Dark Souls series. </em><a href="https://github.com/netoneko"><em>Kirill’s Github</em></a><em>.</em></p><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/writing-an-app-on-orbs/"><em>https://www.orbs.com</em></a><em> on June 11, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6038ae3260a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/complete-guide-to-writing-an-application-on-the-orbs-network-part-i-of-ii-6038ae3260a">Complete Guide to Writing an Application on the Orbs Network (Part I of II)</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Blockchain Aid for the Refugee Crisis]]></title>
            <link>https://medium.com/orbs-network/blockchain-aid-for-the-refugee-crisis-c06a5bc562a6?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/c06a5bc562a6</guid>
            <category><![CDATA[refugees]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[human-rights]]></category>
            <category><![CDATA[government]]></category>
            <dc:creator><![CDATA[Netta Korin]]></dc:creator>
            <pubDate>Wed, 05 Jun 2019 13:34:15 GMT</pubDate>
            <atom:updated>2019-06-05T13:34:15.522Z</atom:updated>
            <content:encoded><![CDATA[<h4>Can blockchain technology help alleviate the strain of the global refugee crisis on both refugees and host countries? I think so.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7unN99OKALVod6aLOGzGLQ.jpeg" /></figure><p>At the Hexa Foundation, our focus is using blockchain for social impact. One example of this impact is using the technology to create a platform that will help countries and refugees alike. According to the UN Refugee Agency (UNHCR), by the end of 2017, there were 71.4m refugees worldwide, compared to 21.1m at the end of 2005. This crisis is a major concern for governments and NGOs alike, not only from a humanitarian perspective but also from economic and geopolitical perspectives. Recent refugee crises, such as the ones in Syria (6.3M), Afghanistan (2.6M), South Sudan (2.4M), Myanmar (1.2M), and Somalia (1.0M) have gained public attention calling governments to respond. The United States is facing unprecedented numbers of migrants from Central America. This past April close to 99,000 people crossed the southwest border of Texas. This has resulted in a crisis situation whereby the government is overwhelmed and unable to even process the number of migrants crossing at their point of entry.</p><h3>This global refugee crisis encapsulates the following key challenges:</h3><ul><li>Difficulties in tracking and sharing refugee migration data among governments and NGOs — an issue for example since governments and aid organizations do not always know which country the refugee has entered before arriving in their jurisdiction, or if/from whom they have received aid prior to entering the country</li><li>Lack of valid identity documents (IDs) of refugees — this leads to the inability to track aid funds, and also the inability to help refugees function within their society</li></ul><p>There are global initiatives led by the UN, such as Migration Data Portal and Global Compact for Migration (GCM), and the Internal Displacement Monitoring Center (IDMC). Both of these initiatives are collecting data in order to build a global database to help tackle the crisis. However, while the former is still in its very early stages, the latter focuses on internally displaced persons only, not on the broader definition of refugees (refugees, asylum-seekers, internally displaced persons, returnees, or stateless persons). Still, we believe that both platforms’ main hindrance is that they are both centralized systems. As such, aid organizations are not incentivized to share information. This results in a fragmented solution in which each organization only trusts itself, and the overall aid is far from optimal. What if a blockchain-based solution could tackle the challenges mentioned above and provide a transparent infrastructure that governments and NGOs alike could easily adopt and share? Imagine a biometric platform deployed as a permissioned/consortium blockchain, meaning that there are certain restrictions on joining as a node and accessing data, in order to tackle privacy concerns. The nodes may be national immigration services, border checkpoints or aid organizations. They will be the ones that carry out the enrollment and identification process, including writing new identities on the blockchain as a proof of registration and authentication. The nodes are also users on the blockchain, meaning that they interact with the refugee in the form of transactions. The proposed platform would entail the following steps for refugees declaring themselves at a border checkpoint:</p><ol><li><strong>Enrollment</strong> — regardless of whether the person obtains an official ID or not, she enrolls in the biometric identity platform, <em>i.e. </em>a new biometric ID is generated on the spot along with a cryptographic wallet. This wallet stores the new ID and all other relevant metadata, e.g. location, time, additional documents provided by the refugee, relatives, etc.</li><li><strong>Identification</strong> — once the biometric ID is available, the checkpoint tries to identify the individual, to verify whether there are no other matching IDs on the ledger</li><li><strong>Data transmission</strong> — the individual makes her first transaction on the blockchain, in which she sends all that info to the checkpoint. The data is encrypted so that only both sides can read it. All other nodes will only be able to verify that there has been a transaction between user X to node Y at time Z. They know where node Y is located, and they are able to extract from this transaction the cryptographic digest of the biometric identity. This allows them to look for a match when they generate a new biometric identity for a refugee</li></ol><p>Once all three steps are done, the refugee may be referred to the next steps of the “standard” procedure, according to the receiving state’s immigration policy. There are many benefits to this platform, stemming from core features of blockchain:</p><ul><li>Efficient end-to-end process</li><li>Refugees get a new immutable digital ID proving their existence and documenting their asylum request</li><li>Multi-purpose new ID with immediate use and additional uses down the road, e.g. cryptographic wallet</li><li>Secure platform providing refugees with the maximal level of privacy</li><li>Information is easily shared <strong><em>only </em></strong>among nodes on border checkpoints and humanitarian aid organizations. Therefore, in special situations, e.g. locating lost family members, the process is fast, simple and easy location of lost family members at the receiving state</li><li>Each checkpoint can easily track the number of refugees it has assisted. In that manner, national immigration services can easily aggregate accurate data from all checkpoints, in real-time</li><li>Receiving states and aid organizations can better track and monitor refugees influx and improve cooperation</li></ul><p>The most basic feature of this platform concerns the access level to individuals’ private data. Obviously, privacy is a difficult subject to navigate, however, It could be argued that it is only reasonable that once an individual arrives at a checkpoint asking for asylum, that checkpoint (and the immigration service that it represents) is entitled to maintain full access to her personal data. Furthermore, in order to provide the refugee the opportunity for a fresh start at the receiving state, it <em>has </em>to hold her biometric identifying data, as it does for its residents. Still, checkpoints from other countries are most definitely not entitled to access that data, for privacy considerations. They will only gain access to the “public” data, <em>i.e.</em> individuals’ arrival at different checkpoints (nodes) at certain times. Modern cryptography is fully capable of providing this kind of data access differentiation. This suggested platform will run over a permissioned blockchain, in which nodes must be approved prior to joining the network. Only government agencies or recognized aid organizations could become nodes, thus making sure that private information does not fall into the wrong hands. On the transaction level, the data is encrypted and can only be accessed using a private key, which is held by the individual only. This means that nodes have full info only on the transactions ( <em>i.e.</em> refugees) that they were part of. Consequently, each checkpoint does not know the identities of refugees who went through a neighboring checkpoint, <strong>they only know that they were there</strong>. This solution prevents data breaches, as even if someone manages to imposter as a legitimate node, all they get access to is a ledger of encrypted transactions. The data is encrypted by so many different entities, and each has access to only a small portion of it.</p><p>Of all the potential positives that blockchain can enable, improving the efficiency of government-related services is among the most prominent. A blockchain-based global database could be a forward thinking and innovative approach towards helping the global effort to manage the refugee crisis. It has great potential to aid multiple governments, while also making the day to day lives of documented and undocumented refugees logistically more comfortable. Furthermore, this platform can be a key strategic element to solving a global humanitarian problem and improving the lives of the weakest individuals in our society. It may not be perfect, but as they say: the enemy of the good is the perfect. At the Hexa Foundation, our aim is to use blockchain technology to create social impact.</p><p><strong>To learn more visit </strong><a href="https://www.hexa.org"><strong>www.hexa.org</strong></a></p><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/blockchain-aid-for-the-refugee-crisis/"><em>https://www.orbs.com</em></a><em> on June 4, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c06a5bc562a6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/blockchain-aid-for-the-refugee-crisis-c06a5bc562a6">Blockchain Aid for the Refugee Crisis</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Troubleshooting the Orbs Platform | Case Study — Orbs]]></title>
            <link>https://medium.com/orbs-network/troubleshooting-the-orbs-platform-case-study-orbs-73c905de1f00?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/73c905de1f00</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[development]]></category>
            <dc:creator><![CDATA[Ido Zilberberg]]></dc:creator>
            <pubDate>Tue, 04 Jun 2019 08:59:24 GMT</pubDate>
            <atom:updated>2019-06-05T08:21:14.061Z</atom:updated>
            <content:encoded><![CDATA[<h3>Troubleshooting the Orbs Platform | Case Study</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FCNymVnd2Sz-QxIA9rWjNw.jpeg" /></figure><h3>Case Study</h3><p><strong><em>Target audience:</em></strong> <em>Validator DevOps, Orbs contributors and anyone interested in log analysis of the Orbs platform</em></p><p>As new software meets the real world in production for the first time, unforeseen issues pop up. Anyone in the business long enough knows this for a fact.</p><p>Orbs platform is no different, and while considerable effort was, and still is being expended to retain the highest code quality, post-production incidents do happen, but they provide opportunities to make the software better yet.</p><p>Part of improving software and keep learning from experience is creating case studies such as this one.</p><p>This post includes technical notes to help you, the reader, make sense of the information you are seeing. It is not an exhaustive description of Lean Helix or any other service of the Orbs platform. For that, visit the <a href="https://github.com/orbs-network/orbs-spec">Orbs Spec</a>.</p><p>Such was the case that a few weeks post-launch, the Orbs core team observed less than optimal behavior of the Lean Helix consensus algorithm in production. The <a href="https://medium.com/orbs-network/monitoring-the-orbs-platform-orbs-a555109ce66e">dashboard</a> showed that frequently, a block passes consensus only on the third attempt, instead of the expected first or second attempt. This meant it took longer to reach consensus and consequently transaction requests took longer to return a result to the caller.</p><p><strong><em>Technical note:</em></strong> <em>Before going into more detail, let’s understand a bit how Lean Helix works (with </em><strong><em>gross oversimplification</em></strong><em>):</em></p><ul><li><em>Choose a </em><strong><em>Leader</em></strong><em> node at random</em></li><li><em>The leader collects pending transactions (i.e. transactions sent by clients and still waiting to be included in a block) into a “proposed block”</em></li><li><em>The leader suggests this block to the other non-leader nodes</em></li><li><em>The non-leader nodes try to reach an agreement (a.k.a consensus) by passing around messages of various types (more on that later) relating to the content of the proposed block. There is a time limit as to how long this can take to propose the block and reach an agreement. If the time limit is exceeded and consensus has still </em><strong><em>not</em></strong><em> been reached, a </em><strong><em>new leader</em></strong><em> is chosen among the non-leader nodes (the previous leader itself becomes a non-leader node) and the process </em><strong><em>repeats itself</em></strong><em>.</em></li></ul><p><strong><em>The above flow is called a View.</em></strong><em> The first iteration (view) is denoted V=0, the following iteration (with a new leader) is V=1 and so on. The time limit per View is exponentially increased for every View. For V=0 the leader has 4 seconds to reach consensus (production configuration as of May 2019) before it is replaced. For V=1 the next leader has 8 seconds, for V=2 the next leader has 16 seconds and so on. When consensus on a block is reached, every node commits the proposed (now accepted) block, the View is reset to V=0 and the process repeats itself.</em> <em>Read more about Lean Helix: </em><a href="https://www.orbs.com/orbs-unified-theory-of-randomness-explaining-the-helix-consensus-algorithm/"><em>Orbs’ Unified Theory of Randomness: Explaining the Helix Consensus Algorithm</em></a></p><p>Now, given the production configuration, it was expected that the first leader at V=0 will sometimes be able to reach consensus, but mostly the second leader at V=1 will do that (exactly why is out of scope). There was no apparent reason to reach the third leader at V=2 unless there was some considerable network lag.</p><p>Having said all that, here you can see the problem:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/387/1*vrMpnuihGMxBX8jVmwM3fg.png" /></figure><p>Instead of having all nodes report they are either on V=0 or V=1, the frequency of V=2 was quite high.</p><p>So, we started digging deeper.</p><p>It was clear that a specific node (let’s call it <strong>Node A</strong>, its actual identity is irrelevant to this case study) as exhibiting the majority of V=2 incidents.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/767/0*1qSpGIhLeokklawx.png" /></figure><p>At this point, the dashboard could not provide further clues. Suffice to say that one of the Orbs core team’s monitoring goals is to improve on what can be easily identified in the context of the dashboard and postpone the following costly log research to more complex issues.</p><p><strong>In this case, logs were the next step.</strong></p><p>From a troubleshooting perspective, we were fortunate to have frequent V=2 incidents so it was easy to obtain fresh logs around the timeframe of such incidents. It can be quite frustrating trying to debug a rare issue for which logs are not readily available.</p><p>The logs use the node’s Orbs address for filtering. In node A’s case, it is <strong>“0123456789abcdef”</strong>, sometimes contracted to <strong>“012345”</strong>.</p><p>Since we did see Node A’s block height advancing we knew it was up to date on the blocks.</p><p>Now, when a node does not commit a block through the consensus algorithm, it can still receive new blocks via <strong>Block Sync</strong>.</p><p><strong><em>Technical note:</em></strong> <em>Block Sync is a service within the node that wakes up after some predetermined time during which no new block was committed. The node assumes that it’s being left behind for whatever reason, so it requests newer blocks from other nodes in the network. This is useful in case the node was down for a while and now needs to sync to the rest of the network. It is also useful in this case, where blocks are not being committed as part of the consensus algorithm.</em> <em>Read more about Block Sync in Orbs Spec: </em><a href="https://github.com/orbs-network/orbs-spec/blob/master/behaviors/services/block-storage.md#inter-node-block-sync-flow"><em>Block Sync in Orbs Spec</em></a></p><p>We suspected that node A was advancing through Block Sync rather than through consensus.</p><p>So, the initial filter was to show blocks being committed as part of the consensus algorithm flow.</p><p>Analyzing logs is like looking at the data with various lenses, one at a time, each of which captures only a subset. For logs over some size, there is simply too much data for a human to grasp in one go.</p><p>Here is the first screenshot from<strong> logz.io</strong>. In it you can see positive filters (in blue), negative filters (in red) and a search string (logz.io uses the Lucene query format):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*4cSdPdUEaRrvZjjk.png" /></figure><p>The PHASE COMMITTED message means the block was committed as part of the consensus algorithm.</p><p><strong>We noticed the lack of node=”012345″</strong> (a shortened version of the node address) — it’s not there, nor before or after this time.</p><p>This made us assume that no blocks are committed as part of consensus at all, on node A. To make sure this assumption is correct, we made another search that confirmed that node A <strong>only</strong> receives blocks via Block Sync. It shows that every block of Node A was received via Block Sync, no exceptions. See the messages <strong>“successfully committed block received via sync”:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*4hqc3IDJ_X0gi2Y_.png" /></figure><p>As a sanity check, we checked which additional nodes receive this message (that is, don’t commit blocks through consensus algorithm). We found out that other nodes occasionally also receive blocks via Block Sync. It’s ok for this to happen from time to time, but node A showed this for 100% of the blocks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*EnEOu8N2ma0JZBwa.png" /></figure><p>At this point, we established that Node A fails to reach consensus 100% of the time, so it was time to dig into Lean Helix consensus algorithm’s logs to follow Node A’s flow through it and understand what goes wrong.</p><p>We now focus only on Lean Helix logs to narrow the investigation. All Lean Helix logs have a property called <em>lhlib</em> which is set to true, so it is easy to filter for only these messages by adding a condition that <em>lhlib</em> property exists — see below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/790/0*97moCpyvnFxKe6hJ.png" /></figure><p>Let’s focus on a specific block that Node A had to receive from Block Sync, but other nodes managed to commit with consensus: 454927. We obtained this block number from the screenshot with “successfully committed block via sync” messages above. Notice the search string “H=454927” in the screenshot below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*nnnaNRiZx35xG-sg.png" /></figure><p>We can see that consensus messages are being ignored (such as the outlined <em>COMMIT</em> message in the screenshot above) by Node A, because <em>“PREPREPARE is not stored”</em> (same as “not received at all” for our purposes). To understand what this log message means, here is another technical note:</p><p><em>When the leader node proposes a block to the other nodes, it does so by broadcasting a PREPREPARE message that contains the block, to the other nodes. Then the other nodes “debate” with one another whether they agree on the proposed block or not, by passing around more message types, such as PREPARE and COMMIT (no need to discuss those here).</em> <em>PREPREPARE is the initial message sent by the leader and contains the proposed block itself. If it was not received by some other node, that other node will refuse to receive any other subsequent consensus messages related to that block, because there is no point in participating in consensus if the node doesn’t have the proposed block, to begin with.</em></p><p>Next, it was time to understand <strong>why</strong> <em>PREPREPARE</em> was not received by Node A.</p><p><strong><em>Yet another technical note:</em></strong> <em>As we said, the leader of the first view (V=0) sends out a PREPREPARE message that contains the proposed block. Now, if the leader fails to reach a consensus within the time limit, it is replaced by another leader, now at V=1. Here is a twist: usually, that new leader of V=1 will utilize </em><strong><em>the same block</em></strong><em> proposed by the previous leader (cheaper than creating a new block itself). It will send the reused block to the other nodes within a NEW_VIEW message. That NEW_VIEW message contains within it the previous leader’s PREPREPARE message along with the reused block (essentially the new leader says: “Hey, the last leader’s proposed block was valid, we just didn’t manage to agree in time so let’s try again”)</em></p><p>Next, it was time to search for where Node A actually received a PREPREPARE (if it did at all) from the leader and find out what went wrong with it.<br> Turns out Node A did receive PREPREPARE from the leader.</p><p>Here it is, let’s break this screenshot down:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*LJH4flShGtELMilf.png" /></figure><p>At 16:05:23.988, a NEW_VIEW message is received by Node A from the leader of V=1 (sender=”ff33c7″). As explained in the last technical note, this is expected. The next thing that should happen is for Node A to <strong>unpack the internal PREPREPARE message</strong>, and from it, to <strong>unpack the block</strong> and <strong>validate</strong> it.</p><p>NEW_VIEW was unpacked and its contained PREPREPARE was also unpacked (it’s just not logged), <strong>however</strong> the attempt to validate the contained block <strong>fails, due to the block’s timestamp</strong>. This is weird! no other node failed to validate this block.</p><p>Let’s understand the outlined error message:</p><p><strong>currentTimestamp=159df14e0fab5b36</strong> translates to May 12 2019 13:06:03 (with the help of a hex → decimal calculator and <a href="https://currentmillis.com/">this site</a> that converts millis since Epoch to ISO8601 time string). <strong>prevTimestamp=159df14bde5aed90 </strong>translates to May 12 2019 13:05:54. So far so good — the current block’s timestamp is later than the previous block’s timestamp, which makes sense.</p><p>Next, we see: <strong>now 2019–05–12 13:05:23.989402103</strong>.</p><p>This does not make sense! how can “now” on the machine be <strong>earlier</strong> by 40 seconds than the current block’s time? later on that line, you can see the tolerance between “now” and the block’s timestamp is 30 seconds ( <strong>jitter 30s</strong>) and because the difference is larger (40s), validation fails, and all of the above results from it.</p><p><em>Note: This error message is admittedly confusing and has already been made human-readable as a result of this investigation.</em></p><p>At this point we were nearly convinced this is a machine clock error on Node A as this code works correctly on all other nodes.</p><p>After contacting node A’s IT, they indeed identified a 29 second time drift on the machine’s clock, and promptly fixed it.</p><p>A few minutes after they fixed the machine’s clock time, we took these screenshots:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/386/0*S1ujV2H09JiR0CBm.png" /></figure><p>The above screenshot shows the V=2 symptom is gone. To be on the safe side, the screenshot below shows node A managed to participate in consensus and commit a block, thus <strong>no longer relying on Block Sync</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*E4i-9vndTpZskBJB.png" /></figure><p>Some conclusions:</p><ol><li>Write case studies such as this one, for the benefit of the community so the Orbs core team thought processes can be shared and discussed.</li><li>Improve dashboard so problems can be understood from graphs and gauges, to postpone costly log analysis</li><li>Specifically to this case study — add graph and alert against node time drift.</li><li>Improve logs as an iterative process</li></ol><p>The purpose of this post was to shed some light on the troubleshooting Orbs platform issues along with technical notes on some internal workings.</p><p>Obviously having detailed knowledge of the system makes this process easier, but reading dashboard graphs and filtering through logs is a generally useful skill that can be applied to any monitored system.</p><p>Thanks to <a href="https://medium.com/u/85551232663">Ron Bresler</a> for helping out in proofing this post!</p><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/troubleshooting-the-orbs-platform-case-study/"><em>https://www.orbs.com</em></a><em> on June 3, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=73c905de1f00" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/troubleshooting-the-orbs-platform-case-study-orbs-73c905de1f00">Troubleshooting the Orbs Platform | Case Study — Orbs</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Insights into Orbs’ R&D Hackathon]]></title>
            <link>https://medium.com/orbs-network/insights-into-orbs-r-d-hackathon-e60f8f5072a5?source=rss----9871d64a9ea6---4</link>
            <guid isPermaLink="false">https://medium.com/p/e60f8f5072a5</guid>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[hackathons]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Sergey Bolshchikov]]></dc:creator>
            <pubDate>Thu, 30 May 2019 11:33:21 GMT</pubDate>
            <atom:updated>2019-05-30T11:33:21.551Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1QValOKKx7YFXjH1YmA-0A.jpeg" /></figure><p>Last week in the Tel Aviv offices, Orbs’ core team conducted its very first Hackathon! Within just two days of brainstorming, coding and eating junk, the teams developed the very first real-use apps on the Orbs network.</p><p>Aside from the obvious value derived from the new apps themselves, the goal of the hackathon was to put the network to real-world usage tests. What’s a better way to know how to improve the network than to use it ourselves? After all, if it’s not good enough for the core team, it’s not good enough for the general community of developers.</p><p>First, Orbs engineers met up to brainstorm logistics and use-cases they wanted to explore. After the session which resulted in 16 well-rounded ideas), and a celebratory breakfast, they split up into teams and got to work on a full belly. After 48 hours, the developers were asked to stop coding and gather in a showroom to present their projects to a panel of judges.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XWeeFY_bYmyMlU9g.jpg" /></figure><p>The presentations were fun and educational, but more importantly, they demonstrated just how much can be accomplished in a mere 2 days even in separate teams. It’s become clear that with more time, and increased collaboration, the potential for Orbs Network is amazing.</p><p>Here are the judges’ favorite 4 apps developed and presented during the Hackathon:</p><h3>Digital ID</h3><p><a href="https://github.com/IdoZilberberg/digital-identity">View source</a></p><p>The goal of this team was to prove specific properties about identity (e.g. being a senior citizen, having a driver’s license, having a college degree) without having to present an ID card/driver’s license, which discloses the full ID.</p><p>An Issuer (such as Ministry of Internal Affairs) performs KYC on the user and signs the ID which contains all properties.</p><p>This signature is publicly verifiable. Zero-knowledge proofs are the mechanism that allows verification of specific property without revealing any other properties.</p><p>Every verification of this property Blockchain allows for a trusted third party arbitration, thus guaranteeing fairness.</p><p>How is this use-case applicable to the real world? Take as an example: The situation where this product can allow senior citizens to purchase discounted public transport tickets without having to disclose their identity, only the property of “senior citizen”.</p><h3>Anti-Scalping Ticketing System</h3><p><a href="https://github.com/orbs-network/tickets">View source</a></p><p>A scalping resistant ticketing system for large scale sporting events and music concerts. The system balances conflicting needs:</p><ul><li>Privacy</li><li>Free transfer of purchased tickets</li><li>Scalping resistance</li></ul><p>Competing event organizers and venues trust-less sharing of ticket purchase history to intelligently detect scalping attempts before tickets are sold. Optional ID sampling at the gate provides a second control against illicit tickets trade. Ticket transferring mechanism requires high trust between transferring parties to discourage trade.</p><h3>Voting App</h3><p><a href="https://github.com/gilamran/voting-app">View source</a></p><p>Current voting systems are not reliable, and vote tampering is, unfortunately, a lingering concern.</p><p>Decentralized voting allows an authority to ask a group of chosen voters a question on any subject and prove that the votes are counted properly.</p><p>The potential usage are endless. The simple example from the open source world can be a vote whether a certain feature should be merged into the project. If the proposal collects the minimum required of votes, then the code is merged.</p><h3>Online IDE</h3><p><a href="https://github.com/orbs-network/sandkasten">View source</a></p><p>Orbs platform allows writing smart contracts in Go language. The development experience is bearable but it could be improved. The team decided to tackle the task by creating an online IDE where any developer can write code and execute it remotely right from the browser. This ability allows to provide valuable insights about the contract such its current state, visible event logs, and execute its methods:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vTSH_P2GMgmLs9No.png" /></figure><h3><strong>Retrospection</strong></h3><p>The most important part of the hackathon was the presentation and conclusions stage; an hour of debriefing giving contributors the opportunity to talk about their development pain-points and the potential improvements that they would like added to the platform. It turned out to be quite a long list, one that would have taken a long time to curate if not for this group exercise (see image).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kXelaBkkeOQPUqWq.jpg" /></figure><p>Some of the major improvement suggestions became obvious, such as scaffolding for a smart contract project, richer support of data structures in smart contracts, improved debugging capabilities, monitoring, and more.</p><p>HUGE thanks to all who posted their ideas to the <a href="https://community.orbs.network/">Orbs Community board</a> in the days leading up to the special day! We are looking forward in anticipation to the next Orbs hackathon, and hope to involve the global developing community to partake in this fun, productive event :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qadPlgHb7bG8mRmtKNjalA.jpeg" /><figcaption>My team aka ‘Best Team’</figcaption></figure><h4>Get involved with Orbs</h4><ul><li>Visit the <a href="https://www.orbs.com">website</a> to learn more about the Orbs public blockchain</li><li>Orbs is open-source! Review the <a href="https://github.com/orbs-network">code on Github</a> and contribute</li><li>Start developing apps on Orbs, review the <a href="https://orbs.gitbook.io/">documentation</a></li></ul><p><em>Originally published at </em><a href="https://www.orbs.com/insights-into-orbs-rd-hackathon/"><em>https://www.orbs.com</em></a><em> on May 30, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e60f8f5072a5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/orbs-network/insights-into-orbs-r-d-hackathon-e60f8f5072a5">Insights into Orbs’ R&amp;D Hackathon</a> was originally published in <a href="https://medium.com/orbs-network">The Orbs Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>