Skip to content

Commit fc602a0

Browse files
asimm241zone117x
authored andcommitted
refactor: refactor the condition for signed transaction
1 parent 8201448 commit fc602a0

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/api/routes/rosetta/construction.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ import {
1616
import { deserializeTransaction } from '@blockstack/stacks-transactions/lib/transaction';
1717
import { BufferReader } from '@blockstack/stacks-transactions/lib/bufferReader';
1818
import { AddressHashMode } from '@blockstack/stacks-transactions';
19+
import {
20+
isSingleSig,
21+
emptyMessageSignature,
22+
} from '@blockstack/stacks-transactions/lib/authorization';
1923

2024
import { rosettaValidateRequest, ValidSchema, makeRosettaError } from './../../rosetta-validate';
2125
import {
@@ -205,17 +209,26 @@ export function createRosettaConstructionRouter(db: DataStore): RouterWithAsync
205209

206210
const transaction = deserializeTransaction(BufferReader.fromBuffer(buffer));
207211
const hash = transaction.txid();
208-
if (
209-
transaction.auth.spendingCondition?.hashMode == AddressHashMode.SerializeP2PKH ||
210-
transaction.auth.spendingCondition?.hashMode == AddressHashMode.SerializeP2WPKH
211-
) {
212-
const signature = transaction.auth.spendingCondition.signature;
213-
if (parseInt(signature.data, 16) == 0) {
212+
213+
if (!transaction.auth.spendingCondition) {
214+
res.status(400).json(RosettaErrors.transactionNotSigned);
215+
return;
216+
}
217+
if (isSingleSig(transaction.auth.spendingCondition)) {
218+
/**Single signature Transaction has an empty signature, so the transaction is not signed */
219+
if (
220+
!transaction.auth.spendingCondition.signature.data ||
221+
emptyMessageSignature().data === transaction.auth.spendingCondition.signature.data
222+
) {
214223
res.status(400).json(RosettaErrors.transactionNotSigned);
215224
return;
216225
}
217226
} else {
218-
res.status(400).json(RosettaErrors.invalidTransactionString);
227+
/**Multi-signature transaction does not have signature fields thus the transaction not signed */
228+
if (transaction.auth.spendingCondition.fields.length === 0) {
229+
res.status(400).json(RosettaErrors.transactionNotSigned);
230+
return;
231+
}
219232
}
220233

221234
const hashResponse: RosettaConstructionHashResponse = {

0 commit comments

Comments
 (0)