Skip to main content

Respect Coin

Respect

I think it's time to talk about currency. Let's create a Respect Coin.

Step 1. Install OpenZeppelin library 

npm install zeppelin-solidity

When it comes to coins, I like to use some functions that smart people already implemented and other smart people verified. I think that Zeppelin is a nice collection of Solidity contracts that can be trusted. Let's use the StandardToken contract and use it as a parent class for our own RespectCoin contract.

Step 2. Create RespectCoin contract and store it in "contracts/RespectCoin.sol" file 

pragma solidity ^0.4.4;
import "../node_modules/zeppelin-solidity/contracts/token/StandardToken.sol";

/**
 * @title RespectCoin
 * @dev ERC20 Token example, where all tokens are pre-assigned to th
e creator.
 * Note they can later distribute these tokens as they wish using `transfer` and
 other
 * `StandardToken` functions.
 */
contract RespectCoin is StandardToken {

  string public constant name = "RespectCoin";
  string public constant symbol = "RESPECT";
  uint8 public constant decimals = 18;

  uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals));

  /**
   * @dev Constructor gives msg.sender all tokens
   */
  function RespectCoin() public {
    totalSupply = INITIAL_SUPPLY;
    balances[msg.sender] = INITIAL_SUPPLY;
  }

}


Step 3. Update "2_deploy_contract.js" file in /migrations directory

var Hello1 = artifacts.require("./Hello.sol");
var Hello2 = artifacts.require("./HelloWithCounter.sol");
var Respect = artifacts.require("./RespectCoin.sol");


module.exports = function(deployer) {
  deployer.deploy(Hello1);
  deployer.deploy(Hello2);
  deployer.deploy(Respect);
};


Step 4. Start Test RPC

 testrpc


Step 5. Start Truffle Console  (in another window)

truffle console

Step 6. Run Migration

truffle(development)> truffle migrate --reset

Compiling ./contracts/RespectCoin.sol...
Compiling ./node_modules/zeppelin-solidity/contracts/math/SafeMath.sol...
Compiling ./node_modules/zeppelin-solidity/contracts/token/BasicToken.sol...
Compiling ./node_modules/zeppelin-solidity/contracts/token/ERC20.sol...
Compiling ./node_modules/zeppelin-solidity/contracts/token/ERC20Basic.sol...
Compiling ./node_modules/zeppelin-solidity/contracts/token/StandardToken.sol...
Writing artifacts to ./build/contracts

Using network 'development'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0xb6bbeaaf3649ecb38d548cba96f681682dad9e0225726924fbee3ce36eff94e3
  Migrations: 0xbe2af3c53f45bb63b7ef3201baedeb88c74be0f2
Saving successful migration to network...
  ... 0x2f20859fa0995f1c0d859fd9d66d72ed70aa3f81f51fa9acd0ed1118c096f1f2
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying Hello...
  ... 0x9c332c025894fd0fd4303d4d10988e54f4ca5ad6f32b64a05b0b45b6432b56ed
  Hello: 0x2b2b0051d64f1866cb6ec3364f586fa8649e8bcf
  Deploying HelloWithCounter...
  ... 0x848901eaf0df857871357f09927dd708bcc88a9204b99613f5e3251d155590c4
  HelloWithCounter: 0x6dc23d081bbcb3861b44fb4801a37286c4e1df18
  Deploying RespectCoin...
  ... 0xf120d49937fcb3b66b8a72947c2c5d6d34a535adbc17e3a743f06b2ebe5ef73e
  RespectCoin: 0xf57e3f9a16620b29097f6654d0208b07e035d626
Saving successful migration to network...
  ... 0xfd0bdd99055b9ebe4afe06426c07d65c91f0c38afb35390ae037c67fe565f29a
Saving artifacts...
truffle(development)>


Step 7. Check "respect" balance on the default  account

truffle(development)>  var RespectCoin = RespectCoin.at(RespectCoin.address)
undefined
truffle(development)> RespectCoin.balanceOf(web3.eth.accounts[0]).then(result => result.toString())


'1e+22'

That's a lot of respect!

Note that the result is a BigNumber JavaScript object as defined in https://github.com/MikeMcl/bignumber.js/.  Native Javascript numbers are not large enough.


Step 7. Give some "respect" 

We will give 100 respect coins to another account
truffle(development)> RespectCoin.transfer(web3.eth.accounts[1], 100)

{ tx: '0x6f8fd611b817324fd1f3094e764b5c3dcc97b54d534c258677a9c0f388444039',
  receipt:
   { transactionHash: '0x6f8fd611b817324fd1f3094e764b5c3dcc97b54d534c258677a9c0f388444039',
     transactionIndex: 0,
     blockHash: '0xd5e061b9c29d7e76d725b366d63aeece8b138e30b4666ae099cd619b826fa862',
     blockNumber: 14,
     gasUsed: 51541,
     cumulativeGasUsed: 51541,
     contractAddress: null,
     logs: [ [Object] ],
     status: 1 },
  logs:
   [ { logIndex: 0,
       transactionIndex: 0,
       transactionHash: '0x6f8fd611b817324fd1f3094e764b5c3dcc97b54d534c258677a9c0f388444039',
       blockHash: '0xd5e061b9c29d7e76d725b366d63aeece8b138e30b4666ae099cd619b826fa862',
       blockNumber: 14,
       address: '0x53544a253c7f9958b8fc3131c4e2134a8320dab4',
       type: 'mined',
       event: 'Transfer',
       args: [Object] } ] }


Step 7. Check that another account got "respect" coins

Note that we will use "promise" notation here since call will not be returned immediately, as data needs to be retrieved from the blockchain first. Also, data will be returned in the BigData object and toString() conversion is necessary here.  
truffle(development)> RespectCoin.balanceOf(web3.eth.accounts[1]).then(result => result.toString())
'100'

Comments

Popular posts from this blog

"Hello World" from Solidity

How to say "Hello World" in the era of blockchain? Reflections Once upon a time, I worked in CTO role of a great startup, and in order to find talented code developers, we ran a competition for the most creative "Hello World" application. It was a lot of fun! I was not able to participate in the competition back then, but here is my delayed entry.

Step 1. Environment Configuration# Installing Truffle framework (http://truffleframework.com/) $ sudo npm install -g truffle# Creating project $ mkdir solidity-experiments $ cd solidity-experiments/ $ truffle init# Installing and starting Etherium local test network $ sudo npm install -g ethereumjs-testrpc $ testrpc &
Step 2. Point truffle framework to the test network Update truffle.js file created by the init to point to your test network. File content should look like this:
module.exports = { networks: { development: { host: "localhost", port: 8545, network_id: "*" // Match any netwo…

Developing Google Glass application showing the Heart Beat Rate

Wearable Sensors + Google GlassWearable sensors  are a lot of fun! I played with them for some time by now, both professionally (at work), and for the coding pleasure. This post is about my latest weekend project - native google glasses app showing heart rate. The idea is to continuously measure hear rate using the sensor and to show pulse rate in real time, for example, while running or exercising. Honestly, I did not find running with Google Glasses to be much fun (as they tend to fell off when I am running), but to see what makes my heart beat faster is an interesting and educational experience.

Google Glass (GG) Turns out to be a nice piece of hardware that is a fun to work with: reasonably fast processor, Android 4.0.1, wide range of sensors, WiFi, and Bluetooth interface!

IngredientsGG (http://www.google.com/glass/start/)Google glass SDK (https://developers.google.com/glass/gdk)Android SDK (http://developer.android.com/sdk/index.html)Zephyr Sensor (http://www.zephyranywhere.com…