Site updated: 2020-06-18 12:41:30
This commit is contained in:
parent
62d7923f13
commit
29bc873545
|
@ -154,8 +154,8 @@ svg4everybody();
|
|||
<meta property="og:site_name" content="Embark Blog">
|
||||
<meta property="og:description" content="Join us at gitter.im/embark-framework/Lobby">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-06-15T08:04:44.417Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.417Z">
|
||||
<meta property="article:published_time" content="2020-06-18T10:29:20.103Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:29:20.103Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -154,8 +154,8 @@ svg4everybody();
|
|||
<meta property="og:site_name" content="Embark Blog">
|
||||
<meta property="og:description" content="Embark is a simple & powerful framework for decentralized applications">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-06-15T08:04:44.417Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.417Z">
|
||||
<meta property="article:published_time" content="2020-06-18T10:29:20.103Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:29:20.103Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -154,8 +154,8 @@ svg4everybody();
|
|||
<meta property="og:site_name" content="Embark Blog">
|
||||
<meta property="og:description" content="Embark is a simple & powerful framework for decentralized applications">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-06-15T08:04:44.418Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.418Z">
|
||||
<meta property="article:published_time" content="2020-06-18T10:30:41.346Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:41.346Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="To Update to 2.5.0Embark’s npm package has changed from embark-framework to embark, this sometimes can create conflicts. To update, first uninstall embark-framework 1 to avoid any conflicts with npm u">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2017-06-27T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.199Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:29:19.853Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -158,7 +158,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://dappsforbeginners.files.wordpress.com/2015/02/ethereum-logo.jpg?w=200">
|
||||
<meta property="og:image" content="http://i.imgur.com/L1r6Ac5.png">
|
||||
<meta property="article:published_time" content="2017-10-24T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.199Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:29:19.853Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="http://icons.iconarchive.com/icons/elegantthemes/beautiful-flat/128/plugin-icon.png">
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Embark is now part of Status and we are happy to announce Embark 3.0 by Status! New website and DocumentationEmbark has a new website and up to date documentation which can be found at https://framewo">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2018-05-03T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.199Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:41.345Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="More info can be found in the medium post">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2018-06-19T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:29:19.853Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -163,7 +163,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/token_factory_1/page_4.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/token_factory_1/page_5.png">
|
||||
<meta property="article:published_time" content="2018-09-26T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:36.148Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/token_factory_1/dashboard.png">
|
||||
|
@ -258,16 +258,16 @@ svg4everybody();
|
|||
<p>In this tutorial series we’ll create a Token Factory using Ethereum. In part 1 we’ll start by creating a DApp to interact with a single token, on part 2 we’ll adapt the application so it can deploy new tokens on the fly on the web side with user provided parameters.</p>
|
||||
<p>A Token is typically a unit used to represent a medium of exchange for some service or utility. They can represent a concert ticket, a membership, voting share, reputation points, etc…</p>
|
||||
<h2 id="Getting-Started"><a href="#Getting-Started" class="headerlink" title="Getting Started"></a>Getting Started</h2><p>First of all, make sure you have <a href="https://geth.ethereum.org/">Go-Ethereum</a> and Embark installed.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae62c430-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae62c430-b0bc-11ea-8e3d-a97ff14ee75d">$ npm -g install embark</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-85826730-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-85826730-b14f-11ea-a8c4-37fcefc7035f">$ npm -g install embark</code></pre>
|
||||
|
||||
|
||||
<p>Now, let’s create a new dapp</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae67cd41-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae67cd41-b0bc-11ea-8e3d-a97ff14ee75d">$ embark new TokenFactory</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-85880c80-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-85880c80-b14f-11ea-a8c4-37fcefc7035f">$ embark new TokenFactory</code></pre>
|
||||
|
||||
|
||||
|
||||
<p>This will create a directory called TokenFactory, cd to it and run:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6b0191-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6b0191-b0bc-11ea-8e3d-a97ff14ee75d">$ embark run</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858a2f60-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858a2f60-b14f-11ea-a8c4-37fcefc7035f">$ embark run</code></pre>
|
||||
|
||||
|
||||
<p>In another console, in the same directory, run:</p>
|
||||
|
@ -285,7 +285,7 @@ svg4everybody();
|
|||
<p>Now open your browser at <a href="http://localhost:8000">http://localhost:8000</a> , start your favourite editor and let’s get started!</p>
|
||||
<h2 id="Adding-the-Token-Contract"><a href="#Adding-the-Token-Contract" class="headerlink" title="Adding the Token Contract"></a>Adding the Token Contract</h2><p>We’ll add a typical ERC20 token contract to contracts/token.sol</p>
|
||||
<p><em>warning: this contract is for educational purposes only, do not use it in production unless you know what you are doing</em></p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6bc4e1-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6bc4e1-b0bc-11ea-8e3d-a97ff14ee75d">pragma solidity ^0.4.23;
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858aa491-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858aa491-b14f-11ea-a8c4-37fcefc7035f">pragma solidity ^0.4.23;
|
||||
|
||||
contract Token {
|
||||
|
||||
|
@ -351,7 +351,7 @@ contract Token {
|
|||
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">constructor(uint initial_balance) public {</span><br><span class="line"> _balances[msg.sender] = initial_balance;</span><br><span class="line"> _supply = initial_balance;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>Let’s rectify this by specifying the <em>initial_balance</em> value in <code>config/contracts.js</code></p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6c8831-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6c8831-b0bc-11ea-8e3d-a97ff14ee75d">module.exports = {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858acba0-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858acba0-b14f-11ea-a8c4-37fcefc7035f">module.exports = {
|
||||
default: {
|
||||
// .....
|
||||
gas: "auto",
|
||||
|
@ -370,13 +370,13 @@ contract Token {
|
|||
|
||||
<p>Embark will detect the change and redeploy the contract with the new parameters.</p>
|
||||
<p>You can confirm that the token supply is 1000 by typing:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6cfd61-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6cfd61-b0bc-11ea-8e3d-a97ff14ee75d">$ Token.methods._supply().call(console.log)</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858acba3-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858acba3-b14f-11ea-a8c4-37fcefc7035f">$ Token.methods._supply().call(console.log)</code></pre>
|
||||
|
||||
|
||||
<p><img src="/assets/images/token_factory_1/console_2.png" alt="Console"></p>
|
||||
<h2 id="Creating-the-UI"><a href="#Creating-the-UI" class="headerlink" title="Creating the UI"></a>Creating the UI</h2><p>For the sake of brevity, we wouldn’t implement every single functionality in the contract. However, we’ll implement two important features: Checking balance of an address and Transferring Tokens from one address to another.</p>
|
||||
<h2 id="Checking-address-balance"><a href="#Checking-address-balance" class="headerlink" title="Checking address balance"></a>Checking address balance</h2><p>To input the address to query, we’ll edit <em>app/index.html</em> and add a simple form.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d2470-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d2470-b0bc-11ea-8e3d-a97ff14ee75d"><html>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858af2b1-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858af2b1-b14f-11ea-a8c4-37fcefc7035f"><html>
|
||||
<head>
|
||||
<title>Embark</title>
|
||||
<link rel="stylesheet" href="css/app.css">
|
||||
|
@ -395,16 +395,16 @@ contract Token {
|
|||
|
||||
<p><strong>Adding jQuery</strong></p>
|
||||
<p>To simplify the code a bit in this tutorial, we’ll add the jQuery library to our DApp.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d2472-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d2472-b0bc-11ea-8e3d-a97ff14ee75d">$ npm install jquery@3 --save</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858af2b3-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858af2b3-b14f-11ea-a8c4-37fcefc7035f">$ npm install jquery@3 --save</code></pre>
|
||||
|
||||
|
||||
<p>Now edit the file <em>app/js/index.js</em> and add:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d4b80-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d4b80-b0bc-11ea-8e3d-a97ff14ee75d">import $ from 'jquery';</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b19c0-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b19c0-b14f-11ea-a8c4-37fcefc7035f">import $ from 'jquery';</code></pre>
|
||||
|
||||
|
||||
<p><strong>Setting the default address</strong></p>
|
||||
<p>Let’s add to the input field field our own address as the default text so we can easily query our own balance. In the file <em>app/js/index.js</em> add:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d4b82-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d4b82-b0bc-11ea-8e3d-a97ff14ee75d">import $ from 'jquery';
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b19c2-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b19c2-b14f-11ea-a8c4-37fcefc7035f">import $ from 'jquery';
|
||||
import EmbarkJS from 'Embark/EmbarkJS';
|
||||
|
||||
$(document).ready(function() {
|
||||
|
@ -428,14 +428,14 @@ $(document).ready(function() {
|
|||
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">function balanceOf( address who ) constant returns (uint value) {</span><br><span class="line"> return _balances[who];</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>This method will be available in the JS code automatically as a promise, like:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d7291-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d7291-b0bc-11ea-8e3d-a97ff14ee75d">import Token from 'Embark/contracts/Token';
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b19c4-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b19c4-b14f-11ea-a8c4-37fcefc7035f">import Token from 'Embark/contracts/Token';
|
||||
|
||||
Token.methods.balanceOf(address).call().then(function(balance) { });</code></pre>
|
||||
|
||||
|
||||
|
||||
<p>So we can simply add a click event to the button, get the address, query the balance and set the result.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d7292-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d7292-b0bc-11ea-8e3d-a97ff14ee75d">import $ from 'jquery';
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b40d0-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b40d0-b14f-11ea-a8c4-37fcefc7035f">import $ from 'jquery';
|
||||
import EmbarkJS from 'Embark/EmbarkJS';
|
||||
import Token from 'Embark/contracts/Token';
|
||||
|
||||
|
@ -466,7 +466,7 @@ $(document).ready(function() {
|
|||
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">function transfer( address to, uint value) returns (bool ok)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>The method will take two parameters, an address and a value. Like in the previous step, let’s first add a simple form to the html page at <em>app/index.html</em>:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d99a0-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d99a0-b0bc-11ea-8e3d-a97ff14ee75d"><html>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b40d1-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b40d1-b14f-11ea-a8c4-37fcefc7035f"><html>
|
||||
<head>
|
||||
<title>Embark</title>
|
||||
<link rel="stylesheet" href="css/app.css">
|
||||
|
@ -494,7 +494,7 @@ $(document).ready(function() {
|
|||
|
||||
|
||||
<p>Then we will add the code to take the address and number of tokens from the inputs and call the contracts transfer method to <em>app/js/index.js</em>:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d99a1-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d99a1-b0bc-11ea-8e3d-a97ff14ee75d">import $ from 'jquery';
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b40d2-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b40d2-b14f-11ea-a8c4-37fcefc7035f">import $ from 'jquery';
|
||||
import EmbarkJS from 'Embark/EmbarkJS';
|
||||
import Token from 'Embark/contracts/Token';
|
||||
|
||||
|
|
|
@ -164,7 +164,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/token_factory_2/page_7.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/token_factory_2/console_2.png">
|
||||
<meta property="article:published_time" content="2018-10-26T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:36.148Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/token_factory_2/console_1.png">
|
||||
|
@ -260,13 +260,13 @@ svg4everybody();
|
|||
<p>A Token is typically a unit used to represent a medium of exchange for some service or utility. They can represent a concert ticket, a membership, voting share, reputation points, etc…</p>
|
||||
<h2 id="Getting-Started"><a href="#Getting-Started" class="headerlink" title="Getting Started"></a>Getting Started</h2><p>For the second part of the tutorial, Embark 3.0 or higher is required.</p>
|
||||
<p>If you are using an older version you can update with:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6200e0-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6200e0-b0bc-11ea-8e3d-a97ff14ee75d">$ npm install -g embark@3</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-8582dc60-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-8582dc60-b14f-11ea-a8c4-37fcefc7035f">$ npm install -g embark@3</code></pre>
|
||||
|
||||
|
||||
<p>Afterwards make sure that <code>embark version</code> returns 3.0 then restart embark with <code>embark run</code></p>
|
||||
<h2 id="Generalizing-Token-Interaction"><a href="#Generalizing-Token-Interaction" class="headerlink" title="Generalizing Token Interaction"></a>Generalizing Token Interaction</h2><p>We’ll start by generalizing the previous UI so we can input the address of a ERC20 Token and interact with it.</p>
|
||||
<p>First, we’ll add a simple form to <em>app/index.html</em> to get address of the token we wish to interact with.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae67cd40-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae67cd40-b0bc-11ea-8e3d-a97ff14ee75d"><html>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-85880c81-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-85880c81-b14f-11ea-a8c4-37fcefc7035f"><html>
|
||||
<head>
|
||||
<title>Embark</title>
|
||||
<link rel="stylesheet" href="css/app.css">
|
||||
|
@ -301,7 +301,7 @@ svg4everybody();
|
|||
|
||||
|
||||
<p>In <em>app/js/index.js</em> we’ll get the address given in the input, initialize a new contract object for that address and the Token ABI, and then assign it to a variable. We’ll also update the rest of code to use <em>currentToken</em> instead of <em>Token</em>. This way the existing code will work with the token we will be loading.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6b0190-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6b0190-b0bc-11ea-8e3d-a97ff14ee75d">import EmbarkJS from 'Embark/EmbarkJS';
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858a2f61-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858a2f61-b14f-11ea-a8c4-37fcefc7035f">import EmbarkJS from 'Embark/EmbarkJS';
|
||||
import $ from 'jquery';
|
||||
import Token from 'Embark/contracts/Token';
|
||||
|
||||
|
@ -354,7 +354,7 @@ $(document).ready(function() {
|
|||
<p>It’s <em>980</em> as expected (<em>1000</em> was the initial supply as configured in <em>config/contracts.json</em> and <em>20</em> was transferred out in <a href="/news/2018/09/27/how-to-create-a-token-factory-with-embark-part-1/">part 1</a></p>
|
||||
<h2 id="Deploy-New-Tokens-on-the-fly"><a href="#Deploy-New-Tokens-on-the-fly" class="headerlink" title="Deploy New Tokens on the fly"></a>Deploy New Tokens on the fly</h2><p>Now that we have an UI to interact with an existing Token given its address, we’ll add functionality to deploy tokens on the fly, each with their own initial supply.</p>
|
||||
<p>First we’ll add a simple form to <em>app/index.html</em> to get the desired supply of the new token to deploy.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6bc4e0-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6bc4e0-b0bc-11ea-8e3d-a97ff14ee75d"><html>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858aa492-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858aa492-b14f-11ea-a8c4-37fcefc7035f"><html>
|
||||
<head>
|
||||
<title>Embark</title>
|
||||
<link rel="stylesheet" href="css/app.css">
|
||||
|
@ -397,7 +397,7 @@ $(document).ready(function() {
|
|||
|
||||
<p>Embark makes the contract objects available in the js side, each contract object will have a method called <em>deploy</em> that can deploy new instances of the contract. This method can take parameters for the contract, and it will return a promise containing a contract object of the deployed contract.</p>
|
||||
<p>In <em>app/js/index.js</em> we’ll add the code to deploy new tokens client side using this functionality:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6c8830-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6c8830-b0bc-11ea-8e3d-a97ff14ee75d">$(document).ready(function() {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858acba1-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858acba1-b14f-11ea-a8c4-37fcefc7035f">$(document).ready(function() {
|
||||
|
||||
var currentToken;
|
||||
$("#deployToken button").click(function() {
|
||||
|
@ -451,7 +451,7 @@ $(document).ready(function() {
|
|||
<p><img src="/assets/images/token_factory_2/page_7.png" alt="Screenshot"></p>
|
||||
<p>And it’s <em>500</em> as expected since that’s the initial supply defined for the first token deployed.</p>
|
||||
<h2 id="Disabling-the-Token-Deploy-from-Embarks-side"><a href="#Disabling-the-Token-Deploy-from-Embarks-side" class="headerlink" title="Disabling the Token Deploy from Embarks side"></a>Disabling the Token Deploy from Embarks side</h2><p>Now that your DApp can deploy Tokens on the fly, It’s unnecessary for Embark to deploy the Token contract like it did in <a href="/news/2018/09/27/how-to-create-a-token-factory-with-embark-part-1/">part 1</a>, however you still need Embark to make the Token contract available on the client side. To achieve this, go to config/contracts.js and set “deploy”: false for that contract</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6cfd60-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6cfd60-b0bc-11ea-8e3d-a97ff14ee75d">module.exports = {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858acba4-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858acba4-b14f-11ea-a8c4-37fcefc7035f">module.exports = {
|
||||
"default": {
|
||||
// .....
|
||||
"gas": "auto",
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Building decentralized applications often involves many parts and components, such as Smart Contracts and a front-end, that have to play well together, in order to provide users the best experience po">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2019-01-22T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:29:19.853Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Part of developing a decentralized application is to also testing it thoroughly. Writing and executing tests locally is already much better than not doing anything on that regard, however, we can take">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2019-01-27T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:29:19.853Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="In this tutorial we want to get very practical and build a decentralized Reddit application from scratch using Embark. The goal is to get a better idea of not only what parts and components are involv">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2019-02-03T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:35.251Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
@ -271,7 +271,7 @@ svg4everybody();
|
|||
<p>If there are any issues in the “Available Services” section of the dashboard, go back to our <a href="/docs/installation.html">installation guide</a> and make sure all tools are available on your machine.</p>
|
||||
<h2 id="Creating-the-Smart-Contract"><a href="#Creating-the-Smart-Contract" class="headerlink" title="Creating the Smart Contract"></a>Creating the Smart Contract</h2><p>Alright, next up we want to create the brain of our application, which is a Smart Contract written in <a href="https://solidity.readthedocs.io/en/v0.5.3/">Solidity</a>, that enables creating posts and votes. We’re going to build it up step by step and afterwards we’ll add some tests to ensure our code is actually working.</p>
|
||||
<p>First thing we do is creating a file <code>DReddit.sol</code> inside <code>contracts</code> with a Smart Contract like this:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae631250-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae631250-b0bc-11ea-8e3d-a97ff14ee75d">pragma solidity ^0.5.0;
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858378a0-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858378a0-b14f-11ea-a8c4-37fcefc7035f">pragma solidity ^0.5.0;
|
||||
|
||||
contract DReddit {
|
||||
|
||||
|
@ -279,7 +279,7 @@ contract DReddit {
|
|||
|
||||
|
||||
<p>Great! With that in place, let’s introduce a couple of data structures for creating and storing topic posts. Let’s say a post will have a creation date, a description and an address of the owner. There’s a few more things we’ll have to add, but let’s do it one step at a time. Here’s what a <code>Post</code> struct could look like:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae67cd42-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae67cd42-b0bc-11ea-8e3d-a97ff14ee75d">struct Post {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-85880c82-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-85880c82-b14f-11ea-a8c4-37fcefc7035f">struct Post {
|
||||
uint creationDate;
|
||||
bytes description;
|
||||
address owner;
|
||||
|
@ -287,11 +287,11 @@ contract DReddit {
|
|||
|
||||
|
||||
<p>We’re also going to add an array to store all of our posts. Now that we have a <code>Post</code> struct, this is a simple as:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6b0192-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6b0192-b0bc-11ea-8e3d-a97ff14ee75d">Post [] public posts;</code></pre>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858a2f62-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858a2f62-b14f-11ea-a8c4-37fcefc7035f">Post [] public posts;</code></pre>
|
||||
|
||||
|
||||
<h3 id="Creating-posts"><a href="#Creating-posts" class="headerlink" title="Creating posts"></a>Creating posts</h3><p>It’s time to add our first method which will enable users to add new posts to the platform. For that, we’ll create the method <code>createPost(bytes _description)</code> where <code>_description</code> are the bytes that represent the posts text.</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6b76c0-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6b76c0-b0bc-11ea-8e3d-a97ff14ee75d">function createPost(bytes _description) public {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858aa490-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858aa490-b14f-11ea-a8c4-37fcefc7035f">function createPost(bytes _description) public {
|
||||
uint postId = posts.length++;
|
||||
posts[postId] = Post({
|
||||
creationDate: block.timestamp,
|
||||
|
@ -303,7 +303,7 @@ contract DReddit {
|
|||
|
||||
<p>The first thing we do is creating an id for the post to be stored. We then use our <code>Post</code> struct to create a new post instance. Notice that we leverage the <code>postId</code> when storing the Post in our <code>posts</code> array. To set the owner, we take advantage of Solidity’s global <code>msg</code> object which is available in every transaction.</p>
|
||||
<h3 id="Emitting-events"><a href="#Emitting-events" class="headerlink" title="Emitting events"></a>Emitting events</h3><p>As we’re planning to build a front-end that reacts to posts being created, we need to emit an event so the front-end can subscribe to it accordingly. For that, we first introduce a new event type <code>NewPost</code> which will look something like this:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6bc4e2-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6bc4e2-b0bc-11ea-8e3d-a97ff14ee75d">event NewPost(
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858aa493-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858aa493-b14f-11ea-a8c4-37fcefc7035f">event NewPost(
|
||||
uint indexed postId,
|
||||
address owner,
|
||||
bytes description
|
||||
|
@ -311,7 +311,7 @@ contract DReddit {
|
|||
|
||||
|
||||
<p>Once that is done, all we have to do is emit <code>NewPost</code> inside <code>createPost()</code> with the required data:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6c8832-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6c8832-b0bc-11ea-8e3d-a97ff14ee75d">function createPost(bytes _description) public {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858acba2-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858acba2-b14f-11ea-a8c4-37fcefc7035f">function createPost(bytes _description) public {
|
||||
...
|
||||
emit NewPost(postId, msg.sender, _description);
|
||||
}</code></pre>
|
||||
|
@ -325,7 +325,7 @@ contract DReddit {
|
|||
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">struct Post {</span><br><span class="line"> ...</span><br><span class="line"> uint upvotes;</span><br><span class="line"> uint downvotes;</span><br><span class="line"> mapping(address => Ballot) voters;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>Here’s the <code>NewPost</code> event which we’ll use in a few moments:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6cfd62-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6cfd62-b0bc-11ea-8e3d-a97ff14ee75d">event NewVote(
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858af2b0-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858af2b0-b14f-11ea-a8c4-37fcefc7035f">event NewVote(
|
||||
uint indexed postId,
|
||||
address owner,
|
||||
uint8 vote
|
||||
|
@ -337,7 +337,7 @@ contract DReddit {
|
|||
|
||||
<p>With these building blocks at hand, let’s implement a <code>vote(uint postId, uint8 _vote)</code> method. <code>_vote</code> is going to be one of our defined <code>Ballot</code> types and is represented as uint going from 0 - 2. We’ll use Solidity’s <code>require()</code> statement to ensure we only vote on posts that actually exist, as well as nobody can actually vote multiple times on the same post.</p>
|
||||
<p>We then increment the up or down vote counter respectively, store the voter and emit a <code>NewVote</code> event:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d2471-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d2471-b0bc-11ea-8e3d-a97ff14ee75d">function vote(uint _postId, uint8 _vote) public {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858af2b2-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858af2b2-b14f-11ea-a8c4-37fcefc7035f">function vote(uint _postId, uint8 _vote) public {
|
||||
Post storage post = posts[_postId];
|
||||
|
||||
require(post.creationDate != 0, "Post does not exist");
|
||||
|
@ -357,7 +357,7 @@ contract DReddit {
|
|||
|
||||
|
||||
<h3 id="Determine-if-users-can-vote"><a href="#Determine-if-users-can-vote" class="headerlink" title="Determine if users can vote"></a>Determine if users can vote</h3><p>We probably want to add an indication to the UI that a user has already voted on a certain post. For that it’d be handy to have an API that actually tells us whether a user can vote on a post. We’ve already discussed earlier that users can’t vote multiple times on the same post, so figuring out if a user can vote is pretty straight forward. Here’s what a <code>canVote(uint _postId)</code> method could look like:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d2473-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d2473-b0bc-11ea-8e3d-a97ff14ee75d">function canVote(uint _postId) public view returns (bool) {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858af2b4-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858af2b4-b14f-11ea-a8c4-37fcefc7035f">function canVote(uint _postId) public view returns (bool) {
|
||||
if (_postId > posts.length - 1) return false;
|
||||
Post storage post = posts[_postId];
|
||||
return (post.voters[msg.sender] == Ballot.NONE);
|
||||
|
@ -365,7 +365,7 @@ contract DReddit {
|
|||
|
||||
|
||||
<h3 id="Fetching-votes"><a href="#Fetching-votes" class="headerlink" title="Fetching votes"></a>Fetching votes</h3><p>We also need a way to actually let users check what they’ve voted for, in case they did. For that we’ll add a simple <code>getVote()</code> method that looks something like this:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d4b81-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d4b81-b0bc-11ea-8e3d-a97ff14ee75d">function getVote(uint _postId) public view returns (uint8) {
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b19c1-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b19c1-b14f-11ea-a8c4-37fcefc7035f">function getVote(uint _postId) public view returns (uint8) {
|
||||
Post storage post = posts[_postId];
|
||||
return uint8(post.voters[msg.sender]);
|
||||
}</code></pre>
|
||||
|
@ -373,7 +373,7 @@ contract DReddit {
|
|||
|
||||
<p>And with that, our Smart Contract is pretty much done! Just to make sure that everything is compiling smoothly, we can execute <code>embark build --contracts</code> in case there’s no existing Embark instance watching our work already.</p>
|
||||
<p>Here’s the complete Smart Contract code (you can also find it in <a href="https://github.com/embarklabs/dreddit-tutorial">this repository</a>:</p>
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-ae6d7290-b0bc-11ea-8e3d-a97ff14ee75d"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-ae6d7290-b0bc-11ea-8e3d-a97ff14ee75d">pragma solidity ^0.5.0;
|
||||
<pre class="highlight "><button class="c-button c-button--squared" data-clipboard-target="#code-858b19c3-b14f-11ea-a8c4-37fcefc7035f"><svg class="c-icon c-icon--xs"><use xlink:href="/assets/icons/symbols.svg#icon-copy-paste"></use></svg></button><code id="code-858b19c3-b14f-11ea-a8c4-37fcefc7035f">pragma solidity ^0.5.0;
|
||||
|
||||
contract DReddit {
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="In the first part of this tutorial we’ve implemented a DReddit Smart Contract that comes with methods to create and vote on topic posts. In this part we’ll continue right where we’ve left off and take">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2019-02-10T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:35.251Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Hopefully you’ve read the first and second part of this tutorial on building a decentralized Reddit application using Embark. If not, we highly recommend you doing so, because in this part, we’ll be f">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2019-02-17T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.200Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:35.251Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="The release of Embark 4.0 is close at hand and the release candidate, beta.1, will introduce some breaking changes. Let’s see what it takes to update an Embark 3.x Dapp to Embark 4. Use any frontend b">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2019-03-17T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:41.345Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -160,7 +160,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/cockpit_editor_release.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/website_release.png">
|
||||
<meta property="article:published_time" content="2019-03-18T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:35.251Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/EMBARK_HEADER_ALT_OPTIMIZED.jpg">
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="After four months of development we’re happy to tell you that we’ve released Embark 4.1 which comes with tons of bug fixes and a lot of new features. In this post we’ll take a closer look at some of t">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2019-07-22T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:41.345Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -156,7 +156,7 @@ svg4everybody();
|
|||
<meta property="og:locale" content="en_US">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/nim-crystal-header-img_NEW.jpg">
|
||||
<meta property="article:published_time" content="2019-11-17T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:37.817Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/nim-crystal-header-img_NEW.jpg">
|
||||
|
|
|
@ -160,7 +160,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/crystal-thread-test.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/nimble-creating-app.png">
|
||||
<meta property="article:published_time" content="2019-11-20T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:37.817Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/nim-crystal-header-img_NEW.jpg">
|
||||
|
|
|
@ -156,7 +156,7 @@ svg4everybody();
|
|||
<meta property="og:locale" content="en_US">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/nim-crystal-header-img_NEW.jpg">
|
||||
<meta property="article:published_time" content="2019-11-27T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:37.818Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/nim-crystal-header-img_NEW.jpg">
|
||||
|
|
|
@ -158,7 +158,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/web3-js-diagram.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/ganache-cli.png">
|
||||
<meta property="article:published_time" content="2019-12-08T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:33:51.644Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/web3-article-header.png">
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="The Embark Project is proud to be working with Gitcoin and the Ethereum Community Fund to grow the Ethereum ecosystem. This January we are sponsoring a #Takebacktheweb Hackathon with bounties and ques">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-01-08T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:35.252Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="If you’ve been following the development of Embark you’re probably aware that we regularly put out alpha and beta releases for upcoming major or feature versions of Embark. In the past ~6 months since">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-01-12T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.201Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:41.346Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Embark 5.1Interfaces & Libraries ConfigurationEmbark 5.1 adds two new configuration settings for Smart Contract configuration: interfaces - Any Smart Contract that represent an interface or is use">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-01-27T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:42.763Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Subspace 1.2New OrgSubspace is now under the @embarklabs Org. Versions under @status-im Org have been deprecated. # Using npmnpm install --save @embarklabs/subspace# Using yarnyarn add @embarklabs/sub">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-01-28T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:37.791Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -157,7 +157,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/web-security_banner.jpg">
|
||||
<meta property="og:image" content="https://cdn-media-1.freecodecamp.org/images/1*sd62aH6GGS1RoCR9t4QNyQ.png">
|
||||
<meta property="article:published_time" content="2020-01-29T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:34.485Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/web-security_banner.jpg">
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Subspace 1.3New to subspace? Check out the website at http://subspace.embarklabs.io/ New methods available to track blocks, gas price and blocktimetrackBlock()Returns the block information for any new">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-02-10T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:32:00.866Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Supporting Email Notifications in DAppsHaving notifications is important when the flow of your dapp is asynchronous, especially if funds are involved. As such, depending on having the user browse the">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-02-16T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:32:39.102Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -156,7 +156,7 @@ svg4everybody();
|
|||
<meta property="og:locale" content="en_US">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/embark_logo.png">
|
||||
<meta property="article:published_time" content="2020-02-18T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:35.186Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/embark_logo.png">
|
||||
|
|
|
@ -158,7 +158,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/wasm_explorer_online_app.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/wasm-evm-benchmarks.png">
|
||||
<meta property="article:published_time" content="2020-02-23T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:34.128Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/eWASM-header.png">
|
||||
|
|
|
@ -163,7 +163,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/ETH2_perception.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/Who_are_you_building_for.png">
|
||||
<meta property="article:published_time" content="2020-03-03T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:33.413Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/Header_Banner.png">
|
||||
|
|
|
@ -155,7 +155,7 @@ svg4everybody();
|
|||
<meta property="og:description" content="Subspace 2.0New to subspace? Check out the website at http://subspace.embarklabs.io/ Introducing Subspace React’s componentsA new set of components were created to simplify the usage of Subspace withi">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-03-17T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.202Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:40.667Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
|
@ -160,7 +160,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/vyper_SimpleStorage-set-value-to-999.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/vyper_SimpleStorage-set-result.png">
|
||||
<meta property="article:published_time" content="2020-03-23T23:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.203Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:41.816Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/vyper_simple_storage_with_logo.png">
|
||||
|
|
|
@ -162,7 +162,7 @@ svg4everybody();
|
|||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/mythx_dashboard_showing_submissions.png">
|
||||
<meta property="og:image" content="https://blog.embarklabs.io/assets/images/mythx_analysis-detail.png">
|
||||
<meta property="article:published_time" content="2020-04-01T22:00:00.000Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.203Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:35:45.392Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="https://blog.embarklabs.io/assets/images/mythx_dashboard.png">
|
||||
|
|
|
@ -154,8 +154,8 @@ svg4everybody();
|
|||
<meta property="og:site_name" content="Embark Blog">
|
||||
<meta property="og:description" content="Embark is a simple & powerful framework for decentralized applications">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta property="article:published_time" content="2020-06-15T08:04:44.418Z">
|
||||
<meta property="article:modified_time" content="2020-06-15T08:04:44.418Z">
|
||||
<meta property="article:published_time" content="2020-06-18T10:30:41.346Z">
|
||||
<meta property="article:modified_time" content="2020-06-18T10:30:41.346Z">
|
||||
<meta property="article:author" content="Embark">
|
||||
<meta name="twitter:card" content="summary">
|
||||
</head>
|
||||
|
|
318
sitemap.xml
318
sitemap.xml
|
@ -2,247 +2,247 @@
|
|||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/index.html</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/04/02/2020-smart-contract-security-analysis-with-mythx/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.418Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/index.html</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.418Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/community/index.html</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.417Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/chat/index.html</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.417Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:45.392Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/03/24/2020-using-vyper-with-embark/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.203Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/04/02/2020-smart-contract-security-analysis-with-mythx/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.203Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/17/decentralized-notifications/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:41.816Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/03/18/subspace-2.0/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/30/dapp-frontend-security/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/28/embark-5-1/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/19/embark-5-2-release/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/24/wasm-ewasm-what-and-why/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/11/subspace-1-3/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/29/subspace-1-2/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/03/04/2020-Blockchain-Developer-Survey/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.202Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/11/18/nim-vs-crystal-part-1-performance-interoperability/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/09/take-back-the-web-hackathon/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/03/18/upgrading-to-embark-4/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/03/19/introducing-embark-4/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/07/23/whats-new-in-embark-4.1/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/12/09/web3-what-are-your-options/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:40.667Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/11/28/nim-vs-crystal-part-3-cryto-dapps-p2p/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/13/announcing-embark-5/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:37.818Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/11/21/nim-vs-crystal-part-2-threading-tooling/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.201Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:37.817Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/01/28/running-embark-tests-on-a-continuous-integration-server/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2019/11/18/nim-vs-crystal-part-1-performance-interoperability/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:37.817Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/02/11/building-a-decentralized-reddit-with-embark-part-2/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/19/embark-5-2-release/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:35.186Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2018/06/20/embark-3-1-released/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/30/dapp-frontend-security/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:34.485Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2018/10/27/how-to-create-a-token-factory-with-embark-part-2/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/24/wasm-ewasm-what-and-why/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:34.128Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/01/23/building-smart-contract-only-dapps/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/03/04/2020-Blockchain-Developer-Survey/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:35:33.413Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2018/09/27/how-to-create-a-token-factory-with-embark-part-1/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2019/12/09/web3-what-are-your-options/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:33:51.644Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/02/18/building-a-decentralized-reddit-with-embark-part-3/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/17/decentralized-notifications/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:32:39.102Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/02/04/building-a-decentralized-reddit-with-embark-part-1/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/02/11/subspace-1-3/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.200Z</lastmod>
|
||||
<lastmod>2020-06-18T10:32:00.866Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2017/10/25/embark-2-6-released/</loc>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/28/embark-5-1/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.199Z</lastmod>
|
||||
<lastmod>2020-06-18T10:30:42.763Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/13/announcing-embark-5/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:41.346Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/index.html</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:41.346Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/index.html</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:41.346Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/03/18/upgrading-to-embark-4/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:41.345Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/07/23/whats-new-in-embark-4.1/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:41.345Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2018/05/04/embark-3-0-released/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.199Z</lastmod>
|
||||
<lastmod>2020-06-18T10:30:41.345Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/29/subspace-1-2/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:37.791Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2018/10/27/how-to-create-a-token-factory-with-embark-part-2/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:36.148Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2018/09/27/how-to-create-a-token-factory-with-embark-part-1/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:36.148Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2020/01/09/take-back-the-web-hackathon/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:35.252Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/02/04/building-a-decentralized-reddit-with-embark-part-1/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:35.251Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/02/18/building-a-decentralized-reddit-with-embark-part-3/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:35.251Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/03/19/introducing-embark-4/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:35.251Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/02/11/building-a-decentralized-reddit-with-embark-part-2/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:30:35.251Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/chat/index.html</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:29:20.103Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/community/index.html</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:29:20.103Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2018/06/20/embark-3-1-released/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:29:19.853Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/01/23/building-smart-contract-only-dapps/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:29:19.853Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2019/01/28/running-embark-tests-on-a-continuous-integration-server/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:29:19.853Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2017/10/25/embark-2-6-released/</loc>
|
||||
|
||||
<lastmod>2020-06-18T10:29:19.853Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://blog.embarklabs.io/news/2017/06/28/embark-2-5-released/</loc>
|
||||
|
||||
<lastmod>2020-06-15T08:04:44.199Z</lastmod>
|
||||
<lastmod>2020-06-18T10:29:19.853Z</lastmod>
|
||||
|
||||
</url>
|
||||
|
||||
|
|
Loading…
Reference in New Issue