@@ -16,6 +16,10 @@ import {
16
16
import { deserializeTransaction } from '@blockstack/stacks-transactions/lib/transaction' ;
17
17
import { BufferReader } from '@blockstack/stacks-transactions/lib/bufferReader' ;
18
18
import { AddressHashMode } from '@blockstack/stacks-transactions' ;
19
+ import {
20
+ isSingleSig ,
21
+ emptyMessageSignature ,
22
+ } from '@blockstack/stacks-transactions/lib/authorization' ;
19
23
20
24
import { rosettaValidateRequest , ValidSchema , makeRosettaError } from './../../rosetta-validate' ;
21
25
import {
@@ -205,17 +209,26 @@ export function createRosettaConstructionRouter(db: DataStore): RouterWithAsync
205
209
206
210
const transaction = deserializeTransaction ( BufferReader . fromBuffer ( buffer ) ) ;
207
211
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
+ ) {
214
223
res . status ( 400 ) . json ( RosettaErrors . transactionNotSigned ) ;
215
224
return ;
216
225
}
217
226
} 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
+ }
219
232
}
220
233
221
234
const hashResponse : RosettaConstructionHashResponse = {
0 commit comments