2025-12-11 08:13:23 +01:00

41 lines
1.3 KiB
Rust

use ed25519_dalek::{Signer as _, SigningKey};
use nomos_core::mantle::{
MantleTx, Op, OpProof, SignedMantleTx, Transaction as _,
ledger::Tx as LedgerTx,
ops::channel::{ChannelId, MsgId, inscribe::InscriptionOp},
};
use zksign::SecretKey;
/// Builds a signed inscription transaction with deterministic payload for
/// testing.
#[must_use]
pub fn create_inscription_transaction_with_id(id: ChannelId) -> SignedMantleTx {
let signing_key = SigningKey::from_bytes(&[0u8; 32]);
let signer = signing_key.verifying_key();
let inscription_op = InscriptionOp {
channel_id: id,
inscription: format!("Test channel inscription {id:?}").into_bytes(),
parent: MsgId::root(),
signer,
};
let mantle_tx = MantleTx {
ops: vec![Op::ChannelInscribe(inscription_op)],
ledger_tx: LedgerTx::new(vec![], vec![]),
storage_gas_price: 0,
execution_gas_price: 0,
};
let tx_hash = mantle_tx.hash();
let signature = signing_key.sign(&tx_hash.as_signing_bytes());
tracing::debug!(channel = ?id, tx_hash = ?tx_hash, "building inscription transaction");
SignedMantleTx::new(
mantle_tx,
vec![OpProof::Ed25519Sig(signature)],
SecretKey::multi_sign(&[], tx_hash.as_ref()).expect("zk signature generation"),
)
.expect("valid transaction")
}