Skip to main content

Respect Coin


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
 * `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) {

Step 4. Start Test RPC


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...

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

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


That's a lot of respect!

Note that the result is a BigNumber JavaScript object as defined in  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',
   { transactionHash: '0x6f8fd611b817324fd1f3094e764b5c3dcc97b54d534c258677a9c0f388444039',
     transactionIndex: 0,
     blockHash: '0xd5e061b9c29d7e76d725b366d63aeece8b138e30b4666ae099cd619b826fa862',
     blockNumber: 14,
     gasUsed: 51541,
     cumulativeGasUsed: 51541,
     contractAddress: null,
     logs: [ [Object] ],
     status: 1 },
   [ { 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())


Popular posts from this blog

Amazon Simple Email Service (Amazon SES) and PHP

This morning Amazon announced availability of a bulk email delivery service called " Simple Email Service ". Anyone who knows how much pain is it to set-up scalable email solution (and it is not just spammers who need it!) should celebrate the occasion. I know of a company that spent several years cleaning ip addresses it sends email and found itself locked into the contract with internet provider since it would take forever to reach required level of email deliver ability anywhere else. Anyway, this evening I decided to check the Amazon claim that the service is "simple". Found out that it is indeed simple! Since there is not much in terms of the documentation yet, here is my code where I used AWS PHP library : // Enable full-blown error reporting. error_reporting (- 1 ); // Set plain text headers header ( "Content-type: text/plain; charset=utf-8" ); // Include the SDK require_once '../sdk.class.php&#

"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 ( $ 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: "*"

"Hello World" with counter

Friend of mine pointed out that the "Hello World" contract described in my previous post does not keep state. Reading and writing data to the blockchain is important and can be challenging. In this post I will add a counter to count number of times the sayHello() function was called.    Step 1. Create  a new contract Let's create a file HelloWithCounter.sol and put it into the "contracts" directory. pragma solidity ^0.4.4; contract HelloWithCounter { uint private helloCounter; function Hello() public { // constructor helloCounter = 0; } function sayHello() public returns (string) { helloCounter = helloCounter+1; return strConcat('I say Hello #', uintToString(helloCounter)); } function getHelloCounter() constant public returns (string) { return uintToString(helloCounter); } function uintToString(uint v) internal pure returns (string str) { uint maxlength = 100; bytes memory reversed = new byt