Запись в сеть
В предыдущем разделе вы узнали, как читать данные из блокчейна TON. Теперь давайте рассмотрим, как записывать их.
Введение
Это руководство разъяснит вам запись данных в блокчейн TON. Вы научитесь:
- Делать транзакции
- Переводить TON и NFT
Настройка окружения
Сначала посетите страницы установки и установите Node.js и npm для вашей ОС. Проверьте, что установка корректна, выполнив следующие команды:
node -v
npm -v
Версии node
и npm
должны быть по крайней мере v20
и v10
соответственно.
Настройка проекта
Давайте настроим структуру нашего проекта:
- Создайте новый каталог для проекта
- Инициализируйте проект Node.js
- Установите необходимые зависимости
- Инициализируйте конфигурацию TypeScript.
Для этого выполните эти команды в терминале:
mkdir writing-to-ton && cd writing-to-ton
npm init -y
npm install typescript ts-node @ton/ton @ton/core @ton/crypto
npx tsc --init
Для запуска скриптов используйте следующую команду:
npx ts-node script.ts
Отправка TON
Простейшее взаимодействие между двумя аккаунтами в блокчейне TON — это передача монеты TON. Процесс включает подготовку и подписание транзакции, а затем отправку её в блокчейн.
Обычная передача будет выглядеть следующим образом:
В отличие от раздела Чтение из сети, в следующих примерах понадобится ключ Toncenter API. Его можно получить с помощью следующего руководства.
Реализация
Создать новый файл 1-send-ton.ts
:
import { mnemonicToWalletKey } from "@ton/crypto";
import { comment, internal, toNano, TonClient, WalletContractV3R2, WalletContractV4, WalletContractV5R1 } from "@ton/ton";
import { SendMode } from "@ton/core";
async function main() {
// Initializing tonClient for sending messages to blockchain
const tonClient = new TonClient({
endpoint: 'https://testnet.toncenter.com/api/v2/jsonRPC',
apiKey: 'YOUR_API_KEY', //acquire it from: https://t.me/toncenter
});
// Using mnemonic to derive public and private keys
// ATTENTION! Replace on your own mnemonic 24-word phrase that you get from wallet app!
const mnemonic = "swarm trumpet innocent empty faculty banner picnic unique major taste cigar slogan health neither diary monster jar scale multiply result biology champion genuine outside".split(' ');
const { publicKey, secretKey } = await mnemonicToWalletKey(mnemonic);
// Creating wallet depending on version (v5r1 or v4 or V3R2), uncomment which version do you have
const walletContract = WalletContractV5R1.create({ walletId: { networkGlobalId: -3 }, publicKey }); // networkGlobalId: -3 for Testnet, -239 for Mainnet
//const walletContract = WalletContractV4.create({ workchain: 0, publicKey });
//const walletContract = WalletContractV3R2.create({ workchain: 0, publicKey });
// Opening wallet with tonClient, which allows to send messages to blockchain
const wallet = tonClient.open(walletContract);
// Retrieving seqno used for replay protection
const seqno = await wallet.getSeqno();
// Sending transfer
await wallet.sendTransfer({
seqno,
secretKey,
messages: [internal({
to: wallet.address, // Transfer will be made to the same wallet address
body: comment('Hello from wallet!'), // Transfer will contain comment
value: toNano(0.05), // Amount of TON, attached to transfer
})],
sendMode: SendMode.PAY_GAS_SEPARATELY | SendMode.IGNORE_ERRORS,
});
}
main();
Использование API_KEY
в данном случае позволяет получить доступ к функциональности TON через endpoint
. Запустив этот скрипт, мы аутентифицируемся в нашем кошельке через пару публичный/приватный ключ
, созданную из мнемонической фразы
. После подготовки транзакции мы отправили её в TON, в результате чего кошелёк посылает самому себе сообщение с текстом 'Hello from wallet!'.
В большинстве сценариев SendMode.PAY_GAS_SEPARATELY | SendMode.IGNORE_ERRORS
будет работать, но если вы хотите понять глубже, продолжите чтение на странице Рецепты режимов сообщений.
Выполните этот пример, используя следующую команду:
npx ts-node 1-send-ton.ts
Ожидаемый результат
Перейдите в Tonviewer и вставьте свой адрес в строку поиска. Вы должны увидеть перевод TON с комментарием 'Hello from wallet!'.