Validate
The validateMneeTx
method validates MNEE transactions to ensure they are properly formatted and authorized by the cosigner. It supports both basic validation (checking if the transaction is well-formed) and deep validation (verifying against expected outputs).
Usage
Basic Validation
const rawtx = '0100000002b170f2d41764c...'; // raw tx hex
const isValid = await mnee.validateMneeTx(rawtx);
console.log('Transaction is valid:', isValid);
Deep Validation (with expected outputs)
const rawtx = '0100000002b170f2d41764c...'; // raw tx hex
const expectedOutputs = [
{ address: 'recipient-1-address', amount: 1 },
{ address: 'recipient-2-address', amount: 10.25 },
];
const isValid = await mnee.validateMneeTx(rawtx, expectedOutputs);
console.log('Transaction matches expected outputs:', isValid);
Parameters
rawTxHex: The raw transaction hex string to validate
request (optional): An array of
SendMNEE
objects representing the expected transfer detailsIf provided: Validates that the transaction matches the specified outputs
If not provided: Only validates that the transaction is well-formed with proper cosigner authorization
Response
Returns a Promise that resolves to a boolean:
true
: The transaction is validfalse
: The transaction is invalid
Common Use Cases
Validate Before Broadcasting
// Create a transaction
const transferRequest = [
{ address: '1Recipient...', amount: 5.5 }
];
const response = await mnee.transfer(transferRequest, wif, { broadcast: false });
// Validate before submitting
const isValid = await mnee.validateMneeTx(response.rawtx);
if (isValid) {
const submitResult = await mnee.submitRawTx(response.rawtx);
console.log('Transaction submitted, ticket ID:', submitResult.ticketId);
// Get transaction ID from status
const status = await mnee.getTxStatus(submitResult.ticketId);
console.log('Transaction ID:', status.tx_id);
} else {
console.log('Transaction validation failed');
}
Verify External Transactions
// Receive a transaction from external source
const externalRawTx = '...'; // raw tx from another wallet/service
// Basic validation
const isWellFormed = await mnee.validateMneeTx(externalRawTx);
console.log('Transaction structure valid:', isWellFormed);
// Parse to see details
if (isWellFormed) {
const parsed = await mnee.parseTxFromRawTx(externalRawTx);
console.log('Transaction details:', parsed);
}
Validate Multi-Recipient Transactions
const expectedTransfers = [
{ address: '1Address1...', amount: 2.5 },
{ address: '1Address2...', amount: 7.3 },
{ address: '1Address3...', amount: 0.2 }
];
// Create transaction with multiple recipients
const response = await mnee.transfer(expectedTransfers, wif, false);
// Validate it matches our expectations
const isValid = await mnee.validateMneeTx(response.rawtx, expectedTransfers);
console.log('Multi-recipient transaction valid:', isValid);
Integration Testing
// Test transaction creation and validation
async function testTransactionCreation() {
const testTransfer = [{ address: testAddress, amount: 0.001 }];
try {
// Create transaction
const tx = await mnee.transfer(testTransfer, testWif, false);
// Validate structure
const basicValid = await mnee.validateMneeTx(tx.rawtx);
assert(basicValid, 'Basic validation should pass');
// Validate outputs
const deepValid = await mnee.validateMneeTx(tx.rawtx, testTransfer);
assert(deepValid, 'Deep validation should pass');
console.log('Transaction validation tests passed');
} catch (error) {
console.error('Validation test failed:', error);
}
}
Validation Checks
The method performs the following validations:
Basic Validation (always performed)
Transaction hex is valid and can be decoded
Transaction has proper MNEE inscription format
Cosigner signature is present and valid
Transaction structure follows MNEE protocol rules
Deep Validation (when request provided)
All specified recipients are present in outputs
Transfer amounts match exactly (in atomic units)
No unexpected outputs (except change and fees)
Total output amounts are correct
Notes
Validation is performed locally without network calls
The cosigner public key is obtained from the MNEE configuration
Amount comparisons are done in atomic units to avoid floating-point issues
Change outputs and fee outputs are automatically accounted for in deep validation
See Also
Transfer - Create MNEE transfers
Submit Raw Transaction - Submit validated transactions
Parse Transaction - Examine transaction details
Last updated