Як за допомогою бібліотеки Nethereum задеплоїти смарт-контракт
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Всім привіт! Ця стаття присвячена взаємодії мови розробки смарт-контрактів Solidity та мови C#.
На моєму поточному проекті мені потрібно було задеплоїти смарт-контракт через використання backend-функціоналу.
У цій статті ми напишемо простий код мовою Solidity, транслюємо його в код C# з використанням бібліотеки Nethereum, і задеплоїмо його в мережу.
Я буду використовувати тест-нет від Nethereum, але ви можете вибрати будь-який інший. У цій статті буде інструкція саме для нього.
Стаття передбачає, що у вас є базові навички володіння мовами C# і Solidity.
Вам знадобиться встановлений Visual Studio Code.
Що це за бібліотека Nethereum
Nethereum — це бібліотека інтеграції .NET для Ethereum, що спрощує керування смарт-контрактами та взаємодію з вузлами Ethereum.
Nethereum дозволяє генерувати класи .NET (C#, Vb.Net та F#) з результатів компіляції смарт-контрактів (ABI та Bin).
Підготовка робочого середовища
Першим кроком буде встановлення бібліотеки Nethereum для Visual Studio Code за допомогою команди:
dotnet add package Nethereum.Web
Також нам потрібно встановити розширення для роботи з мовою Solidity:
Лінк на розширення для Visual Studio Code
Напишемо простий смарт-контракт, який у майбутньому буде представлений кодом на C#
Наприклад, я візьму простий смарт-контракт, що реалізує взаємодію зі змінною.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract TestContract {
uint256 private value = 0;
function getValue() public view returns(uint256) {
return value;
}
function setValue(uint256 newValue) public {
value = newValue;
}
}
Натискаємо праву кнопку миші та вибираємо
«Solidity: Compile and Code generate for CSharp contract definition».
Термінал нам повідомляє про бажаний Success. Тобто я скомпілював контракт і на основі його байт-коду і abi файлу був згенерований код на C#.
Переходимо в корінь папки, де розміщено смарт-контракт.
Нас цікавить папка під назвою нашого контракту.
Створюємо проєкт, у якому плануємо працювати на платформі .NET і переміщуємо туди згенерований код.
Отримуємо ось таку ієрархію у створеному проєкті, де останні два були згенеровано Nethereum.
Розберемося з тим, що є зараз у нашому проєкті
TestContractDefinitian.cs — класи, що описують поля та методи вашого смарт-контракту
TestContractService.cs — клас, що дозволяє взаємодіяти з TestContractDefinitian.cs. А також деплоїти, що нам власне і потрібно.
В якості тест-нету я скористаюся рішенням від Nethereum, даними для доступу до якого лежать у відкритому доступі. Але можна використувати і такі як Rinkeby, Ropsten, Kovan, Goerli та інші тест-нети.
Повертаємось до нашого коду. У Program.cs підключимо бібліотеки
Nethereum.Web3, Nethereum.Web3.Accounts
using Nethereum.Web3;
using Nethereum.Web3.Accounts;
var privateKey = ""; //Приватний ключ в тестовій мережі
var chainId = 444444444500; //Ключ-айді тестової мережі
var testNetUrl = "http://testchain.nethereum.com:8545"; //Посилання на мережу
var account = new Account(privateKey, chainId); //сторюємо аккаунт
var web3 = new Web3(account, testNetUrl);
var testContract = new TestContractDeployment(TestContractDeploymentBase.BYTECODE); //екземпляр класу, що представляє контракт
var transaction = await web3.Eth.GetContractDeploymentHandler<TestContractDeployment>().SendRequestAndWaitForReceiptAsync(testContract);
Console.WriteLine(transaction.ContractAddress);
При компіляції коду ми отримуємо адресу контракту, який успішно змогли розгорнути в тестовій мережі:
Дякую за увагу, із задоволенням прийму конструктивну критику.
Посилання на документацію Nethereum — тут.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів