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

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&#

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

"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