Допис
Діліться своїми знаннями.
Посібник з транзакцій Sui: від налаштування до виконання та перевірки
Посібник з транзакцій Sui: від налаштування до виконання та перевірки
Якщо вам цікаво про гайки виконання транзакцій на блокчейні Sui і хочете поглиблений практичний посібник, який проведе вас через кожен крок.
У цій статті ми розглянемо весь шлях - від налаштування вашого клієнтського середовища, перевірки об'єктів вашого гаманця, обчислення комісій за газ, до підписання та виконання транзакції та, нарешті, перевірки її деталей.
Давайте розберемо це крок за кроком:
Що робить Суй таким особливим? 🔥
Sui пропонує високооптимізовану платформу для децентралізованих додатків (DApps) та смарт-контрактів. Його елегантний дизайн в управлінні комісіями за газ та логікою транзакцій робить його захоплюючим майданчиком для розробників, які прагнуть розширити межі технології Web3.
№2. Початок роботи: Налаштування середовища та конфігурація гаманця ⚙️
2.1. Налаштування середовища клієнта Sui
Перш ніж зануритися в транзакції, переконайтеся, що ваш клієнт Sui правильно налаштований. Sui підтримує кілька мереж (devnet, mainnet, testnet), і ви можете перевірити, яка з них активна за допомогою команди нижче:
➜ sui client envs
╭─────────┬─────────────────────────────────────┬────────╮
│ alias │ url │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ devnet │ https://fullnode.devnet.sui.io:443 │ │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │ │
│ testnet │ https://fullnode.testnet.sui.io:443 │ * │
╰─────────┴─────────────────────────────────────┴────────╯
Це підтверджує, що ви підключені до testnet. Перебування в правильній мережі - це перший крок до успішної транзакції.
2.2. Перевірка активного гаманця
Далі перевірте свою активну адресу гаманця. Це має вирішальне значення, оскільки кожна транзакція пов'язана з ідентифікацією вашого гаманця:
➜ sui client active-address
0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73
2.3. Запит на об'єкти, що належать
Використовуючи API Suix_GetOwnEdObjects, ви можете отримати деталі про об'єкти (наприклад, монети), якими ви володієте, на блокчейні. Ця команда допомагає перевірити баланс вашого рахунку та активи, доступні для транзакцій:
{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getOwnedObjects",
"params": [
"0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
{
"filter": {
"MatchAll": [
{
"StructType": "0x2::coin::Coin<0x2::sui::SUI>"
}
]
},
"options": {
"showType": true,
"showOwner": true,
"showPreviousTransaction": true
}
}
]
}
Цей крок є життєво важливим для перевірки того, що у вашому гаманці є необхідні монети (в даному випадку монети SUI), перш ніж робити будь-які транзакції.
№3. Розрахунок газу: Бюджетування транзакційних витрат 💸
Газ - це паливо, яке забезпечує транзакції блокчейну. Важливо розуміти як ціну на газ, так і бюджет газу, щоб уникнути збоїв у транзакціях.
3.1. Підвищення ціни на газ
Поточну ціну газу можна отримати за допомогою виклику API SUIX_getReferenceGasPrice:
{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getReferenceGasPrice",
"params": []
}
Якщо API повертає «1000", це означає, що кожна одиниця газу коштує 1000 MIST. Пам'ятайте, що 1 SUI дорівнює 10 ^ 9 MIST, тому навіть невеликі цифри в MIST можуть скластися під час складання бюджету.
3.2. Встановлення бюджету на газ
Ваш бюджет газу - це максимальна кількість газу (у MIST), яку ви готові витратити. Для нашого прикладу, припустимо, ваш бюджет газу становить 4964000 MIST. Загальна вартість транзакції зазвичай обчислюється як:
Загальна вартість = Вартість обчислення+вартість зберігання - знижка на зберігання
Наприклад: • Вартість обчислення: 1 000 000 MIST • Вартість зберігання: 2,964,000 MIST • Знижка на зберігання: 978,120 MIST
Отже, чиста вартість стає 1 000 000 + 2 964 000 - 978 120 = 2 985 880 МІСТ.
Точне встановлення бюджету газу гарантує, що ваша транзакція має достатньо коштів для успішного виконання.
№4. Створення транзакції: сухий біг для впевненості 🔧
Перш ніж надсилати реальну транзакцію, найкраще запустити «сухий пробіг», щоб виявити будь-які потенційні проблеми. Це дозволяє перевірити логіку транзакцій, не витрачаючи жодного газу.
4.1. Побудова транзакції сухого запуску
Ось зразок функції TypeScript, яка демонструє, як підготувати та виконати транзакцію сухого запуску. У цьому коді описано, як розділити монети та підготувати операції з переказу:
export const signSuiDryRunTransaction = async (requestParams: SignDryRequestParams): Promise<string> => {
const { gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const tx = newTransaction();
// Configure gas payment, price, and sender
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setSender(keypair.toSuiAddress());
// Split coins based on each recipient's amount
const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
// Build and sign the transaction with the client
const client = newSuiClient({ url: getFullnodeUrl(network) });
const bytes = await tx.build({ client });
const { signature } = await keypair.signTransaction(bytes);
await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });
return JSON.stringify([toBase64(bytes), signature]);
};
Цей крок сухого запуску має вирішальне значення для того, щоб кожна деталь була правильною, перш ніж вкладати реальні кошти.
№5. Підписання та виконання транзакції: об'єднання всього ✍️
Після успішного сухого запуску наступним кроком є підписання та відправка транзакції на блокчейні.
5.1. Підписання транзакції
Нижче наведено уточнений приклад функції, яка підписує угоду із зазначеним бюджетом газу:
const signSuiTransaction = async (requestParams: SignRequestParams): Promise<string> => {
const { gasBudget, gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const tx = newTransaction();
// Set up gas parameters, including the gas budget
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setGasBudget(gasBudget);
tx.setSender(keypair.toSuiAddress());
// Split coins for each recipient
const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
// Build the transaction and sign it
const client = newSuiClient({ url: getFullnodeUrl(network) });
const bytes = await tx.build({ client });
const { signature } = await keypair.signTransaction(bytes);
await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });
return JSON.stringify([toBase64(bytes), signature]);
};
Ця функція інтегрує всі необхідні параметри, включаючи дані про газ та одержувачів, гарантуючи надійне підписання вашої транзакції та готовність до виконання.
5.2. Виконання транзакції
Після підписання транзакція надсилається в блокчейн за допомогою кінцевої точки API SUI_ExecuteTransactionBlock:
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_executeTransactionBlock",
"params": [
"<base64-encoded-transaction>",
["<signature>"],
{
"showInput": true,
"showRawInput": true,
"showEffects": true,
"showEvents": true,
"showObjectChanges": true,
"showBalanceChanges": true
},
"WaitForLocalExecution"
]
}'
Цей виклик повертає детальну відповідь JSON з такою інформацією, як дайджест транзакцій, споживання газу, модифікації об'єктів та оновлення балансу.
№6. Перевірка вашої транзакції: Перевірте все 🔍
Після виконання транзакції важливо переконатися, що все виконано, як очікувалося.
6.1. Перевірка браузера
Ви можете перевірити свою транзакцію на блокчейн-провіднику, наприклад Suivision Testnet Explorer. Провідник відображає всі деталі транзакції в інтуїтивно зрозумілому візуальному форматі, що полегшує виявлення будь-яких проблем.
6.2. Перевірка командного рядка
Для більш детального аудиту скористайтеся командним рядком:
sui client tx-block -- 3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD
Ця команда забезпечує вичерпну розбивку транзакції, включаючи реквізити відправника, платіж за газ, зміни об'єкта та статус виконання.
№7. Аналіз відповіді JSON: розуміння шарів транзакції
Давайте розпакуємо відповідь JSON, яку ви отримаєте після виконання транзакції:
7.1. Огляд транзакцій
- jsonrpc & id: Стандартні поля для протоколу JSON-RPC.
- дайджест: Унікальний хеш транзакції (наприклад, «3fOPudy5qzkm1klrfzcdi8lynadym9j15navxzuH6nyd»), який використовується для відстеження.
- TimeStamps & checkpoint: Надайте контекст щодо того, коли транзакція була виконана, та контрольну точку блокчейну в цей момент.
7.2. Зміст транзакції
- Дані відправника та газу: включає адресу відправника та всі конфігурації, пов'язані з газом (оплата, ціна, бюджет).
- Операції (транзакції): Логіка транзакцій включає такі операції, як:
- SplitCoins: Розбивання газової монети на менші частини.
- TransferObjects: переміщення сегментів монет на вказані адреси одержувачів.
- Підписи: Криптографічні підписи (кодовані Base64) забезпечують автентичність транзакції.
7.3. Ефекти виконання
- Статус: статус «успіх» підтверджує, що транзакція була оброблена без помилок.
- Використання газу: Детально описує витрати на обчислення та зберігання разом із будь-якими відповідними знижками.
- Зміни об'єктів: Визначає, які об'єкти були змінені, створені або оновлені в результаті транзакції.
- Залежності: перераховує пов'язані хеші транзакцій, від яких залежить ця транзакція.
Ця детальна розбивка має важливе значення для налагодження та підвищення продуктивності DApp.
№8. Практична інформація для розробників: поради та висновки
Розуміння кожного кроку цього процесу дає вам навички створення безпечних, ефективних програм Web3 на Sui. Ці відомості не тільки допомагають вирішити проблеми, але й дають вам змогу впевнено впроваджувати інновації в екосистемі Sui.
- Sui
- SDKs and Developer Tools
- Transaction Processing
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.