波场trident实现多重签名
参考
https://github.com/tronprotocol/wallet-cli/blob/develop/src/main/java/org/tron/common/utils/TransactionUtils.java
中的setPermissionId方法
public static Transaction setPermissionId(Transaction transaction, String tipString)
throws CancelException {
if (transaction.getSignatureCount() != 0
|| transaction.getRawData().getContract(0).getPermissionId() != 0) {
return transaction;
}
System.out.println(tipString);
int permission_id = inputPermissionId();
if (permission_id < 0) {
throw new CancelException("User cancelled");
}
if (permission_id != 0) {
Transaction.raw.Builder raw = transaction.getRawData().toBuilder();
Transaction.Contract.Builder contract =
raw.getContract(0).toBuilder().setPermissionId(permission_id);
raw.clearContract();
raw.addContract(contract);
transaction = transaction.toBuilder().setRawData(raw).build();
}
return transaction;
}
在使用trident时,像往常一样获得Transaction对象后,需要增加permission_id参数,然后正常签名并广播
Response.TransactionExtention txnExt = wrapper.freezeBalance(...);
Transaction.raw.Builder raw = txnExt.getTransaction().getRawData().toBuilder();
Transaction.Contract.Builder contract = raw.getContract(0).toBuilder().setPermissionId(4);
raw.clearContract();
raw.addContract(contract);
Transaction transaction = txnExt.getTransaction().toBuilder().setRawData(raw).build();
System.out.println("transaction=" + transaction);
System.out.println("————————————————————————————————————————————————");
Transaction signedTransaction = wrapper.signTransaction(transaction);
System.out.println("signedTransaction=" + signedTransaction);
String hash = wrapper.broadcastTransaction(signedTransaction);