@@ -381,6 +381,44 @@ test "signTx" {
381
381
try std .testing .expectEqualSlices (u8 , & expected_tx_raw , & tx_raw );
382
382
}
383
383
384
+ test "signTxSequence" {
385
+ const allocator = std .testing .allocator ;
386
+ const prevout = Output { .txid = "7fba14cf89b33828d415a259371005dcf78f1872fb9a27428317190998aba527" .* , .vout = 0 , .amount = 100000000 };
387
+ const input = try TxInput .init (allocator , prevout , "" , 4294967293 );
388
+ defer input .deinit ();
389
+ var inputs = [1 ]TxInput {input };
390
+ const scriptpubkey_hex = "001484ac03e34560097ebf22214c4c94311553e1b576" .* ;
391
+ var scriptpubkey : [22 ]u8 = undefined ;
392
+ _ = try std .fmt .hexToBytes (& scriptpubkey , & scriptpubkey_hex );
393
+ const output = try TxOutput .init (allocator , 99999000 , & scriptpubkey );
394
+ var outputs = [1 ]TxOutput {output };
395
+ var tx = try createTx (allocator , & inputs , & outputs );
396
+ defer tx .deinit ();
397
+
398
+ const map_key : [72 ]u8 = "7fba14cf89b33828d415a259371005dcf78f1872fb9a27428317190998aba52700000000" .* ;
399
+ const privkey_hex : [64 ]u8 = "90d8ee77d3a4e91f68c49e06607c274f35e8403d907aaf1ed697a6c3f3940924" .* ;
400
+ var privkey : [32 ]u8 = undefined ;
401
+ _ = try std .fmt .hexToBytes (& privkey , & privkey_hex );
402
+ var privkeys = std .AutoHashMap ([72 ]u8 , [32 ]u8 ).init (allocator );
403
+ defer privkeys .deinit ();
404
+ try privkeys .put (map_key , privkey );
405
+
406
+ const pubkey = bip32 .generatePublicKey (privkey );
407
+ var pubkeys = std .AutoHashMap ([72 ]u8 , bip32 .PublicKey ).init (allocator );
408
+ defer pubkeys .deinit ();
409
+ try pubkeys .put (map_key , pubkey );
410
+
411
+ try signTx (allocator , & tx , privkeys , pubkeys , nonceFnRfc6979 );
412
+
413
+ const expected_raw_tx = "020000000001017fba14cf89b33828d415a259371005dcf78f1872fb9a27428317190998aba5270000000000fdffffff0118ddf5050000000016001484ac03e34560097ebf22214c4c94311553e1b57602483045022100fb95b36c2bb30eb89ac7239fa0268e6d099f2fd95ef9277ed12116499b62e899022000d4ce7a39fa4edc84aacb80785bc7d1510683fbd3edb975cc6cb2f1e8f138370121036289e37d0a17017896431dbdee2ec315d403d3bc1ed58c5dc126d5c72caa281400000000" ;
414
+ var buffer : [192 ]u8 = undefined ;
415
+ try encodeTx (allocator , & buffer , tx , true );
416
+ var signed_raw_tx_hex : [384 ]u8 = undefined ;
417
+ _ = try std .fmt .bufPrint (& signed_raw_tx_hex , "{x}" , .{std .fmt .fmtSliceHexLower (& buffer )});
418
+
419
+ try std .testing .expectEqualStrings (expected_raw_tx , & signed_raw_tx_hex );
420
+ }
421
+
384
422
pub fn decodeRawTx (allocator : std.mem.Allocator , tx_raw : []const u8 ) ! Transaction {
385
423
var bytes : []u8 = try allocator .alloc (u8 , tx_raw .len / 2 );
386
424
_ = try std .fmt .hexToBytes (bytes , tx_raw );
0 commit comments