Skip to main content

Ripple Baby Steps

Ripple and XPR

What is Ripple for people in business and finance?

Ripple is a currency exchange and payment settlement platform built using blockchain technology. Unlike Ethereum that is a more universal distributed application platform, Ripple solves a more narrow set of problems such as sending payments (similar to Bitcoin), currency remittance, payments for invoices, as well as number of other use cases related to payment in different currencies between parties that may or may not trust each other. Ripple is fast, scalable, and provides number of functions needed to support different payment scenarios. XPR is a native Ripple currency with a fixed and limited supply coins. 100 Billion XPR cryptocoins are in circulation today and the same number will be in circulation tomorrow. 

What is Ripple for a software engineer? 

For a software developer, Ripple is distributed ledger platform accessible trough API. There are number of libraries to accommodate different developers's preferences and application needs. Scalability is not really an issue for Ripple at this point as the network can easily handle 1,500 transaction per second. Similar to Ethereum, developers can use test network to create and debug applications. 


Getting started. Software installation and configuration

While number of different languages and operating systems can be used to create a development environment, I will focus on JavaScript/NodeJS approach on a computer running Red Hat Linux distribution. 

Step 1. Install Yarn dependency manager 

sudo npm install yarn -g

Step 2. Install NodeJS

curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -sudo yum install -y nodejs

Step 3. Install Ripple library for JavaScript 

yarn add ripple-lib

How to Send Digital Currency?

To send a payment over the Ripple network, application should prepare, sign, and request the platform to send the payment. Code (payments.js) below illustrates these steps:  

'use strict';

const RippleAPI = require('ripple-lib').RippleAPI;

//will use testnet at https://developers.ripple.com/xrp-test-net-faucet.html
const addressFrom = 'rJpr9nKV7aikyFdUtPvuumAHYXvNJady1e';
const secret = 'shiMavwRGuf2DhCbzVzaSKRSCMHkV';
const prodServer = 'wss://s1.ripple.com:443';
const testServer = 'wss://s.altnet.rippletest.net:51233';

const addressTo = 'rDDFfub1aJaqsrztpHcoaJPBYg1eQZxKzs';//(secret: shaQdo3WKSobVbqCCWwEagViALWXz)

const api = new RippleAPI({server: testServer});
const instructions = {maxLedgerVersionOffset: 5};

const payment = {
  source: {
    address: addressFrom,
    maxAmount: {
      value: '0.01',
      currency: 'XRP'
    }
  },
  destination:{ 
    address: addressTo,
    amount: {
      value: '0.01',
      currency: 'XRP'
    }
  }
};

function quit(message) {
  console.log(message);
  process.exit(0);
}

function fail(message) {
  console.error(message);
  process.exit(1);
}

api.connect().then(() => {
  console.log('Connected...');
  return api.preparePayment(addressFrom, payment, instructions).then(prepared => {
    console.log('Payment transaction prepared...');
    const {signedTransaction} = api.sign(prepared.txJSON, secret);
    console.log('Payment transaction signed...');
    api.submit(signedTransaction).then(quit, fail);
  });
}).catch(fail);


While I do not mind my readers to use account in the code, my recommendation is to  create your own test credentials for the addressFrom and addressTo that can be easily created on https://developers.ripple.com/xrp-test-net-faucet.html

[leybzon]$ node payment.js Connected...Payment transaction prepared...Payment transaction signed...{ resultCode: 'tesSUCCESS', resultMessage: 'The transaction was applied. Only final in a validated ledger.' }

To check the result, Ripple explorer can be found at at http://ripplerm.github.io/ripple-wallet/. Do not forget to switch the explorer to the test network!

How to Check Account Balance? 

'use strict';

const RippleAPI = require('ripple-lib').RippleAPI;

//will use testnet at https://developers.ripple.com/xrp-test-net-faucet.html
const addressFrom = 'rJpr9nKV7aikyFdUtPvuumAHYXvNJady1e';

const prodServer = 'wss://s1.ripple.com:443';
const testServer = 'wss://s.altnet.rippletest.net:51233';

const api = new RippleAPI({server: testServer});
const instructions = {maxLedgerVersionOffset: 5};


function fail(message) {
  console.error(message);
  process.exit(1);
}

api.connect().then(() => {
  console.log('Connected...');
  
  api.connect().then(() => {
    api.getBalances(addressFrom).then(balances => {
      console.log(JSON.stringify(balances, null, 2));
      process.exit();
  });
});

}).catch(fail);


[leybzon]$ node getTransactions.js Connected...[ { "currency": "XRP", "value": "9999.989988" }]

Comments

Popular posts from this blog

Posting to FaceBook feed using Graph API

Graph API was announced at F8 with a promise to dramatically simplify the FB API. I checked the read access over the new interface during the presentations and to my big surprise it worked flawlessly and from the first time. When I tried https://graph.facebook.com/facebook, JSON-formatted info about the FaceBook page was returned (as expected).
Then I tried OAuth 2.0 way of accessing the API to post a message to the feed. And to my even bigger surprise it worked too!
Here is what you need to do to access Graph API over OAuth: 1. Create a FB app, store app properties to a file:
$appkey='7925873fbfb5347e571744515a9d2804'; $appsecret='THE SECRET'; $canvas='http://apps.facebook.com/graphapi/'; 2. Create a page that will prompt user the access permission (I am prompting for the publish_stream and offline_access permissions at the same time)
//http://apps.facebook.com/graphapi/ require'settings.php';
$url="https://graph.facebook.com/oauth/authorize?"; $url.=…

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. http://twitter.com/rasmus/status/7448448829
error_reporting(-1);

// Set plain text headers
header("Content-type: text/plain; charset=utf-8");

// Include the SDK
require_once '../sdk.class.php';


// Instantiate th…

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&quo…