Реализация кошелька на Blockchain Etherium написанный на 1С.
Возможности:
- Получение баланса по приватному ключу.
- Получение гиперссылок на etherscan
- Отправка транзакции(eth)
Планируется:
- Получение данных по токенам Смартконтрактов
- Взаимодействие со Смартконтрактами
- Улучшение Дизайна
- Публикация Смартконтрактов и токенов.
- Сжигание токенов.
- Блокировка токенов.
- Хранение приватных ключей в зашифрованном виде.
итп
Часть кода написана на JavaSript. В виду того что Solidity основан на JavaSrcipt VM, думаю это норма.
За основу взят официальный API Etherium Fundation - docs.ethers
Ограничения кошелек работает в тестовой сети Rinkeby. Может работать и на остальных, но это позже.
Для получения тестовых эфиров в сети Rinkeby используйте сайт https://rinkebyfaucet.com/
Для создания кошелька эфира по мнемонической фразе используйте https://www.myetherwallet.com/
Части кода
Инициализация кошелька:
let privateKey = "0xdc8b766bd5681056438e8f57f04d0b2ed0aa987adaeff3e305a8d4da62150736";
let provider = ethers.getDefaultProvider('rinkeby');
let wallet = new ethers.Wallet(privateKey, provider);
Получение баланса кошелька
let balancePromise = wallet.getBalance();
balancePromise.then((balance) => {
console.log(balance);
});
Отправка транзакции в сеть(Перевод монет и токенов)
let amount = ethers.utils.parseEther('0.000000000001');
//let amount = 1;
let tx = {
to: Reciever_address,
value: amount
};
let sendPromise = wallet.sendTransaction(tx);
sendPromise.then((tx) => {
document.write(JSON.stringify(tx));
console.log(tx);
});
Как мы видим выше, функции выполняются Асинхронно. В 1С этого добиться тяжело даже после того как ввели префикс Асинх. Пришлось использовать обработчики ожидания -
&НаКлиенте
Процедура Баланс()
элементы.ГиперсслкаКошелек.Заголовок = "Получение данных!";
Документ = Элементы.ДокументHTML.Документ;
//Объект.БалансКошелькаETH=АсинхронныеВызовы.БалансАсинхронно(Документ);
Документ.defaultView.Check_balance();
БалансКошелькаETH = Документ.defaultView.async_balance();
Если БалансКошелькаETH="Nll" тогда
ПодключитьОбработчикОжидания("Баланс",1);
иначе
объект.БалансКошелькаETH=БалансКошелькаETH;
ОтключитьОбработчикОжидания("Баланс");
элементы.ГиперсслкаКошелек.Заголовок = Документ.defaultView.GetWallet();
Документ.defaultView.return_OK()
КонецЕсли;
КонецПроцедуры
В связи с чем работа замедляется на 1 - 3 секунды
Всем спасибо.