Sei sulla pagina 1di 10

RSK. Una breve aproximación técnica.

Victor Martinez Bahillo


Grupo Meetup Bitcoin y Blockchain de Bilbao
@vthot4

secundaria y viceversa; y ofrece a los usuarios de su


red un proceso denominado merge-minig2 (minería
combinada) que sirve para minar distintas
criptomonedas desde un mismo minero. Entre las
ventajas de la utilización de este tipo de minado
podemos destacar que los mineros utilizarán el mismo
hardware y el mismo consumo de electricidad por
tiempos de confirmación más rápidos ( tiempo medio
de 10 segudos) y contratos inteligentes.
Como ya hemos dicho, RSK, funciona como una
Sidechain de bitcoin. Cuando los Bitcoins son
Resumen transferidos a esta sidechain se transforman en
“Rootcoins” que son equivalentes a los Bitcoin pero
El presente documento trata de ser una pequeña que residen en la Rootstock blockchain. RSK nos
ayuda para el laboratorio que se celebrará el 14 de proporciona la posibilidad de volverlos a transformar
Diciembre de 2017 en Bilbao. Son simplemente notas en Bitcoin en cualquier momento.
que nos permitan entender y replicar el entorno. Esta RSK mejora, en teoría, Bitcoin en los siguientes
es una versión preliminar que deberemos actualizar y aspectos3: (No lo voy a traducir para que no se pierda
mejorar. ningún matiz):

• Turing-complete Rootstock Virtual Machine


1. Introducción. (RVM) allowing smart-contracts.
• Average first confirmation of transactions in
RSK es una plataforma desarrollada por el grupo 10 seconds.
argentino RSK (anteriormente Rootstock), que trabaja • Safe merged mining combining PoW with
con cadenas laterales bidireccionales ( sidechains)1, threshold-signature based federation.
sobre la blockchain de Bitcoin, permitiendo a los • Embedded low-delay fast relay backbone
usuarios de estas dos redes trabajar cualquier tipo de into peer-to-peer gossip network.
operación por medio de contratos inteligentes y en un • Two-way pegging using sidechains
sistema que es considerablemente más rápidoi. (currently a federated peg, fully automatic
peg subject to Bitcoin improvement.
La plataforma de Smart Contract para Bitcoin que
propone RSK trabaja por medio de un mecanismo En el Apéndice I podemos ver la tabla de parámetros
llamado 2-way pegii, el cual permite la transferencia de que se mejoran con RSK.
bitcoins de una blockchain principal a una blockchain

1 Las sidechains, en teoría, permiten añadir funcionalidades


nuevas a Bitcoin, pero sin necesidad de modificar 2 https://www.oroyfinanzas.com/2014/11/merged-
constantemente el código de éste, ya que la funcionalidad es mining-bitcoin-que-es-minado-combinado-bitcoin/
desarrollada utilizando otra cadena de bloque para finalmente
ser conectada a Bitcoin. Con esta solución se trataría de evitar
la saturación de una sóla cadena de bloques. Si queremos apliar
3 http://www.the-blockchain.com/docs/Rootstock-
conocimientos: WhitePaper-Overview.pdf
https://blockstream.com/technology/sidechains.pdf
Algunos de las casos de usos principales de esta nueva Para no extendernos mucho, podemos decir que la
plataforma pueden ser: plataforma de RSK surge como combinación de estos
tres elementos:
• Micropayment channels y Hub-and-Spoke
networks. • A turing-complete resource-accounted
• Peer-to-peer distributed exchange. deterministic virtual machine (for smart
• Retail Payment Systems. contracts).
• Escrow Services.
• Crypto-assets Creation. • A two-way pegged Btcoin sidechain(for BTC
• Asset Securitization. denominated trade).
• Descentralized remittances.
• IP Protection / Registry. • A dynamic hybrid merge-minig/federated
• Voting System. consensus protocol (for consensus security),
• Micro-lending. and a low-latency network(for fast payments).
• Supply Chain Traceability.
• Online Reputation & Digital Identity.
• In-game Global Currency. Para terminar esta breve introducción indicar que RSK
• Internet-gambling and Prediction Markets. presento en la conferencia Consensus 2017 la red
• Fair-playing. Ginger. Ginger es la nueva plataforma que Microsoft
Azure y RSK Labs ofrecen para que los mineros
fortalezcan el cosistema Bitcoin. Con esta alianza
Actualmente, algunos de los potenciales competidores Ginger entra a formar parte de los servicios BaaS que
de RSK pueden ser4: proporciona Microsoft.
Para el alivio de muchos, desde hace poco, Ginger
• Ethereum https://www.ethereum.org también esta disponible en Amazon.
• Counterparty https://counterparty.io (https://aws.amazon.com/marketplace/pp/B074KSBHC
• QTUM: https://qtum.org/en/ G).
• BOSCoin: https://boscoin.io/en/home/
• Tezos: https://www.tezos.com/

Seguramente nos dejemos muchos más pero, creo que


son referencia suficiente para poder comparar los
proyectos.

Acercándonos desde una perspectiva más técnica,


RSK es una evolución de QixCoin5
(http://qixcoin.com/). En esta cryptomoneda se
implementaba una máquina de turing completa que se
ha utilizado como base para la implementación de la
máquina virtual de Smart-contract que corren en
bitcoin. A esta máquina se le ha denominado
“Rootsstock Virtual Machine (RVM). A nivel de op-
code, RVM es totalmente compatible con EVM lo que
permite que podamos ejecutar los Smart-Contract que
ya tengamos hechos para ethereum. Eso sí, simpre
después de una revisión y una adecuación pertinente.

4 http://digrate.com/uploads/ico_report/RSK_ENG-
5_1.pdf
5 QixCoin is a new cryptocurrency to support peer to peer
gaming, both by strategy or by chance. It is anonymous,
untraceable and peer to peer tradeable against the other
major cryptocurrencies, and has a built-in engine to
verify card games, like Poker or Blackjack.
2. Instalación básica. A lo largo de este apartado trataremos de explicar cada
una de las instalaciones.
La instalación es un conjunto de configuraciones e
instalaciones que irán mutando a lo largo de las
diferentes versiones. Esto es algo que debemos tener 2.1. Instalación de RskJ usando Ubuntu.
claro ya que las interdependencias de versiones nos
pueden causar numerosos quebraderos de cabeza. En Podemos instalar RskJ usando el PPAs de Ubuntu:
este documento explicaremos las instalaciones básicas
que hemos ejecutado de forma explicita. Pero en $ sudo add-apt-repository ppa:rsksmart/rskj
versiones posteriores pasaremos a proporcionar los $ sudo apt-get update
roles de ansible necesarios para automatizar la $ sudo apt-get install rskj
instalación.
Si optamos por la instalación del paquete directamente
Antes de seguir: Las recomendaciones mínimas para mediante dpkg podemos descargarlo desde:
instalar un nodo RSK son:6 https://launchpad.net/%7Ersksmart/
+archive/ubuntu/rskj/+packages
• 4 cores.
• 4 GB RAM. Eso si, deberemos instalar previamente openjdk-8-jre
• 50 GB Almacenamiento. for Ubuntu.
Una vez instalado podemos lanzar el servicio de rsk
Y el sistema Operativo sobre el que lo vamos a instalar mediante systemctl o service:
será: Ubuntu 16.0.4. En el lab usaremos la versión
desktop pero en un entorno un poco más serío serí blockman@RSKLAB:~$ systemctl start rsk.service
mejor usar la versión ubuntu server.
Y comprobamos que todo ha ido bien mediante:
Paquetería adicional:
blockman@RSKLAB:~$ systemctl status rsk.service
• curl. rsk.service - RSK Node
Loaded: loaded (/lib/systemd/system/rsk.service; enabled; vendor
• Terminator. preset: enab
• Tree. Active: active (running) since mar 2017-12-12 15:41:22 CET; 2s
• git. ago
• node.js y npm. Main PID: 5576 (java)
CGroup: /system.slice/rsk.service
• openssh-server. └─5576 /usr/bin/java
-Dlogback.configurationFile=/etc/rsk/logback.xml
bloockman@RSKLAB:~$ sudo apt-get install curl terminator tree
git gradle npm openssh-server dic 12 15:41:22 RSKLAB systemd[1]: Started RSK Node.

Para instalar node.js en ubuntu: También podemos comprobar que el proceso esta
levantado o que los puertos están abiertos mediante:
curl -sL https://deb.nodesource.com/setup_8.x
| sudo -E bash - blockman@RSKLAB:~$ ps -ef|grep rsk
sudo apt-get install -y nodejs blockman@RSKLAB:~$ netstat -putan

Para llevar a cabo las pruebas podemos optar por Si todo ha ido bien veremos algo parecido a esto:
varios métodos de instalación diferentes:
blockman@RSKLAB:~$ ps -ef|grep rsk
1. Instalación de RskJ usando Ubuntu. rsk 5576 1 2 15:41 ? 00:00:17 /usr/bin/java
2. Instalación mediante docker. -Dlogback.configurationFile=/etc/rsk/logback.xml
-Drsk.conf.file=/etc/rsk/node.conf -cp /usr/share/rsk/rsk.jar
3. Instalación desde githup. Command-line ó co.rsk.Start 2>&1 &
IntellJ
Ponemos expresamente esta salida porque se ve
perfectamente como se lanza el nodo de rsk y
configuración utiliza. Es este caso: /etc/rsk/node.conf.
6 https://github.com/rsksmart/rskj/wiki/Node-
Minimum-Requirements
Las rutas que utiliza por defecto la paquetería son:
Instalación de Docker en Ubuntu 16.0.47.
• /etc/rsk Ficheros de configuración.
• /usr/share/rsk Directorio que contiene el jar Para comenzar deberemos asegurarnos de borrar las
que se ejecuta. instalaciones previos o antiguas ( si procede):
• /var/lib/rsk/database Es el directorio donde
se guarda la base de datos. En la imagen $ sudo apt-get remove docker docker-engine docker.io
podemos ver la estructura de directorios que
la componen. Una vez dejado todo limpio, vamos a optar por la
• /var/log/rsk Se guardan los logs de rsk. opción de instalación desde repositorio por lo que
procedemos a seguir los siguientes pasos:
Ahora lo que vamos a hacer es deshabilitar el servicio
en el arranque ya que queremos ser nosotros los que Instalamos los paquetes necesarios para qie apt pueda
controlen cuando arranca o para. Para ello: funcionar vía HTTPS:

blockman@RSKLAB:~$ systemctl disable rsk.service $ sudo apt-get install apt-transport-https ca-certificates curl
Removed symlink /etc/systemd/system/multi- software-properties-common
user.target.wants/rsk.service.
Añadimos la key GPG oficial de Docker:

$ curl -fsSL
https://download.docker.com/linux/ubuntu/gpg |
sudo apt-key add -

Acontinuación añadimos el repositorio de la rama


estable:

$ sudo add-apt-repository "deb [arch=amd64]


https://download.docker.com/linux/ubuntu
$(lsb_release -cs)stable"

Actualizamos los repositorios e instalamos Docker CE.

$ sudo apt-get update


$ sudo apt-get install docker-ce

Si todo ha ido bien deberemos tener instalado docker


en nuestra máquina. SI ejecutamos $ docker nos
aparecerá toda la lista de comandos. Eso quiere decir
que tenemos el framework instalado pero nos falta
poder acceder a docker desde nuestro usuario. Para
ello:

$ sudo usermod -aG docker blockman

Ilustración 1 Estructura de la BD. Para que surja efecto deberemos reiniciar la sesión del
usuario. Para comprobar que todo funciona recurrimos
al hola mundo de docker:
2.2. Instalación mediante Docker. $ docker run hello-world

Para llevar a cabo la instalación mediante este método blockman@RSKLAB:~$ docker run hello-world
deberemos instalar el entorno de docker y docker- Unable to find image 'hello-world:latest'
locally
compose en nuestro equipo. Para ello realzaremos los latest: Pulling from library/hello-world
siguientes pasos: ca4f61b1923c: Pull complete

7 https://docs.docker.com/engine/installation/linux/d
ocker-ce/ubuntu/
Digest: REPOSITORY TAG IMAGE
sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87 ID CREATED SIZE
b255f48e297ec7f98e123905c rsk-node latest
Status: Downloaded newer image for hello- 6fce7b768773 About a minute ago 537MB
world:latest
Recomiendo revisar el fichero rsk-node ya que nos dará
Hello from Docker! muchas indicaciones de como implementan el nodo de
rsk. (Mirarlo sin miedo que es bastante simple.)
Instalación de docker-compose8. Ya tenemos todo preparado así que levantamos nuestra
instancia del nodo rsk:
Ya puestos con docker vamos a instalar esta utilidad
que nos ayudará a levantar dockers de forma $ docker run -d --name rsk-node-01 -p
orquestada. Para ello seguiremos los siguientes pasos: 4444:4444 -p 50505:50505 rsk-node

$ sudo curl -L Para comprobar que todo ha ido bien:


https://github.com/docker/compose/releases/dow
nload/1.17.0/docker-compose-`uname -s`-`uname $ docker ps -a
-m` -o /usr/local/bin/docker-compose CONTAINER ID IMAGE
COMMAND CREATED
Le damos permisos de ejecución: STATUS PORTS
NAMES
$ sudo chmod +x /usr/local/bin/docker-compose 223aa44ff409 rsk-node
"/usr/bin/supervisord" 14 seconds ago
Up 13 seconds 0.0.0.0:4444-
Y comprobamos que toda funciona correctamente: >4444/tcp, 0.0.0.0:50505->50505/tcp rsk-
node-01
blockman@RSKLAB:~$ docker-compose --version
docker-compose version 1.17.0, build ac53b73
Podemos comprobar con ps y netstat para ver los
procesos y los puertos abiertos respectivamente.
Con todo esto ya tendremos preparado nuestro Ubuntu
Para parar el docker ejecutado bastara con que
para jugar con contenedores Docker. Para ejecutar el
hagamos:
docker de rsk deberemos descargarnos los Dockerfile
correspondientes y construir la imagen: $ docker stop ID_Container

Nos situamos en la carpeta deseada (LAB) y Siendo el ID_container el número que nos aparece al
descargamos el repositorio que contiene los dockerfile hacer docker ps -a , en el caso de arriba: 223aa44ff409
necesarios: Si no parase, podríamos hacer un docker kill
ID_Container y si lo queremos eliminar del registro del
$ git clone
https://github.com/rsksmart/artifacts.git ps, usaremos docker rm ID_container.

En la ruta: Si por alguna razón queremos borrar la imagen docker


/home/blockman/LAB/artifacts/Dockerfiles/RSK-Node del registro podemos usar docker rmi
se enceuntran los ficheros que buscamos. Nos situamos
en esta carpeta y construimos el docker: Para terminar y no liarnos más con el manejo del los
docker, diré que existen unos comandos que nos
$docker build -t rsk-node . limpian todo el entorno docker sin contemplaciones:

Comenzará a construirse la imagen docker que se # Parar todos los contenedores:


almacenará en nuestro repositorio de imágenes de dcoker stop $(docker ps -a -q)
docker. Cuando termine podremos verlo mediante:
# Eliminar todos los contenedores:
blockman@RSKLAB:~/LAB/artifacts/Dockerfiles/RSK docker rm $(docker ps -a -q)
-Node$ docker images
#Eliminar todas las imágenes
8 https://docs.docker.com/compose/install/#install- docker rmi $(docker images -q)
compose
2.3. Instalación desde código.

Esta última forma de instalación está más enfocada a


aquellas personas que quieran hacer modificaciones a
medida y quieran compilar el proyecto completo. Es
una buena forma de aprender y de ver como se
estructuras estos tipos de proyectos. Aunque no nos
queramos meter con el código es interesante que le
Esta compilación nos dejará el jar del nodo en la
echemos un vistazo.
sigueinte ruta:
/home/blockman/LAB/rskj/rskj-core/build/libs
Primeramente deberemos tener isntalados los requisitos
mínimos: blockman@RSKLAB:~/LAB/rskj/rskj-core/build/libs$ ls
rskj-core-0.3.0-BAMBOO-all.jar rskj-core-0.3.0-
• Java 8 JDK. (Esto es muy curio porque usan BAMBOO-javadoc.jar
el de Oracle y en la isntalación de paquetería rskj-core-0.3.0-BAMBOO.jar rskj-core-0.3.0-
el open. Nosotros vamos a optar por el open. BAMBOO-sources.jar
• Git
• IntelliJ IDEA. Ahora podremos levantar el nodo mediante:

$ java -Drsk.conf.file=[conf] -cp [jar] co.rsk.Start


Para instalar el JDK:
$ sudo apt-get install openjdk-8-jdk
Donde:
Instalamos IDE desde :
https://www.jetbrains.com/idea/download/#section=lin conf es el archivo de configuración del nodo. Podemos
ux encontrar un ejemplo en Classes/production/rskj-
core/config/rsk-sample.conf Algunas de las settings
Una vez descargado lo descomprimimos y lanzamos el tienen que ser inicializadas mediante el siguiente
instalador: procedimiento9:

$ java -cp rskj-core-0.3.0-BAMBOO-all.jar


$ tar xvf ideaIC-2017.3.1.tar.gz
co.rsk.GenNodeKeyId
$ mv idea-IC-173.3942.27 IntelliJ
$ cd IntelliJ/bin/ Nos devolverá los parámetros que necesitamos para
$ ./idea.sh configurar el conf:
Seguimos los pasos y lo dejamos instalado. {
"privateKey":
"72745f6207d816f2b5dc5f567240c827a89a02f4fe790
Ahora nos descargamos el código de rsk desde el bb8b03109df637e517c",
githup mediante: "publicKey":
"049d14122b9bc301496b2bc440a9a40da38a4f8e581
(Lo haremos dentro de la carpeta LAB) d5e3da4775166fc3975d2d01eba9035e8d6e16aed505
e931e1ee723c428beeb9266a2aad41143369bf4d6cc",
$ git clone --recursive "publicKeyCompressed":
https://github.com/rsksmart/rskj.git "029d14122b9bc301496b2bc440a9a40da38a4f8e581
d5e3da4775166fc3975d2d0",
Antes de hacer una prueba de compilación directa "address":
tenemos que ejecutar el script configure.sh que hay en "6fe36516b32b8f01ceaf6069845b56a710a39b15",
"nodeId":
el raiz del proyecto:
"9d14122b9bc301496b2bc440a9a40da38a4f8e581d5
e3da4775166fc3975d2d01eba9035e8d6e16aed505e9
$ ./configure.sh 31e1ee723c428beeb9266a2aad41143369bf4d6cc"
}
Con todo preparado probamos a compilar:

$ ./gradlew build shadow -x test


9 https://github.com/rsksmart/rskj/wiki/How-to-
Si todo ha ido bien veremos algo como esto: initialize-RSK-node-configuration-file-settings
En el enlace nos indican como hacerlo desde el IDE 4.1. RSK Node console.
pero yo prefiero esta forma ya que lo podemos meter
dentro de un script y generarlo de forma sencilla. Con npm install
el formato que tiene sería sencillo crear de forma node consola.js -server HOST:PORT
automática el fichero de configuración tomando estos
parámetros para configurarlo. web3.eth.blockNumber: returns the local blockchain's
best block number.
En la carpeta LAB hemos creado un pequeño script
para facilitar la generación de estos parámetros: web3.eth.getBalance(): returns the account balance

4.2. Explorer

npm install
npm start

5. Instalación de solidity, truffel y testrpc.


Para instalar solidity10 en Ubuntu usaremos el PPA.
Para ello:
Cada nodo que queramos lanzar en nuestra red debería
tener su id y clave privada. Para ejecutar el nodo solo $ sudo add-apt-repository ppa:ethereum/ethereum
es obligatorio la private key. $sudo apt-get update
$ sudo apt-get install solc
Para hacer una prueba sencilla se ha creado una carpeta
Nodo dentro de LAB que contien el jar de rsk y el Truffle es un framework que ayuda a los
fichero de configuración básico. También se ha creado desarrolladores a escribir, testar y deployar los smart
un sencillo lanzador para levantar el nodo : ./lanzar.sh contracts. Es compatible con RSK smart.
Básicamente hace lo siguiente:
Para instalar truffle11 ejecutaremos:
$ java -Drsk.conf.file=rsk-sample.conf -cp rskj-core-
$ sudo npm install -g truffle
0.3.0-BAMBOO-all.jar co.rsk.Start
TestRPC12 es una blockchain en memoria que nos sirve
Nota: Se ha derivado el path de la base de datos a DB
para hacer test rápidos de los desarrollos de Smart
para evitar problemas.
Contracts.

$ npm install -g ethereumjs-testrpc


3. Instalar RSK Block explorer.
$ git clone https://github.com/rsksmart/explorer
$ npm install

4. Instalación RSK Utilities.

10 http://solidity.readthedocs.io/en/develop/installing-
solidity.html
11 https://github.com/trufflesuite/truffle
12 https://www.npmjs.com/package/ethereumjs-
testrpc
APENDICE I.
En la siguiente tabla encontramos una comparativa de
algunos de los parámetros que mejora Blockchain al
añadir RSK a la ecuación.
Ilustración 2: Source: Rooststock Platform white paper (pag. 8).
i Andrea Lean, “RSK podría permitir hasta 20.000 transacciones por segundo en la red bitcoin.”, source:
https://www.criptonoticias.com/entrevistas/rsk-permitir-20000-transacciones-segundo-bitcoin/#axzz512PYxGMP

ii Sergio Demian Lerner, “Drivechains, Sidechains and hybrid 2-way peg designs”, source:
https://uploads.strikinglycdn.com/files/ec5278f8-218c-407a-af3c-ab71a910246d/Drivechains_Sidechains_and_Hybrid_2-
way_peg_Designs_R9.pdf

Potrebbero piacerti anche