Configuration de nouveaux plugins dans ARK Core v2 (exemple)

zôÖma
ARK.io - France
5 min readJun 7, 2018

Si vous avez suivi ARK depuis un certain temps, vous avez probablement entendu ARK être surnommé “WordPress of Blockchains”. Ceci est une déclaration audacieuse dans une industrie habituée aux affirmations toujours plus extravagantes les unes que les autres, et nous voulons montrer que chez l’ARK, ce n’est pas une phrase prononcée à la légère pour orienter la hype.

En effet, dans la Core V2, “WordPress of Blockchains” n’est pas qu’un slogan, c’est un véritable système de travail prêt à être déployé. Notre système de plugin modulaire est facile à configurer, modifier, à mettre en œuvre et facile à executer. Un de nos objectifs est de rendre les blockchains accessibles au plus grand nombre et notre système de plugin modulaire est une étape majeure dans la réalisation de cet objectif.

À l’approche de la version ARK Core V2, nous voulions vous donner un exemple simple de la façon de construire des plugins dans le nouveau noyau ARK. Le système de plugin pour ARK Core V2 sera quelque chose de totalement nouveau et l’une des premières solutions (pas une solution de 2ème couche, mais bien une liaison native au Core) capable d’offrir un tel service aux développeurs et autres passionnés. Notre nouveau système de plug-in modulaire offrira une nouvelle ère dans les solutions de blockchain personnalisables alimentées par le tout nouveau ARK Core. Les utilisateurs pourront ajouter, supprimer ou remplacer des plugins nouveaux ou existants directement à leurs blockchains ARK sans casser ou mettre en péril le réseau ARK principal et sa sécurité.

1. Introduction

Dans cet article, nous verrons comment configurer un nouveau plugin, le développer et l’enregistrer dans le core ARK. Dans cet exemple, notre plugin vous enverra un SMS (message texte) pour vous avertir si votre nœud est en panne ou s’il manque des blocs.

2. Configuration

Pour commencer, nous allons cloner le core-plugin-skeleton qui vous fournit une configuration que nous recommandons pour tous les plugins de base.

Notez que ce référentiel n’est pas encore disponible et qu’il sera disponible avec la base de code ARK Core V2 qui sera rendue publique le 14 juin 2018.

bash
git clone https://github.com/ArkEcosystem/core-plugin-skeleton your-plugin-name
cd your-plugin-name
yarn install

Maintenant que le référentiel est configuré, ouvrez le fichier package.json et ajustez le nom et la description pour expliquer ce qu'est votre plugin.

{
"name": "@vendor/your-plugin-name",
"description": "This plugin provides X for ARK Core 2.0",
}

3. Développement

Le référentiel doit maintenant être configuré et toutes les dépendances doivent être installées afin que nous puissions commencer à configurer et implémenter notre plugin de monitoring.

3.1. Configuration du client Twilio

Notre première étape consistera à implémenter le Twilio Client qui sera responsable de l'envoi d'un SMS chaque fois que nous manquerons un bloc afin que nous puissions réagir et s’occuper rapidement du serveur.

const twilio = require('twilio')
const util = require('util')
const container = require('@arkecosystem/core-container')
const logger = container.resolvePlugin('logger')
module.exports = class Twilio {
constructor(options) {
this.client = twilio(options.accountSid, options.authToken)
this.options = options
}
async sendMessage(delegate, block) {
try {
await client.messages.create({
body: util.format(this.options.body, delegate.username, block.height),
from: this.options.from,
to: this.options.to
})
logger.info(`[Monitor] An SMS was send with the ID ${message.sid} for a missed block at height ${block.height}.`)
} catch (error) {
logger.info(`[Monitor] Failed to send an SMS. Reason: ${error.message}`)
}
}
}

Le conteneur (container*) nous donne accès à tous les plugins ARK Core actifs. Dans la plupart des cas, votre plugin aura besoin d'accéder à config, logger, event emitter ou à la base de données. La méthode sendMessage accepte un paramètre delegate et block que nous utiliserons pour construire notre message.

3.2. Configuration de l'écouteur d'événement (Event listener)

Maintenant que Twilio Client est implémenté, nous pouvons configurer notre écouteur d'événements (* Event Listener). Nous allons écouter l' événement forging.missing qui nous fournira un objet contenant les arguments delegate et block dont nous avons besoin pour sendMessage . Nous n'appellerons sendMessage que si le délégué configuré correspond au délégué qui a manqué un bloc.

'use strict'const container = require('@arkecosystem/core-container')
const emitter = container.resolvePlugin('event-emitter')
class Listener {
setUp(options, twilio) {
emitter.on('forging.missing', data => {
if (data.delegate.publicKey === options.publicKey) {
twilio.sendMessage(data.delegate, data.block)
}
})
}
}
module.exports = new Listener()

3.3. Configuration du plugin

Maintenant que nous avons implémenté Twilio Client et Event Listener, nous devons remplir le fichier lib / index.js qui sert de point d'entrée de notre plugin en fournissant des informations comme : un nom, une version et des fonctions pour configurer et désinstaller le plugin.

'use strict'const listener = require('./listener')
const Twilio = require('./twilio')
exports.plugin = {
pkg: require('../package.json'),
register: async (container, options) => {
logger.info('[Monitor] Waiting for Missed Blocks')
listener.setUp(options, new Twilio(options.twilio))
}
}

La fonction de registre sera utilisée par @ arkecosystem / core-container pour configurer votre plugin et le rendre disponible à l’ARK Core. Dans cet exemple, nous utilisons la méthode register pour configurer votre écouteur d'événement (event listener) et Twilio Messenger.

Remarque: Si votre plugin fonctionne comme un serveur express, n'oubliez pas de le fermer dans la fonction de désenregistrement qui sera utilisée par @ arkecosystem / core-container pour déinstaller votre plugin.

3.4. Enregistrement du plugin

Maintenant que le plugin est développé, nous pouvons l'enregistrer dans ARK Core. Pour ce faire, ouvrez ~ / .ark / config / plugin.js et ajoutez votre plugin et sa configuration.

module.exports = {
'@arkecosystem/core-event-emitter': {},
'@arkecosystem/core-config': {},
'@arkecosystem/core-logger': {},
...
'@vendor/your-plugin-name': {
publicKey: 'your-delegate-public-key',
twilio: {
body: '%s is missing',
to: '+12345678901',
from: '+12345678901'
}
},
}

Voilà, c’est aussi simple que cela.
Redémarrez votre processus de noeud et testez votre nouveau plugin!

Avec v2 juste à côté (n'oubliez pas que nous publierons la base de code ARK Core pour les tests DevNet le 14 juin 2018 et que nous exécuterons également une prime Pull Request sur Core v2 qui paiera x2 pour chaque PR fusionné sur ARK Dépôt central (20 $ par fusion)) - si vous ne l'avez pas encore lu, vous retrouverez l’information ici : https://blog.ark.io/ark-core-v2-codebase-and-devnet-release-date-21b93cc372bb ) nous présenterons également Readme.io qui couvrira cela et bien plus encore sous forme d’un centre de ressource en ligne, et rassemblera toutes les documentations en un point !

Suivez-nous sur les réseaux sociaux ( Twitter | Facebook | Reddit ) et restez à l'écoute de notre blog sur medium et sur steemit pour plus de détails dans les prochains jours à mesure que nous approchons de la mise en ligne de v2!

ARK Code Base Core V2 & Dev Net:
Jeudi 14 juin 2018

Pour voir un compte à rebours en direct, allez à:
https://ark.io/countdown

____________________________________________________________

https://ark.io/
Article original de BoldNinja
Traduit par
Antoine Breuil pour Ark & ARK.io Espace Francophone

--

--

zôÖma
ARK.io - France

CEO & Founder @ Samouraï Coop — Co-Founder @ Paris P2P Festival — Ninja&Design @ Berty Technologies — I work hard to build future of cooperatives companies.