{"id":195538,"date":"2017-05-30T14:06:15","date_gmt":"2017-05-30T18:06:15","guid":{"rendered":"http:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/create-a-cryptocurrency-contract-in-ethereum\/"},"modified":"2017-05-30T14:06:15","modified_gmt":"2017-05-30T18:06:15","slug":"create-a-cryptocurrency-contract-in-ethereum","status":"publish","type":"post","link":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/cryptocurrency-2\/create-a-cryptocurrency-contract-in-ethereum\/","title":{"rendered":"Create a cryptocurrency contract in Ethereum"},"content":{"rendered":"<p><p>The Coin    <\/p>\n<p>    We are going to create a digital token. Tokens in the ethereum    ecosystem can represent any fungible tradable good: coins,    loyalty points, gold certificates, IOUs, in game items, etc.    Since all tokens implement some basic features in a standard    way, this also means that your token will be instantly    compatible with the ethereum wallet and any other client or    contract that uses the same standards.  <\/p>\n<p>    If you just want to copy paste the code, then use this:  <\/p>\n<p>    The token contract is quite complex. But in essence a very    basic token boils down to this:  <\/p>\n<\/p>\n<p>    So let's start with the basics. Open the    Wallet app, go to the Contracts tab    and then Deploy New Contract. On the Solidity    Contract Source code text field, type the code below:  <\/p>\n<p>    A mapping means an associative array, where you associate    addresses with balances. The addresses are in the basic    hexadecimal ethereum format, while the balances are integers,    ranging from 0 to 115 quattuorvigintillion. If you don't know    how much a quattuorvigintillion is, it's many vigintillions    more than anything you are planning to use your tokens for. The    public keyword, means that this variable will be    accessible by anyone on the blockchain, meaning all balances    are public (as they need to be, in order for clients to display    them).  <\/p>\n<\/p>\n<p>    If you published your contract right away, it would work but    wouldn't be very useful: it would be a contract that could    query the balance of your coin for any addressbut since you    never created a single coin, every one of them would return 0.    So we are going to create a few tokens on startup. Add this    code before the last closing bracket, just under the    mapping.. line.  <\/p>\n<p>    Notice that the function MyToken has the same name as    the contract MyToken. This is very important and if    you rename one, you have to rename the other too: this is a    special, startup function that runs only once and once only    when the contract is first uploaded to the network. This    function will set the balance of msg.sender, the user    which deployed the contract, with a balance of 21 million.  <\/p>\n<p>    The choice of 21 million was rather arbitrary, and you can    change it to anything you want in the code, but there's a    better way: instead, supply it as a parameter for the function,    like this:  <\/p>\n<p>    Take a look at the right column besides the contract and you'll    see a drop down, written pick a contract. Select the    \"MyToken\" contract and you'll see that now it shows a section    called Constructor parameters. These are changeable    parameters for your token, so you can reuse the same code and    only change these variables in the future.  <\/p>\n<\/p>\n<p>    Right now you have a functional contract that created balances    of tokens but since there isn't any function to move it, all it    does is stay on the same account. So we are going to implement    that now. Write the following code before the last    bracket.  <\/p>\n<p>    This is a very straightforward function: it has a recipient and    a value as the parameter and whenever someone calls it, it will    subtract the _value from their balance and add it to    the _to balance. Right away there's an obvious    problem: what happens if the person wants to send more than it    owns? Since we don't want to handle debt in this particular    contract, we are simply going to make a quick check and if the    sender doesn't have enough funds the contract execution will    simply stop. It's also to check for overflows, to avoid having    a number so big that it becomes zero again.  <\/p>\n<p>    To stop a contract execution mid execution you can either    return or throw The former    will cost less gas but it can be more headache as any changes    you did to the contract so far will be kept. In the other hand,    'throw' will cancel all contract execution, revert any changes    that transaction could have made and the sender will lose all    ether he sent for gas. But since the Wallet can detect that a    contract will throw, it always shows an alert, therefore    preventing any ether to be spent at all.  <\/p>\n<p>    Now all that is missing is having some basic information about    the contract. In the near future this can be handled by a token    registry, but for now we'll add them directly to the contract:  <\/p>\n<p>    And now we update the constructor function to    allow all those variables to be set up at the start:  <\/p>\n<p>    Finally we now need something called Events.    These are special, empty functions that you call to help    clients like the Ethereum Wallet keep track of activities    happening in the contract. Events should start with a capital    letter. Add this line at the beginning of the contract to    declare the event:  <\/p>\n<p>    And then you just need to add these two lines inside the    \"transfer\" function:  <\/p>\n<p>    And now your token is ready!  <\/p>\n<p>    If you aren't there already, open the Ethereum Wallet, go to    the contracts tab and then click \"deploy new contract\".  <\/p>\n<p>    Now get the token source from above and paste it into the    \"Solidity source field\". If the code compiles without any    error, you should see a \"pick a contract\" drop down on the    right. Get it and select the \"MyToken\" contract. On the right    column you'll see all the parameters you need to personalize    your own token. You can tweak them as you please, but for the    purpose of this tutorial we recommend you to pick these    parameters: 10,000 as the supply, any name you want, \"%\" for a    symbol and 2 decimal places. Your app should be looking like    this:  <\/p>\n<\/p>\n<p>    Scroll to the end of the page and you'll see an estimate of the    computation cost of that contract and you can select a fee on    how much ether you are willing to pay for it. Any    excess ether you don't spend will be returned to you    so you can leave the default settings if you wish. Press    \"deploy\", type your account password and wait a few seconds for    your transaction to be picked up.  <\/p>\n<\/p>\n<p>    You'll be redirected to the front page where you can see your    transaction waiting for confirmations. Click the account named    \"Etherbase\" (your main account) and after no more than a minute    you should see that your account will show that you have 100%    of the shares you just created. To send some to a few    friends: select \"send\", and then choose which currency you want    to send (ether or your newly created share), paste your    friend's address on the \"to\" field and press \"send\".  <\/p>\n<\/p>\n<p>    If you send it to a friend, they will not see anything in their    wallet yet. This is because the wallet only tracks tokens it    knows about, and you have to add these manually. Now go to the    \"Contracts\" tab and you should see a link for your newly    created contract. Click on it to go to its page. Since this is    a very simple contract page there isn't much to do here, just    click \"copy address\" and paste the contract address on a text    editor, you'll need it shortly.  <\/p>\n<p>    To add a token to watch, go to the contracts page and then    click \"Watch Token\". A pop-up will appear and you only need to    paste the contract address. The token name, symbol and decimal    number should be automatically filled but if it's not you can    put anything you want (it will only affect how it displays on    your wallet). Once you do this, you'll automatically be shown    any balance you have of that token and you'll be able to send    it to anyone else.  <\/p>\n<\/p>\n<p>    And now you have your own crypto token! Tokens by themselves    can be useful as value exchange    on local communities, ways to keep track    of worked hours or other loyalty programs. But can we make    a currency have an intrinsic value by making it useful?  <\/p>\n<p>    You can deploy your whole crypto token without ever touching a    line of code, but the real magic happens when you start    customizing it. The following sections will be suggestions on    functions you can add to your token to make it fit your needs    more.  <\/p>\n<p>    All dapps are fully decentralized by default, but that doesn't    mean they can't have some sort of central manager, if you want    them to. Maybe you want the ability to mint more coins, maybe    you want to ban some people from using your currency. You can    add any of those features, but the catch is that you can only    add them at the beginning, so all the token holders will always    know exactly the rules of the game before they decide to own    one.  <\/p>\n<p>    For that to happen, you need a central controller of currency.    This could be a simple account, but could also be a contract    and therefore the decision on creating more tokens will depend    on the contract: if it's a democratic organization that can be    up to vote, or maybe it can be just a way to limit the power of    the token owner.  <\/p>\n<p>    In order to do that we'll learn a very useful property of    contracts: inheritance. Inheritance allows a    contract to acquire properties of a parent contract, without    having to redefine all of them. This makes the code cleaner and    easier to reuse. Add this code to the first line of your code,    before contract MyToken {.  <\/p>\n<p>    This creates a very basic contract that doesn't do anything    except define some generic functions about a contract that can    be \"owned\". Now the next step is just add the text is    owned to your contract:  <\/p>\n<p>    This means that all the functions inside    MyToken now can access the variable    owner and the modifier onlyOwner. The    contract also gets a function to transfer ownership. Since it    might be interesting to set the owner of the contract at    startup, you can also add this to the constructor    function:  <\/p>\n<p>    Suppose you want the amount of coins in circulation to change.    This is the case when your tokens actually represent an off    blockchain asset (like gold certificates or government    currencies) and you want the virtual inventory to reflect the    real one. This might also be the case when the currency holders    expect some control of the price of the token, and want to    issue or remove tokens from circulation.  <\/p>\n<p>    First we need to add a variable to store the    totalSupply and assign it in our constructor    function.  <\/p>\n<p>    Now let's add a new function finally that will enable the owner    to create new tokens:  <\/p>\n<p>    Notice the modifier onlyOwner on the end of    the function name. This means that this function will be    rewritten at compilation to inherit the code from the    modifier onlyOwner we had defined before. This    function's code will be inserted where there's an underline on    the modifier function, meaning that this particular function    can only be called by the account that is set as the owner.    Just add this to a contract with an owner    modifier and you'll be able to create more coins.  <\/p>\n<p>    Depending on your use case, you might need to have some    regulatory hurdles on who can and cannot use your tokens. For    that to happen, you can add a parameter that enables the    contract owner to freeze or unfreeze assets.  <\/p>\n<p>    Add this variable and function anywhere inside the contract.    You can put them anywhere but for good practice we recommend    you put the mappings with the other mappings and events with    the other events.  <\/p>\n<p>    With this code, all accounts are unfrozen by default but the    owner can set any of them into a freeze state by calling    Freeze Account. Unfortunately freezing has no    practical effect, because we haven't added anything to the    transfer function. We are changing that now:  <\/p>\n<p>    Now any account that is frozen will still have their funds    intact, but won't be able to move them. All accounts are    unfrozen by default until you freeze them, but you can easily    revert that behavior into a whitelist where you need to    manually approve every account. Just rename    frozenAccount into    approvedAccount and change the last line to:  <\/p>\n<p>    So far, you've relied on utility and trust to value your token.    But if you want you can make the token's value be backed by    ether (or other tokens) by creating a fund that automatically    sells and buys them at market value.  <\/p>\n<p>    First, let's set the price for buying and selling:  <\/p>\n<p>    This is acceptable for a price that doesn't change very often,    as every new price change will require you to execute a    transaction and spend a bit of ether. If you want to have a    constant floating price we recommend investigating     standard data feeds  <\/p>\n<p>    The next step is making the buy and sell functions:  <\/p>\n<p>    Notice that this will not create new tokens but change the    balance the contract owns. The contract can hold both its own    tokens and ether and the owner of the contract, while it can    set prices or in some cases create new tokens (if applicable)    it cannot touch the bank's tokens or ether. The only way this    contract can move funds is by selling and buying them.  <\/p>\n<p>    Note Buy and sell \"prices\" are not set in    ether, but in wei the minimum currency of the system    (equivalent to the cent in the Euro and Dollar, or the Satoshi    in Bitcoin). One ether is 1000000000000000000 wei. So when    setting prices for your token in ether, add 18 zeros at the    end.  <\/p>\n<p>    When creating the contract, send enough ether to it so    that it can buy back all the tokens on the market    otherwise your contract will be insolvent and your users won't    be able to sell their tokens.  <\/p>\n<p>    The previous examples, of course, describe a contract with a    single central buyer and seller, a much more interesting    contract would allow a market where anyone can bid different    prices, or maybe it would load the prices directly from an    external source.  <\/p>\n<p>    Everytime you make a transaction on ethereum you need to pay a    fee to the miner of the block that will calculate the result of    your smart contract. While this might    change in the future, for the moment fees can only be paid    in ether and therefore all users of your tokens need it. Tokens    in accounts with a balance smaller than the fee are stuck until    the owner can pay for the necessary fee. But in some usecases,    you might not want your users to think about ethereum,    blockchain or how to obtain ether, so one possible approach    would have your coin automatically refill the user balance as    soon as it detects the balance is dangerously low.  <\/p>\n<p>    In order to do that, first you need to create a variable that    will hold the threshold amount and a function to change it. If    you don't know any value, set it to 5 finney (0.005    ether).  <\/p>\n<p>    Then, add this line to the transfer function    so that the sender is refunded:  <\/p>\n<p>    You can also instead change it so that the fee is paid forward    to the receiver by the sender:  <\/p>\n<p>    This will ensure that no account receiving the token has less    than the necessary ether to pay the fees.  <\/p>\n<p>    There are some ways to tie your coin supply to a mathematical    formula. One of the simplest ways would be to make it a \"merged    mining\" with ether, meaning that anyone who finds a block on    ethereum would also get a reward from your coin, given that    anyone calls the reward function on that block. You can do it    using the     special keyword coinbase that refers to the miner who finds    the block.  <\/p>\n<p>    It's also possible to add a mathematical formula, so that    anyone who can do math can win a reward. On this next example    you have to calculate the cubic root of the current challenge    gets a point and the right to set the next challenge:  <\/p>\n<p>    Of course while calculating cubic roots can be hard for someone    to do on their heads, they are very easy with a calculator, so    this game could be easily broken by a computer. Also since the    last winner can choose the next challenge, they could pick    something they know and therefore would not be a very fair game    to other players. There are tasks that are easy for humans but    hard for computers but they are usually very hard to code in    simple scripts like these. Instead a fairer system should be    one that is very hard for a computer to do, but isn't very hard    for a computer to verify. A great candidate would be to create    a hash challenge where the challenger has to generate hashes    from multiple numbers until they find one that is lower than a    given difficulty.  <\/p>\n<p>    This process was first proposed by Adam Back in 1997 as    Hashcash    and then was implemented in Bitcoin by Satoshi Nakamoto as    Proof of work in 2008. Ethereum was launched    using such system for its security model, but is planning to    move from a Proof of Work security model into a     mixed proof of stake and betting system called    Casper.  <\/p>\n<p>    But if you like Hashing as a form of random issuance of coins,    you can still create your own ethereum based currency that has    a proof of work issuance:  <\/p>\n<p>    Also change the Constructor function (the one    that has the same name as the contract, which is called at    first upload) to add this line, so the difficulty adjustment    will not go crazy:  <\/p>\n<p>    Once the contract is online, select the function \"Proof of    work\", add your favorite number on the nonce    field and try to execute it. If the confirmation window gives a    red warning saying \"Data can't be execute\" go back and    pick another number until you find one that allows the    transaction to go forward: this process is random. If you find    one you will be awarded 1 token for every minute that has    passed since the last reward was given, and then the challenge    difficulty will be adjusted up or down to target an average of    10 minutes per reward.  <\/p>\n<p>    This process of trying to find the number that will give you a    reward is what is called mining: if difficulty rises    it can be very hard to find a lucky number, but it will be    always easy to verify that you found one.  <\/p>\n<p>    If you add all the advanced options, this is how the final code    should look like:  <\/p>\n<\/p>\n<p>    Scroll down and you'll see an estimated cost for deployment. If    you want you can change the slider to set a smaller fee, but if    the price is too below the average market rate your transaction    might take longer to pick up. Click Deploy and type    your password. After a few seconds you'll be redirected to the    dashboard and under Latest transactions you'll    see a line saying \"creating contract\". Wait for a few seconds    for someone to pick your transaction and then you'll see a slow    blue rectangle representing how many other nodes have seen your    transaction and confirmed them. The more confirmations you    have, the more assurance you have that your code has been    deployed.  <\/p>\n<\/p>\n<p>    Click on the link that says Admin page and you'll be    taken the simplest central bank dashboard in the world, where    you can do anything you want with your newly created currency.  <\/p>\n<p>    On the left side under Read from contract you have all    the options and functions you can use to read information from    the contract, for free. If your token has an owner, it will    display its address here. Copy that address and paste it on    Balance of and it will show you the balance of    any account (the balance is also automatically shown on any    account page that has tokens).  <\/p>\n<p>    On the right side, under Write to Contract    you'll see all the functions you can use to alter or change the    blockchain in any way. These will cost gas. If you created a    contract that allows you to mint new coins, you should have a    function called \"Mint Token\". Select it.  <\/p>\n<\/p>\n<p>    Select the address where those new currencies will be created    and then the amount (if you have decimals set at 2, then add 2    zeros after the amount, to create the correct quantity). On    Execute from select the account that set as    owner, leave the ether amount at zero and then press execute.  <\/p>\n<p>    After a few confirmations, the recipient balance will be    updated to reflect the new amount. But your recipient wallet    might not show it automatically: in order to be aware of custom    tokens, the wallet must add them manually to a watch list. Copy    your token address (at the admin page, press copy    address) and send that to your recipient. If they haven't    already they should go to the contracts tab, press    Watch Token and then add the address there.    Name, symbols and decimal amounts displayed can be customized    by the end user, especially if they have other tokens with    similar (or the same) name. The main icon is not changeable and    users should pay attention to them when sending and receiving    tokens to ensure they are dealing with the real deal and not    some copycat token.  <\/p>\n<\/p>\n<p>    Once you've deployed your tokens, they will be added to your    list of watched tokens, and the total balance will be shown on    your account. In order to send tokens, just go to the    Send tab and select an account that contains    tokens. The tokens the account has will be listed just under    Ether. Select them and then type the amount of tokens    you want to send.  <\/p>\n<p>    If you want to add someone else's token, just go to the    Contracts tab and click Watch    token. For example, to add the Unicorn    () token to your watch list, just add the address    0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7 and    the remaining information will be loaded automatically. Click    Ok and your token will be added.  <\/p>\n<\/p>\n<p>    Unicorn tokens are memorabilia created exclusively for those    who have donated to the address    0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359    that is controlled by the Ethereum Foundation. For more    information about them read it here  <\/p>\n<p>    You just learned how you can use ethereum to issue a token,    that can represent anything you want. But what can you do with    the tokens? You can use, for instance, the tokens to represent a share in a    company or you can use a central    committee to vote on when to issue new coins to control    inflation. You can also use them to raise money for a cause,    via a crowdsale. What will you build    next?  <\/p>\n<p><!-- Auto Generated --><\/p>\n<p>Visit link:<br \/>\n<a target=\"_blank\" href=\"https:\/\/www.ethereum.org\/token\" title=\"Create a cryptocurrency contract in Ethereum\">Create a cryptocurrency contract in Ethereum<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p> The Coin We are going to create a digital token. Tokens in the ethereum ecosystem can represent any fungible tradable good: coins, loyalty points, gold certificates, IOUs, in game items, etc. Since all tokens implement some basic features in a standard way, this also means that your token will be instantly compatible with the ethereum wallet and any other client or contract that uses the same standards.  <a href=\"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/cryptocurrency-2\/create-a-cryptocurrency-contract-in-ethereum\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[94874],"tags":[],"class_list":["post-195538","post","type-post","status-publish","format-standard","hentry","category-cryptocurrency-2"],"_links":{"self":[{"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/posts\/195538"}],"collection":[{"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/comments?post=195538"}],"version-history":[{"count":0,"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/posts\/195538\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/media?parent=195538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/categories?post=195538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.euvolution.com\/prometheism-transhumanism-posthumanism\/wp-json\/wp\/v2\/tags?post=195538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}