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

Facebook Friends Connect

Is a way to extend external sites to provide: FB identity FB friends (relationship) Feed to FB   Demo app at http://www.somethingtoputhere.com/therunaround User experience: login: js login method requiresession(): detects state of usr-FB relationship, log-in into FB if needed. If user has not authorised app - present app auth dialog. If already has session - just go init JS, require session   access FB data: - FBML on external site - use JS FBML parser and replace in browser DOM with FB data - JS based API to get FB data, REST API on the server site. Sessions work accross any API - only small subset of FBML us supported at the moment   adding social content: - use access API   Connections: app developers can suggest connections (using e-mail hash) user get connect request on FB Move content from external sites to FB app can register feed template (3 types of stories) call JS "showfeeddialog" to request user to confirm data sharing on FB. privacy protection: app ca...

Freebase Hack Day

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