Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Як за допомогою бібліотеки 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 — тут.

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному2
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі