5252import org .tron .common .utils .BIUtil ;
5353import org .tron .common .utils .ByteArray ;
5454import org .tron .common .utils .ByteUtil ;
55- import org .tron .common .utils .ForkController ;
5655import org .tron .common .utils .Sha256Hash ;
5756import org .tron .common .zksnark .JLibrustzcash ;
5857import org .tron .common .zksnark .LibrustzcashParam ;
5958import org .tron .core .capsule .AccountCapsule ;
6059import org .tron .core .capsule .TransactionCapsule ;
6160import org .tron .core .capsule .WitnessCapsule ;
62- import org .tron .core .config .Parameter ;
6361import org .tron .core .db .TransactionTrace ;
6462import org .tron .core .exception .ZksnarkException ;
6563import org .tron .core .vm .config .VMConfig ;
6664import org .tron .core .vm .program .Program ;
65+ import org .tron .core .vm .program .Program .OutOfTimeException ;
6766import org .tron .core .vm .repository .Repository ;
6867import org .tron .core .vm .utils .FreezeV2Util ;
68+ import org .tron .core .vm .utils .MUtil ;
6969import org .tron .core .vm .utils .VoteRewardUtil ;
7070import org .tron .protos .Protocol ;
7171import org .tron .protos .Protocol .Permission ;
@@ -948,11 +948,12 @@ public Pair<Boolean, byte[]> execute(byte[] rawData) {
948948 for (byte [] sign : signatures ) {
949949 byte [] recoveredAddr = recoverAddrBySign (sign , hash );
950950
951- if (ForkController .instance ().pass (Parameter .ForkBlockVersionEnum .VERSION_4_7_1 )) {
952- sign = recoveredAddr ;
953- }
954- if (ByteArray .matrixContains (executedSignList , sign )) {
955- continue ;
951+ sign = merge (recoveredAddr , sign );
952+ if (ByteArray .matrixContains (executedSignList , recoveredAddr )) {
953+ if (ByteArray .matrixContains (executedSignList , sign )) {
954+ continue ;
955+ }
956+ MUtil .checkCPUTime ();
956957 }
957958 long weight = TransactionCapsule .getWeight (permission , recoveredAddr );
958959 if (weight == 0 ) {
@@ -961,13 +962,17 @@ public Pair<Boolean, byte[]> execute(byte[] rawData) {
961962 }
962963 totalWeight += weight ;
963964 executedSignList .add (sign );
965+ executedSignList .add (recoveredAddr );
964966 }
965967
966968 if (totalWeight >= permission .getThreshold ()) {
967969 return Pair .of (true , dataOne ());
968970 }
969971 }
970972 } catch (Throwable t ) {
973+ if (t instanceof OutOfTimeException ) {
974+ throw t ;
975+ }
971976 logger .info ("ValidateMultiSign error:{}" , t .getMessage ());
972977 }
973978 }
0 commit comments