-
Notifications
You must be signed in to change notification settings - Fork 0
Ru Code examples
Начинающим разработчикам всегда рекомендуется прочесть документации по той или иной библиотеке. Это помогает как понять работу библиотеки, так и запомнить возможности, которые можно использовать при разработке приложений. В данном разделе описаны наиболее популярные запросы в виде примеров. Наиболее используемая библиотека для приложений VIZ — viz-js-lib, поэтому примеры будут с её использованием.
Подробная документация на английском с указанием всех методов и их аттрибутов доступно по ссылке.
В зависимости от серверного (nodejs) или браузерного (js) использования библиотеку нужно подключать разными способами.
Для nodejs актуальной инструкцией будет установка библиотеки через npm install viz-js-lib --save
и подключением её в js файле через var viz = require('viz-js-lib');
.
Для js подключения можно либо самому собрать webpack библиотеки через консоль npm build
, либо воспользоваться уже собранной библиотекой от jsDelivr CND или Unpkg CDN. Просто добавьте к html файлу тэг script и укажите url библиотеки: <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/viz-js-lib@latest/dist/viz.min.js"></script>
, после чего у вас будет доступ через консоль к глобальной переменной viz
.
Пока у вашего приложения нет большого потока пользователей, разумно использовать доступную публичную ноду. На момент написания статьи в VIZ доступно две публичные ноды:
- Публичная нода от делегата lex:
https://viz.lexa.host/
для JSON-RPC запросов через HTTPS иwss://viz.lexa.host/ws
для JSON-RPC запросов через WebSocket over SSL; - Публичная нода от делегата solox:
https://solox.world/
для JSON-RPC запросов через HTTPS иwss://solox.world/ws
для JSON-RPC запросов через WebSocket over SSL.
Пример настройки viz для работы с нодой https://viz.lexa.host/
:
var api_gate='https://viz.lexa.host/';
viz.config.set('websocket',api_gate);
В разделе Плагины и их API были перечислены основные плагины и запросы к ним — все они доступны в библиотеке viz-js-lib. Для того, чтобы выполнить тот или иной запрос, достаточно перевести его название в CamelCase.
Например, если вы решили выполнить запрос get_database_info к плагину database_api, то вам необходимо выполнить код:
viz.api.getDatabaseInfo(function(err,result){
if(!err){
//получен ответ
console.log(result);
}
else{
//ошибка
console.log(err);
}
});
В случае, если запрос требует входных данных, то вы добавляете их в начало вызова. Например, для запроса get_active_paid_subscriptions к плагину paid_subscription_api, необходимо указать пользователя, для которого будет произведен поиск активных платных подписок:
var subscriber='on1x';
viz.api.getActivePaidSubscriptions(subscriber,function(err,result){
if(!err){
//получен ответ
console.log(result);
}
else{
//ошибка
console.log(err);
}
});
Для каждой операции из протокола VIZ существует отдельный метод в библиотеке viz-js-lib, который принимает приватный ключ (для подписи транзакции) и параметры операции. Название операции, аналогично API методам, должно быть переведено в формат CamelCase. Пример кода для трансляции (broadcast) операции account_metadata (запись в блокчейн мета-данных аккаунта):
var regular_key='5K...';//приватный ключ
var user_login='test';//логин аккаунта
var metadata={'name':'Тестовый аккаунт','photo':'https://cdn.pixabay.com/photo/2015/12/06/14/14/tokyo-1079524_960_720.jpg'};
viz.broadcast.accountMetadata(regular_key,user_login,JSON.stringify(metadata),function(err, result){
if(!err){
//транзакция принята публичной нодой
console.log(result);
}
else{
//нода не приняла транзакцию
console.log(err);
}
});
Если вашему приложению не требуется криптография и подпись транзакций, то вы можете использовать нативные средства для json-rpc запросов через js.
Пример для WebSocket соединения:
var api_gate='wss://solox.world/ws';
var latency_start=new Date().getTime();
var latency=-1;
var socket = new WebSocket(api_gate);
socket.onmessage=function(event){
latency=new Date().getTime() - latency_start;
let json=JSON.parse(event.data);
if(json.result){
console.log(json.result);
}
else{
console.log(json.error);
}
socket.close();
}
socket.onopen=function(){
socket.send('{"id":1,"method":"call","jsonrpc":"2.0","params":["database_api","get_dynamic_global_properties",[]]}');
};
Пример для HTTP соединения:
var api_gate='https://viz.lexa.host/';
var latency_start=new Date().getTime();
var latency=-1;
var xhr = new XMLHttpRequest();
xhr.overrideMimeType('text/plain');
xhr.open('POST',api_gate);
xhr.setRequestHeader('accept','application/json, text/plain, */*');
xhr.setRequestHeader('content-type','application/json');
xhr.onreadystatechange = function() {
if(4==xhr.readyState && 200==xhr.status){
latency=new Date().getTime() - latency_start;
console.log(xhr);
let json=JSON.parse(xhr.response);
if(json.result){
console.log(json.result);
}
else{
console.log(json.error);
}
}
}
xhr.send('{"id":1,"method":"call","jsonrpc":"2.0","params":["database_api","get_dynamic_global_properties",[]]}');