Skip to content

Commit 6b7c139

Browse files
committed
feat(actuator): include pq signatures in getTransactionSignWeight
1 parent 26e37e3 commit 6b7c139

2 files changed

Lines changed: 25 additions & 7 deletions

File tree

actuator/src/main/java/org/tron/core/utils/TransactionUtil.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.tron.api.GrpcAPI.TransactionExtention;
3838
import org.tron.api.GrpcAPI.TransactionSignWeight;
3939
import org.tron.api.GrpcAPI.TransactionSignWeight.Result;
40+
import org.tron.common.math.StrictMathWrapper;
4041
import org.tron.common.parameter.CommonParameter;
4142
import org.tron.common.utils.Sha256Hash;
4243
import org.tron.core.ChainBaseManager;
@@ -221,11 +222,24 @@ public TransactionSignWeight getTransactionSignWeight(Transaction trx) {
221222
}
222223
}
223224
tswBuilder.setPermission(permission);
224-
if (trx.getSignatureCount() > 0) {
225+
if (trx.getSignatureCount() > 0 || trx.getPqAuthSigCount() > 0) {
225226
List<ByteString> approveList = new ArrayList<>();
226-
long currentWeight = TransactionCapsule.checkWeight(permission, trx.getSignatureList(),
227-
Sha256Hash.hash(CommonParameter.getInstance()
228-
.isECKeyCryptoEngine(), trx.getRawData().toByteArray()), approveList);
227+
long currentWeight = 0L;
228+
if (trx.getSignatureCount() > 0) {
229+
currentWeight = TransactionCapsule.checkWeight(permission, trx.getSignatureList(),
230+
Sha256Hash.hash(CommonParameter.getInstance()
231+
.isECKeyCryptoEngine(), trx.getRawData().toByteArray()), approveList);
232+
}
233+
if (trx.getPqAuthSigCount() > 0) {
234+
java.util.Set<ByteString> signedAddresses = new java.util.HashSet<>(approveList);
235+
try {
236+
currentWeight = StrictMathWrapper.addExact(currentWeight,
237+
TransactionCapsule.validatePQSignature(trx, permission, signedAddresses,
238+
chainBaseManager.getDynamicPropertiesStore(), approveList));
239+
} catch (ArithmeticException e) {
240+
throw new PermissionException("weight overflow");
241+
}
242+
}
229243
tswBuilder.addAllApprovedList(approveList);
230244
tswBuilder.setCurrentWeight(currentWeight);
231245
}

chainbase/src/main/java/org/tron/core/capsule/TransactionCapsule.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ public static boolean validateSignature(Transaction transaction,
504504
try {
505505
weight = StrictMathWrapper.addExact(weight,
506506
validatePQSignature(transaction, permission, signedAddresses,
507-
dynamicPropertiesStore));
507+
dynamicPropertiesStore, approveList));
508508
} catch (ArithmeticException e) {
509509
throw new PermissionException("weight overflow");
510510
}
@@ -723,9 +723,10 @@ void logSlowSigVerify(long startNs) {
723723
* part of {@code raw_data}.</li>
724724
* </ol>
725725
*/
726-
static long validatePQSignature(Transaction transaction, Permission permission,
726+
public static long validatePQSignature(Transaction transaction, Permission permission,
727727
java.util.Set<ByteString> signedAddresses,
728-
DynamicPropertiesStore dynamicPropertiesStore)
728+
DynamicPropertiesStore dynamicPropertiesStore,
729+
List<ByteString> approveList)
729730
throws PermissionException {
730731
byte[] digest = computeRawHash(transaction).getBytes();
731732

@@ -770,6 +771,9 @@ static long validatePQSignature(Transaction transaction, Permission permission,
770771
} catch (ArithmeticException e) {
771772
throw new PermissionException("weight overflow");
772773
}
774+
if (approveList != null) {
775+
approveList.add(addrBs);
776+
}
773777
}
774778
return weight;
775779
}

0 commit comments

Comments
 (0)