- Сайт проекта http://descheduler.com
- Проект позволяет вызывать указанные функции в смарт контрактах в указанное время
- Доступ ко всем функциям сайта имеет только зарегистрированный пользователь.
Пример использования: Для правильного функционирования работы сайта http://cryptopoll.me необходимо проводить завершение раунда.
После завершения раунда происходит следующее:
- Среди участников распределяется вознаграждение
- Текущий опрос завершается
- Начинается новый опрос
Для реализации завершения раунда в смарт контракте предусмотрен метод executeRound(). Для автоматического вызова этого метода можно использовать данный сервис. Для этого необходимо сделать следующее:
- Перейти на сайт http://descheduler.com и зарегистрироваться
- На главой странице нажать кнопку "Добавить задачу" и заполнить все параметры задачи:
- ApiKey - ваш API ключ. При регистрации на сайте http://descheduler.com вам автоматически присваивается уникальный ключ. Найти ключ можно в личном кабинете (Menu - My account - Personal data)
- Name - наименование задачи.
- Network - сеть, в которой находится ваш смарт контракт. Может принимать одно из трех значений: "CreditsNetwork", "DevsDappsTestnet" или "testnet-r4_2".
- Method - публичный метод в смарт контракте, который вы собираетесь вызывать в запланированное время. Например: "executeRound". Указывается без скобок.
- Address - адрес смарт контракта. Например: "GVGAFSYAsTSfnnAZuHzHL43q9UpbvpEZzKn2VmfaMcEH".
- ExecutionMode - периодичность с которой будет вызываться вышеуказанные метод (Method) в смарт контракте. Может принимать одно из четырех значений:
- Regular - задача будет выполняться регулярно
- Once - задача будет выполнена единожды в строго указанное время
- InSeconds - задача будет выполнена единожды через указанное количество секунд с момента выполнения запроса. Количество секунд указывается в параметре InSecondsValue
- CronExpression - выражение в формате Cron. Например: "0,11 0,2,34 0,15 6 APR ? *". Данное выражение можно сформировать автоматически, используя какой-либо онлайн-сервис, например, freeformatter.com
Передача других параметров зависит от того какой ExecutionMode используется.
Вариант 1. Если ExecutionMode="Regular", то необходимо передать еще 4 параметра:
- RegularDateFrom - дата начала выполнения в формате "ММ-ДД-ГГГГ-ЧЧ-ММ-СС". Тип строка.
- RegularDateTo - дата окончания выполнения в формате "ММ-ДД-ГГГГ-ЧЧ-ММ-СС". Тип строка.
- RegularPeriod - периодичность. Может принимать 1 из трех значений: "Days", "Hours" или "Minutes". Тип строка.
- RegularValue - частота выполнения. Тип строка. Целочисленное значение. Например: 1, 3, 5, 10.
- OnceDate - дата выполнения в формате "ММ-ДД-ГГГГ-ЧЧ-ММ-СС"
- InSecondsValue - количество секунд через которое необходимо выполнить задание. Отсчет начинается с момента вызова данного запроса. Например, если InSecondsValue=60, то задание будет выполнено через 1 минуту после выполнения запроса.
- CronExpression - выражение в формате Cron
Пример 1. Метод executeRound в смарт контракте по адресу GVGAFSYAsTSfnnAZuHzHL43q9UpbvpEZzKn2VmfaMcEH будет вызываться с 1-го января по 31-е декабря каждые 3 часа, начиная с 01:01:01.
let model = new Object();
model.ApiKey = <YourApiKey>;
model.Name = "Test1";
model.Network = 'DevsDappsTestnet'; //CreditsNetwork or testnet-r4_2 or DevsDappsTestnet
model.Method = 'executeRound';
model.Address = GVGAFSYAsTSfnnAZuHzHL43q9UpbvpEZzKn2VmfaMcEH;
model.ExecutionMode = 'Regular';
model.RegularDateFrom = '01-01-2019-01-01-01';
model.RegularDateTo = '12-31-2019-23-59-59';
model.RegularPeriod = 'Hours';
model.RegularValue = '3';
$.ajax({
type: "POST",
url: "http://descheduler.com/Api/AddNewTask",
data: JSON.stringify(model),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response.IsSuccess) {
alert('Action completed!');
} else {
alert('Error: ' + response.Message);
}
}
});
Пример 2. Метод executeRound будет вызван единожды 31 декабря в 23:59:59
let model = new Object();
model.ApiKey = <YourApiKey>;
model.Name = "Test2";
model.Network = 'DevsDappsTestnet'; //CreditsNetwork or testnet-r4_2 or DevsDappsTestnet
model.Method = 'executeRound';
model.Address = GVGAFSYAsTSfnnAZuHzHL43q9UpbvpEZzKn2VmfaMcEH;
model.ExecutionMode = 'Once';
model.OnceDate = '12-31-2019-23-59-59';
$.ajax({
type: "POST",
url: "http://descheduler.com/Api/AddNewTask",
data: JSON.stringify(model),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response.IsSuccess) {
alert('Action completed!');
} else {
alert('Error: ' + response.Message);
}
}
});
Пример 3. Метод executeRound будет вызываться согласно расписанию, закодированному в формате cron
let model = new Object();
model.ApiKey = <YourApiKey>;
model.Name = "Test3";
model.Network = 'DevsDappsTestnet'; //CreditsNetwork or testnet-r4_2 or DevsDappsTestnet
model.Method = 'executeRound';
model.Address = GVGAFSYAsTSfnnAZuHzHL43q9UpbvpEZzKn2VmfaMcEH;
model.ExecutionMode = 'CronExpression';
model.CronExpression = '0,11 0,2,34 0,15 6 APR ? *';
$.ajax({
type: "POST",
url: "http://descheduler.com/Api/AddNewTask",
data: JSON.stringify(model),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response.IsSuccess) {
alert('Action completed!');
} else {
alert('Error: ' + response.Message);
}
}
});
Пример 4. Метод executeRound будет вызыван один раз через 15 минут после создания задачи.
let model = new Object();
model.ApiKey = <YourApiKey>;
model.Name = "Test4";
model.Network = 'DevsDappsTestnet'; //CreditsNetwork or testnet-r4_2 or DevsDappsTestnet
model.Method = 'executeRound';
model.Address = GVGAFSYAsTSfnnAZuHzHL43q9UpbvpEZzKn2VmfaMcEH;
model.ExecutionMode = 'InSeconds';
model.InSecondsValue = '900'; //15 мин * 60 сек в 1 мин = 900 сек
$.ajax({
type: "POST",
url: "http://descheduler.com/Api/AddNewTask",
data: JSON.stringify(model),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response.IsSuccess) {
alert('Action completed!');
} else {
alert('Error: ' + response.Message);
}
}
});
- Network - может быть одним из трех значений: 'CreditsNetwork' или 'testnet-r4_2' или 'DevsDappsTestnet'
- PublicKey - публичный ключ вашего кошелька
- PrivateKey - приватный ключ вашего кошелька
- JavaCode - java код вашего смарт контракта
В ответе будет возвращен json-объект с 3-мя параметрами:
- IsSuccess - если смарт контракт добавлен, то значение равно true, иначе false
- Address - если смарт контракт добавлен, то значение будет содержать адрес контракта
- Message - если смарт контракт добавлен, то значение равно 'Ok', иначе описание ошибки
Пример запроса:
let model = new Object();
model.Network = 'CreditsNetwork'; //CreditsNetwork or testnet-r4_2 or DevsDappsTestnet
model.PublicKey = '<your public key>';
model.PrivateKey = '<your private key>';
model.JavaCode = '' +
'import com.credits.scapi.annotations.Getter;' +
'import com.credits.scapi.v0.SmartContract;' +
'import com.google.gson.*;' +
'public class CryptoBattle extends SmartContract' +
'{' +
' public String payable(BigDecimal amount, byte[] userData)' +
' ...' +
' ...' +
'}';
$.ajax({
type: "POST",
url: "http://descheduler.com/Api/DeploySmartContract",
data: JSON.stringify(model),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response.IsSuccess) {
alert('Smart contract address: ' + response.Address);
} else {
alert('Error: ' + response.Message);
}
}
});