Допис
Діліться своїми знаннями.

Як побудувати складний DApp на Sui Move?
Курс #2: Глибоке занурення в програмування Move - створення складних DApps на Sui
Тепер, коли ви зрозуміли основи програмування Move та розгорнули свій перший смарт-контракт, настав час вивести свої навички на новий рівень. У цій статті ми розглянемо, як побудувати більш складні децентралізовані програми (DApps) за допомогою Move on the Sui blockchain.
Крок 1: Освоєння розширених концепцій Sui Move
Перш ніж зануритися в кодування, давайте переглянемо деякі розширені функції Move, які роблять його унікальним для створення безпечних і масштабованих DApps:
####1. Ресурсоорієнтоване програмування Move розглядає цифрові активи якресурси, гарантуючи, що їх не можна дублювати, ненавмисно видаляти або використовувати неправильно (https://docs.sui.io/learn/resource-oriented-programming). Це досягається за рахунок суворих правил володіння і безпеки типу. Наприклад:
module examples::token {
use sui::object::{Self, UID};
use sui::transfer;
struct Token has key, store {
id: UID,
value: u64,
}
public fun mint(ctx: &mut TxContext, value: u64): Token {
Token {
id: object::new(ctx),
value,
}
}
public fun transfer_token(token: Token, recipient: address) {
transfer::public_transfer(token, recipient);
}
}
У цьому прикладі Token
ресурс створюється і передається надійно. Ресурси в Move за замовчуванням незмінні, якщо вони явно не позначені як змінні, додаючи додатковий рівень безпеки.
####2. Модулі та інкапсуляція Модулі в Move діють як автономні блоки функціональності, що забезпечує кращу організацію та повторне використання. Наприклад, ви можете відокремити логіку створення токенів від логіки передачі на окремі модулі (https://examples.sui.io/modules). Ця модульність забезпечує більш чистий код і простіше обслуговування.
####3. Об'єктно-центричний дизайн
UID
Sui Move представляєоб'єктно-орієнтовану модель, де кожен ресурс має глобально унікальний ідентифікатор (). Це дозволяє здійснювати прямі посилання та взаємодію з об'єктами, що полегшує управління складними переходами станів (https://docs.sui.io/objects).
Крок 2: Написання модульного смарт-контракту
Давайте створимо більш просунутий смарт-контракт, який демонструє ці концепції. Ми створимо простий ринок NFT, де користувачі можуть карбувати та торгувати NFT.
####Визначте ресурс NFT Почніть з визначення ресурсу NFT у модулі Move:
module examples::nft_marketplace {
use sui::object::{Self, UID};
use sui::transfer;
struct NFT has key, store {
id: UID,
name: String,
price: u64,
}
public fun mint_nft(ctx: &mut TxContext, name: String, price: u64): NFT {
NFT {
id: object::new(ctx),
name,
price,
}
}
public fun list_for_sale(nft: NFT, price: u64, ctx: &mut TxContext) {
nft.price = price;
transfer::public_transfer(nft, tx_context::sender(ctx));
}
}
Тут NFT
ресурс включає такі властивості, як name
іprice
. mint_nft
Функція створює новий NFT, водночас list_for_sale
дозволяє користувачам перераховувати свої NFT на продаж.
####Компіляція та розгортання Використовуйте Sui CLI для складання та розгортання контракту. Напишіть скрипт розгортання для автоматизації цього процесу:
sui move build
sui client publish --gas-budget 10000
Це дозволить упакувати та розгорнути ваш модуль у Sui Devnet (https://docs.sui.io/cli).
Крок 3: Створення інтерфейсу React для вашого ринку
З розгорнутим смарт-контрактом давайте підключимо його до інтерфейсу React.
####Налаштування проекту Ініціалізуйте проект React, якщо ви ще цього не зробили:
npx create-react-app nft-marketplace
cd nft-marketplace
npm install @mysten/sui.js
####Інтегруйте з гаманцем Sui
Використовуйте @mysten/sui.js
бібліотеку для взаємодії з блокчейном Sui:
import { JsonRpcProvider, SuiClient } from '@mysten/sui.js';
const provider = new SuiClient({ url: 'https://fullnode.devnet.sui.io' });
async function fetchNFTs(ownerAddress) {
const objects = await provider.getObjectsOwnedByAddress(ownerAddress);
console.log('User NFTs:', objects);
}
####Відображення даних NFT Отримати та відобразити дані NFT у вашому додатку React:
function NFTList({ ownerAddress }) {
const [nfts, setNFTs] = useState([]);
useEffect(() => {
async function loadNFTs() {
const response = await provider.getObjectsOwnedByAddress(ownerAddress);
setNFTs(response.data);
}
loadNFTs();
}, [ownerAddress]);
return (
<div>
{nfts.map((nft) => (
<div key={nft.objectId}>
<p>{nft.name}</p>
<p>Price: {nft.price} SUI</p>
</div>
))}
</div>
);
}
Крок 4: Підвищення безпеки та продуктивності
####1. Безпечні транзакції
Переконайтеся, що всі транзакції підтверджені як в ланцюжку, так і поза ланцюгом. Використовуйте бібліотеки, наприклад, для @mysten/sui.js
перевірки квитанцій транзакцій:
async function verifyTransaction(txDigest) {
const result = await provider.getTransaction({ digest: txDigest });
console.log('Transaction Verified:', result);
}
####2. Оптимізація плати за газ Співпрацюйте з такими послугами, як** Заправка Шамі**, щоб пропонувати безгазові транзакції, покращуючи користувальницький досвід. Крім того, пакетні транзакції для зменшення витрат (https://docs.sui.io/gas-optimization).
####3. Використовуйте масштабованість Sui Архітектура Sui підтримує високу пропускну здатність і низьку затримку, що робить її ідеальною для DApps з інтенсивним використанням. Перевірте свою програму в умовах імітованого навантаження, щоб переконатися, що продуктивність залишається стабільною (https://performance.sui.io).
Крок 5: Тестування та налагодження
Тестування має вирішальне значення для уникнення вразливостей. Використовуйте такі інструменти, як** Sui Explorer** для моніторингу транзакцій та налагодження проблем. Крім того, напишіть блокові тести для ваших модулів Move:
#[test]
fun test_mint_nft() {
use sui::test_scenario;
let ctx = &mut test_scenario::ctx();
let nft = examples::nft_marketplace::mint_nft(ctx, "Test NFT", 100);
assert!(nft.price == 100, 0);
}
Запустіть свої тести за допомогою Sui CLI:
sui move test
Крок 6: Взаємодія зі спільнотою
Створення DApps — це не лише кодування, а й співпраця. Поділіться своїм прогресом на таких платформах, як** GitHub, Discord** або** Twitter**. Беріть участь у хакатонів та викликах розробників, організованих Фондом Суй, щоб вдосконалити свої навички та отримати експозицію.
Висновок
Освоюючи розширені концепції Move, пишете модульні смарт-контракти та створюючи інтуїтивно зрозумілі інтерфейси, ви вже на шляху до того, щоб стати досвідченим розробником DApp на блокчейні Sui. Не забудьте визначити пріоритети безпеки, оптимізувати продуктивність та взаємодіяти зі спільнотою, щоб максимізувати свій вплив.
Слідкуйте за оновлення**Курс #3**, де ми вивчимо реальні випадки використання та передові методи масштабування ваших DApps на Sui!
Якщо ви хочете отримати додаткові роз'яснення або додаткові ресурси, не соромтеся запитати!
- Sui
- Architecture
- Move
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.
- Чому BCS вимагає точного порядку полів для десеріалізації, коли структури Move мають названі поля?53
- Помилки перевірки кількох джерел» у публікаціях модуля Sui Move - автоматичне вирішення помилок43
- Невдала операція Sui: об'єкти, зарезервовані для іншої транзакції25
- Як обмеження здібностей взаємодіють з динамічними полями в гетерогенних колекціях?05