when I send tx but catch this message "Don't know how to sign for this kind of scriptPubKey",I don't know what happen I
hope someone help me,my code is:
public String sign(String fromAddress, String toAddress, String privateKey, long amount, long fee, List<UTXO> utxos) throws Exception {
NetworkParameters networkParameters = MainNetParams.get();
Transaction transaction = new Transaction(networkParameters);
String changeAddress = fromAddress;//找零地址
Long changeAmount = 0L;
Long utxoAmount = 0L;
List<UTXO> needUtxos = new ArrayList<UTXO>();
if (utxos == null || utxos.size() == 0) {
throw new Exception("未消费列表为空");
}
//遍历未花费列表,组装合适的item
for (UTXO utxo : utxos) {
if (utxoAmount >= (amount + fee)) {
break;
} else {
needUtxos.add(utxo);
utxoAmount += utxo.getValue().value;
}
}
transaction.addOutput(Coin.valueOf(amount), LegacyAddress.fromBase58(networkParameters, toAddress));
//消费列表总金额 - 已经转账的金额 - 手续费 就等于需要返回给自己的金额了
changeAmount = utxoAmount - (amount + fee);
//余额判断
if (changeAmount < 0) {
throw new Exception("utxo余额不足");
}
//输出-转给自己(找零)
if (changeAmount > 0) {
transaction.addOutput(Coin.valueOf(changeAmount), LegacyAddress.fromBase58(networkParameters, changeAddress));
}
//输入未消费列表项
DumpedPrivateKey dumpedPrivateKey = DumpedPrivateKey.fromBase58(networkParameters, privateKey);
ECKey ecKey = dumpedPrivateKey.getKey();
for (UTXO utxo : needUtxos) {
TransactionOutPoint outPoint = new TransactionOutPoint(networkParameters, utxo.getIndex(), utxo.getHash());
transaction.addSignedInput(outPoint, utxo.getScript(), ecKey, Transaction.SigHash.ALL, true);
}
byte[] bytes = transaction.bitcoinSerialize();
String hash = Hex.toHexString(bytes);
log.info("fee:{},utxoAmount:{},changeAmount{}", fee, utxoAmount, changeAmount);
return hash;
}
the exception at the red color