Установка и использование платформы

Создание и отправка транзакций при помощи JS SDK

Принципы создания транзакции

Вызов любой транзакции осуществляется при помощи функции Waves.API.Transactions.<ИМЯ_ТРАНЗАКЦИИ>.<ВЕРСИЯ_ТРАНЗАКЦИИ>.

Например, так выглядит вызов транзакции для перевода токенов 3 версии:

const tx = Waves.API.Transactions.Transfer.V3(txBody);

txBody – тело транзакции, содержащее необходимые параметры. К примеру, для вышеуказанной транзакции Transfer оно может выглядеть так:

const tx = Waves.API.Transactions.Transfer.V3(txBody);

{
  "sender": "3M6dRZXaJY9oMA3fJKhMALyYKt13D1aimZX",
  "password": "",
  "recipient": "3M6dRZXaJY9oMA3fJKhMALyYKt13D1aimZX",
  "amount": 40000000000,
  "fee": 100000
}

Тело транзакции можно оставить пустым и заполнить необходимые параметры позднее при помощи обращения к переменной, в которую возвращается результат функции вызова транзакции (в примере – переменная tx):

const tx = Waves.API.Transactions.Transfer.V3({});
tx.recipient = '12afdsdga243134';
tx.amount = 10000;
//...
tx.sender = "3M6dRZXaJY9oMA3fJKhMALyYKt13D1aimZX";
//...
tx.amount = 40000000000;
tx.fee = 10000;

Такой способ вызова транзакции позволяет более гибко производить числовые операции в коде и пользоваться отдельными функциями для определения тех или иных параметров.

Транзакции 3, 13, 14 и 112 используют текстовое поле description, а транзакции 4 и 6 – текстовое поле attachment. Сообщения, отправляемые в этих полях транзакций, перед отправкой необходимо перевести в формат base58. Для этого в JS SDK предусмотрены две функции:

  • base58.encode – перевод текстовой строки в формат base58;

  • base58.decode – обратная расшифровка строки в формате base58 в текст.

Пример тела транзакции с применением base58.encode:

const txBody = {
  recipient: seed.address,
  assetId: '',
  amount: 10000,
  fee: minimumFee[4],
  attachment: Waves.tools.base58.encode('Examples transfer attachment'),
  timestamp: Date.now()
}

const tx = Waves.API.Transactions.Transfer.V3(txBody);

Внимание

При вызове транзакций при помощи JS SDK вам требуется заполнить все необходимые параметры тела транзакции, кроме type, version, id, proofs и senderPublicKey. Эти параметры заполняются автоматически при генерации пары ключей (keyPair).

Описание параметров, входящих в тело каждой транзакции, см. в разделе Описание транзакций.

Отправка транзакции

Для отправки транзакции в сеть посредством JS SDK используется метод broadcast:

await tx.broadcast(seed.keyPair);

Этот метод вызывается после создания транзакции и заполнения ее параметров. Результат его выполнения может быть присвоен переменной для отображения результата отправки транзакции в сеть (в примере – переменная result):

try {
    const result = await tx.broadcast(seed.keyPair);
    console.log('Broadcast PolicyCreate result: ', result)
} catch (err) {
    console.log('Broadcast error:', err)
}

Ниже приведен полный листинг вызова транзакции перевода токенов и ее отправки:

Примеры вызова и отправки других транзакций см. в разделе Примеры использования JavaScript SDK.

Дополнительные методы, доступные при создании и отправке транзакции

Помимо метода broadcast, для отладки и определения параметров транзакции доступны следующие методы:

  • isValid – проверка тела транзакции, возвращает 0 или 1;

  • getErrors – возвращает строковый массив, содержащий описание ошибок, допущенных при заполнении полей;

  • getSignature – возвращает строку с ключом, которым была подписана транзакция;

  • getId – возвращает строку с идентификатором отправляемой транзакции;

  • getBytes – внутренний метод, который возвращает массив байт для подписания.