From 86ab5add57f683f5f87e9a323cb3ff0e777cd744 Mon Sep 17 00:00:00 2001 From: jiangyuanshu <317787106@qq.com> Date: Fri, 15 Nov 2024 17:29:31 +0800 Subject: [PATCH 1/2] checkout payment in checkShieldedTRC20NoteValue --- framework/src/main/java/org/tron/core/Wallet.java | 6 ++++++ .../src/main/java/org/tron/core/zen/address/KeyIo.java | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index 769274e8f2a..dd5087288dc 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -3438,6 +3438,9 @@ private void checkShieldedTRC20NoteValue( if (spendNote.getNote().getValue() < 0) { throw new ContractValidateException("The value in SpendNoteTRC20 must >= 0"); } + if (StringUtils.isEmpty(spendNote.getNote().getPaymentAddress())) { + throw new ContractValidateException("Payment Address in SpendNote should not be empty"); + } } } @@ -3446,6 +3449,9 @@ private void checkShieldedTRC20NoteValue( if (receiveNote.getNote().getValue() < 0) { throw new ContractValidateException("The value in ReceiveNote must >= 0"); } + if (StringUtils.isEmpty(receiveNote.getNote().getPaymentAddress())) { + throw new ContractValidateException("Payment Address in ReceiveNote should not be empty"); + } } } } diff --git a/framework/src/main/java/org/tron/core/zen/address/KeyIo.java b/framework/src/main/java/org/tron/core/zen/address/KeyIo.java index 9dc28b9ff03..85e90f6ad8d 100644 --- a/framework/src/main/java/org/tron/core/zen/address/KeyIo.java +++ b/framework/src/main/java/org/tron/core/zen/address/KeyIo.java @@ -19,6 +19,7 @@ import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; import org.tron.common.utils.Bech32; import org.tron.common.utils.Bech32.Bech32Data; @@ -29,6 +30,9 @@ public class KeyIo { private static String SAPLING_PAYMENT_ADDRESS = "ztron"; public static PaymentAddress decodePaymentAddress(String str) { + if (StringUtils.isEmpty(str)) { + return null; + } byte[] data; Bech32Data bech = Bech32.decode(str); if (bech.hrp.equals(SAPLING_PAYMENT_ADDRESS) From 4717f87407706b848f792ff6d72c89f5ed5e7d1a Mon Sep 17 00:00:00 2001 From: jiangyuanshu <317787106@qq.com> Date: Tue, 19 Nov 2024 15:10:05 +0800 Subject: [PATCH 2/2] add test case testCreateShieldedContractParameters2 without payment_address --- .../java/org/tron/core/ShieldWalletTest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/framework/src/test/java/org/tron/core/ShieldWalletTest.java b/framework/src/test/java/org/tron/core/ShieldWalletTest.java index 5bc2a31c9d0..fe095723c77 100644 --- a/framework/src/test/java/org/tron/core/ShieldWalletTest.java +++ b/framework/src/test/java/org/tron/core/ShieldWalletTest.java @@ -19,6 +19,7 @@ import org.tron.core.capsule.TransactionCapsule; import org.tron.core.config.args.Args; import org.tron.core.exception.ContractExeException; +import org.tron.core.exception.ContractValidateException; import org.tron.core.services.http.JsonFormat; import org.tron.core.services.http.JsonFormat.ParseException; @@ -337,6 +338,48 @@ public void testCreateShieldedContractParameters() throws ContractExeException { } } + @Test + public void testCreateShieldedContractParameters2() throws ContractExeException { + librustzcashInitZksnarkParams(); + Args.getInstance().setFullNodeAllowShieldedTransactionArgs(true); + Wallet wallet1 = spy(new Wallet()); + + doReturn(BigInteger.valueOf(1).toByteArray()) + .when(wallet1).getShieldedContractScalingFactor( + ByteArray.fromHexString("4144007979359ECAC395BBD3CEF8060D3DF2DC3F01")); + String parameter = new String(ByteArray.fromHexString( + "7b0a202020202261736b223a2263323531336539653330383439343933326264383265306365353336" + + "363264313734323164393062373261383437316130613132623835353261333336653032222c0a202" + + "02020226e736b223a2234633662663364643461303634336432306236323866376534353938306335" + + "653138376630376135316436663365383661616631616239313663303765623064222c0a202020202" + + "26f766b223a2231376135386439613530353864613665343263613132636432383964306136616131" + + "363962393236633138653139626361353138623864366638363734653433222c0a202020202266726" + + "f6d5f616d6f756e74223a22313030222c0a2020202022736869656c6465645f726563656976657322" + + "3a5b0a20202020202020207b0a202020202020202020202020226e6f7465223a7b0a2020202020202" + + "02020202020202020202276616c7565223a3130302c0a202020202020202020202020202020202270" + + "61796d656e745f61646472657373223a22222c0a202020202020202020202020202020202272636d2" + + "23a223136623666356534303434346162376565616231316165363631336332376633353131373937" + + "3165666138376237313536306235383133383239633933393064220a2020202020202020202020207" + + "d0a20202020202020207d0a202020205d2c0a2020202022736869656c6465645f54524332305f636f" + + "6e74726163745f61646472657373223a2234313434303037393739333539454341433339354242443" + + "3434546383036304433444632444333463031220a7d")); + PrivateShieldedTRC20Parameters.Builder builder = PrivateShieldedTRC20Parameters.newBuilder(); + try { + JsonFormat.merge(parameter, builder, false); + } catch (ParseException e) { + Assert.fail(); + } + + try { + wallet1.createShieldedContractParameters(builder.build()); + Assert.fail(); + } catch (Exception e) { + Assert.assertTrue(e instanceof ContractValidateException); + Assert.assertEquals("Payment Address in ReceiveNote should not be empty", + e.getMessage()); + } + } + @Test public void testCreateShieldedContractParametersWithoutAsk() throws ContractExeException { librustzcashInitZksnarkParams();