ノードへトランザクションをアナウンス
ノードリクエスト
Catapult.ts
/** パケットタイプ */
private PacketType = {
CHAIN_STATISTICS: 0x0_05,
PUSH_TRANSACTIONS: 0x0_09,
NODE_DISCOVERY_PULL_PING: 0x1_11,
TIME_SYNC_NETWORK_TIME: 0x1_20,
FINALIZATION_STATISTICS: 0x1_32,
UNLOCKED_ACCOUNTS: 0x3_04,
}
/**
* トランザクションアナウンス
* @param payload トランザクションペイロード
*/
async announceTx(payload: Uint8Array): Promise<boolean> {
console.info('announceTx')
try {
await this.request(this.PacketType.PUSH_TRANSACTIONS, payload, false)
} catch {
return false
} finally {
this.close()
}
return true
}
レスポンスデータの解析
レスポンスはありません。
トランザクションのエラー確認は、WebSocket か ZeroMQ の Status を参照する必要があります。
メインの作成
実行するコードを作成します。
ローカルのノードの同期が終わっていない場合は、他のノードにアナウンスしてください。
トランザクションを生成するので、ちょっと長いです。
src/mainNodeInfo.ts
import {
Address,
KeyPair,
Network,
SymbolAccount,
SymbolFacade,
SymbolTransactionFactory,
descriptors,
generateNamespacePath,
models,
} from 'symbol-sdk/symbol'
import { PrivateKey, PublicKey, utils } from 'symbol-sdk'
import { Catapult } from './Catapult.js'
// faced生成
const facade = new SymbolFacade(Network.TESTNET)
// 送信者:アリス
// 秘密鍵からアリスのキーペア生成
const alicePriKey =
'****************************************************************'
const aliceKeyPair = new KeyPair(new PrivateKey(alicePriKey))
const aliceAccount = new SymbolAccount(facade, aliceKeyPair)
// 受信者:ボブ
// 文字列公開鍵からPublicKey生成
const bobPubKey =
'****************************************************************'
const bobPublicKey = new PublicKey(bobPubKey)
// ボブのアドレスを取得
const bobAddress = new Address(facade.network.publicKeyToAddress(bobPublicKey))
// XYMネームスペース取得
const nsIds = generateNamespacePath('symbol.xym')
const nsId = nsIds[nsIds.length - 1]
// 転送モザイク設定
const sendMosaics = [
new descriptors.UnresolvedMosaicDescriptor(
new models.UnresolvedMosaicId(nsId),
new models.Amount(1_000000n)
),
]
// 平文メッセージ
const messageData = new Uint8Array([
0x00,
...new TextEncoder().encode('Hello, Symbol!!'),
])
// 転送トランザクション生成
const transferTxDescriptor = new descriptors.TransferTransactionV1Descriptor(
bobAddress,
sendMosaics,
messageData
)
const transferTx = facade.createTransactionFromTypedDescriptor(
transferTxDescriptor,
aliceKeyPair.publicKey,
100,
60 * 60 * 2
)
// アリス署名
const transferTxSignature = aliceAccount.signTransaction(transferTx)
const transferTxPayloadJson = SymbolTransactionFactory.attachSignature(
transferTx,
transferTxSignature
)
// ////////////////////////
// Peerに直接アナウンス
// ////////////////////////
const catapult = new Catapult(
'cert/ca.crt.pem',
'cert/node.crt.pem',
'cert/node.key.pem',
'localhost'
)
const announceJson = JSON.parse(transferTxPayloadJson)
await catapult.announceTx(utils.hexToUint8(announceJson.payload))
レスポンスはないので、ウォレットでトランザクションがアナウンスされたか確認してください。
バックナンバー