@@ -3,21 +3,25 @@ pragma solidity ^0.8.0;
33
44import {QuickSort} from "./libraries/QuickSort.sol " ;
55
6- import {SafeTxDataBuilder, SafeTx, Enum} from "./SafeTxDataBuilder .sol " ;
6+ import "./SignatureScript .sol " ;
77
8- contract ExecTransaction is SafeTxDataBuilder {
8+ contract ExecTransaction is SignatureScript {
99 using QuickSort for address [];
1010
11- address [] signers;
12- bytes [] signatures;
13- mapping (address => bytes ) signatureOf;
14-
1511 function run () public {
1612 SafeTx memory safeTx;
1713 safeTx.data = loadSafeTxData ();
1814
1915 loadSignatures (hashData (safeTx.data));
2016
17+ uint256 nbSignatures = signatures.length ;
18+ require (
19+ nbSignatures >= THRESHOLD,
20+ string .concat (
21+ "Not enough signatures (found: " , vm.toString (nbSignatures), "; expected: " , vm.toString (THRESHOLD), ") "
22+ )
23+ );
24+
2125 signers.sort ();
2226
2327 for (uint256 i; i < signers.length ; ++ i) {
@@ -39,45 +43,4 @@ contract ExecTransaction is SafeTxDataBuilder {
3943 safeTx.signatures
4044 );
4145 }
42-
43- function loadSignatures (bytes32 dataHash ) internal {
44- bytes memory line = bytes (vm.readLine (SIGNATURES_FILE));
45-
46- while (line.length > 0 && signatures.length < THRESHOLD) {
47- parseSignature (dataHash, line);
48-
49- line = bytes (vm.readLine (SIGNATURES_FILE));
50- }
51-
52- uint256 nbSignatures = signatures.length ;
53- require (
54- nbSignatures >= THRESHOLD,
55- string .concat (
56- "Not enough signatures (found: " , vm.toString (nbSignatures), "; expected: " , vm.toString (THRESHOLD), ") "
57- )
58- );
59- }
60-
61- function parseSignature (bytes32 dataHash , bytes memory line ) internal {
62- require (
63- line.length == 132 ,
64- string .concat (
65- "Malformed signature: " , string (line), " (length: " , vm.toString (line.length ), "; expected: 132) "
66- )
67- );
68-
69- bytes memory hexSignature = new bytes (130 );
70- for (uint256 j; j < 130 ; ++ j) {
71- hexSignature[j] = line[j + 2 ];
72- }
73-
74- bytes memory signature = vm.parseBytes (string (hexSignature));
75-
76- (address signer , bytes32 r , bytes32 s , uint8 v ) = decode (dataHash, signature);
77- require (signatureOf[signer].length == 0 , string .concat ("Duplicate signature: " , string (line)));
78-
79- signatureOf[signer] = abi.encodePacked (r, s, v + 4 );
80- signatures.push (signature);
81- signers.push (signer);
82- }
8346}
0 commit comments