diff --git a/actuator/src/main/java/org/tron/core/actuator/VMActuator.java b/actuator/src/main/java/org/tron/core/actuator/VMActuator.java index d785951027b..e0a721db28d 100644 --- a/actuator/src/main/java/org/tron/core/actuator/VMActuator.java +++ b/actuator/src/main/java/org/tron/core/actuator/VMActuator.java @@ -25,6 +25,7 @@ import org.tron.common.runtime.InternalTransaction.TrxType; import org.tron.common.runtime.ProgramResult; import org.tron.common.runtime.vm.DataWord; +import org.tron.common.utils.ForkController; import org.tron.common.utils.StorageUtils; import org.tron.common.utils.StringUtil; import org.tron.common.utils.WalletUtil; @@ -33,6 +34,7 @@ import org.tron.core.capsule.BlockCapsule; import org.tron.core.capsule.ContractCapsule; import org.tron.core.capsule.ReceiptCapsule; +import org.tron.core.config.Parameter; import org.tron.core.db.EnergyProcessor; import org.tron.core.db.TransactionContext; import org.tron.core.exception.ContractExeException; @@ -189,7 +191,8 @@ public void execute(Object object) throws ContractExeException { throw e; } - VM.play(program, OperationRegistry.getTable()); + // Prepare the table once for this execution and all nested calls. + VM.play(program, OperationRegistry.prepareAndGetTable(isConstantCall)); result = program.getResult(); if (VMConfig.allowEnergyAdjustment()) { @@ -217,6 +220,9 @@ public void execute(Object object) throws ContractExeException { } else { result.spendEnergy(saveCodeEnergy); if (VMConfig.allowTvmConstantinople()) { + CreateSmartContract createContract = + ContractCapsule.getSmartContractFromTransaction(trx); + checkContractHashFields(createContract.getNewContract()); rootRepository.saveCode(program.getContractAddress().getNoLeadZeroesData(), code); } } @@ -330,6 +336,7 @@ private void create() if (contract == null) { throw new ContractValidateException("Cannot get CreateSmartContract from transaction"); } + SmartContract newSmartContract; if (VMConfig.allowTvmCompatibleEvm()) { newSmartContract = contract.getNewContract().toBuilder().setVersion(1).build(); @@ -341,11 +348,7 @@ private void create() throw new ContractValidateException("OwnerAddress is not equals OriginAddress"); } - byte[] contractName = newSmartContract.getName().getBytes(); - - if (contractName.length > VMConstant.CONTRACT_NAME_LENGTH) { - throw new ContractValidateException("contractName's length cannot be greater than 32"); - } + checkContractNameLength(contract.getNewContract()); long percent = contract.getNewContract().getConsumeUserResourcePercent(); if (percent < 0 || percent > VMConstant.ONE_HUNDRED) { @@ -455,6 +458,22 @@ private void create() } + static void checkContractHashFields(SmartContract contract) { + if (!contract.getCodeHash().isEmpty() || !contract.getTrxHash().isEmpty()) { + MUtil.checkCPUTimeForContractHashFields(); + } + } + + static void checkContractNameLength(SmartContract contract) throws ContractValidateException { + int contractNameLength = + ForkController.instance().pass(Parameter.ForkBlockVersionEnum.VERSION_4_8_2_2) + ? contract.getNameBytes().size() + : contract.getName().getBytes().length; + if (contractNameLength > VMConstant.CONTRACT_NAME_LENGTH) { + throw new ContractValidateException("contractName's length cannot be greater than 32"); + } + } + /** * ** */ diff --git a/actuator/src/main/java/org/tron/core/vm/Operation.java b/actuator/src/main/java/org/tron/core/vm/Operation.java index 87ff8fce749..80b25262089 100644 --- a/actuator/src/main/java/org/tron/core/vm/Operation.java +++ b/actuator/src/main/java/org/tron/core/vm/Operation.java @@ -52,4 +52,12 @@ public void execute(Program program) { public boolean isEnabled() { return enabled.getAsBoolean(); } + + public Operation adjustCost(Function newCost) { + return new Operation(opcode, require, ret, newCost, action, enabled); + } + + public Operation adjustAction(Consumer newAction) { + return new Operation(opcode, require, ret, cost, newAction, enabled); + } } diff --git a/actuator/src/main/java/org/tron/core/vm/OperationRegistry.java b/actuator/src/main/java/org/tron/core/vm/OperationRegistry.java index 8c078e843a2..28ce2147beb 100644 --- a/actuator/src/main/java/org/tron/core/vm/OperationRegistry.java +++ b/actuator/src/main/java/org/tron/core/vm/OperationRegistry.java @@ -7,12 +7,45 @@ public class OperationRegistry { + private static final Operation DEFAULT_MLOAD = new Operation( + Op.MLOAD, 1, 1, EnergyCost::getMloadCost, OperationActions::mLoadAction); + + private static final Operation DEFAULT_MSTORE = new Operation( + Op.MSTORE, 2, 0, EnergyCost::getMStoreCost, OperationActions::mStoreAction); + + private static final Operation DEFAULT_MSTORE8 = new Operation( + Op.MSTORE8, 2, 0, EnergyCost::getMStore8Cost, OperationActions::mStore8Action); + + private static final Operation ADJUSTED_MLOAD = + DEFAULT_MLOAD.adjustCost(EnergyCost::getMloadCost2); + + private static final Operation ADJUSTED_MSTORE = + DEFAULT_MSTORE.adjustCost(EnergyCost::getMStoreCost2); + + private static final Operation ADJUSTED_MSTORE8 = + DEFAULT_MSTORE8.adjustCost(EnergyCost::getMStore8Cost2); + + private static final Operation DEFAULT_VOTEWITNESS = new Operation( + Op.VOTEWITNESS, 4, 1, EnergyCost::getVoteWitnessCost, + OperationActions::voteWitnessAction, VMConfig::allowTvmVote); + + private static final Operation ADJUSTED_VOTEWITNESS = + DEFAULT_VOTEWITNESS.adjustCost(EnergyCost::getVoteWitnessCost2); + + private static final Operation OSAKA_VOTEWITNESS = + DEFAULT_VOTEWITNESS.adjustCost(EnergyCost::getVoteWitnessCost3); + + private static final Operation DEFAULT_SUICIDE = new Operation( + Op.SUICIDE, 1, 0, EnergyCost::getSuicideCost, OperationActions::suicideAction); + + private static final Operation ADJUSTED_SUICIDE = + DEFAULT_SUICIDE.adjustCost(EnergyCost::getSuicideCost2); + + private static final Operation RESTRICTED_SUICIDE = + DEFAULT_SUICIDE.adjustCost(EnergyCost::getSuicideCost3) + .adjustAction(OperationActions::suicideAction2); + public enum Version { - TRON_V1_0, - TRON_V1_1, - TRON_V1_2, - TRON_V1_3, - TRON_V1_4, TRON_V1_5, // add more // TRON_V2, @@ -21,13 +54,21 @@ public enum Version { private static final Map tableMap = new HashMap<>(); + // The newest version in use. Bump this when a newer operation set is added, + // together with newLatestOperationSet() below. + private static final Version LATEST_VERSION = Version.TRON_V1_5; + static { - tableMap.put(Version.TRON_V1_0, newTronV10OperationSet()); - tableMap.put(Version.TRON_V1_1, newTronV11OperationSet()); - tableMap.put(Version.TRON_V1_2, newTronV12OperationSet()); - tableMap.put(Version.TRON_V1_3, newTronV13OperationSet()); - tableMap.put(Version.TRON_V1_4, newTronV14OperationSet()); - tableMap.put(Version.TRON_V1_5, newTronV15OperationSet()); + tableMap.put(LATEST_VERSION, newLatestOperationSet()); + } + + // Constant calls get a dedicated instance of the newest table, isolated from + // the shared consensus table above. + private static final JumpTable CONSTANT_CALL_TABLE = newLatestOperationSet(); + + // The single place that decides which operation set is the newest. + private static JumpTable newLatestOperationSet() { + return newTronV15OperationSet(); } public static JumpTable newTronV10OperationSet() { @@ -74,28 +115,22 @@ public static JumpTable newTronV15OperationSet() { // Just for warming up class to avoid out_of_time public static void init() {} - public static JumpTable getTable() { - // always get the table which has the newest version - JumpTable table = tableMap.get(Version.TRON_V1_5); - - // next make the corresponding changes, exclude activating opcode - if (VMConfig.allowHigherLimitForMaxCpuTimeOfOneTx()) { - adjustMemOperations(table); - } - - if (VMConfig.allowEnergyAdjustment()) { - adjustForFairEnergy(table); - } - - if (VMConfig.allowTvmSelfdestructRestriction()) { - adjustSelfdestruct(table); - } + public static JumpTable prepareAndGetTable(boolean isConstantCall) { + JumpTable table = getTable(isConstantCall); + // Apply configuration-dependent changes once at the top level. + adjustTable(table); + return table; + } - if (VMConfig.allowTvmOsaka()) { - adjustVoteWitnessCost(table); - } + public static JumpTable getTable(boolean isConstantCall) { + return isConstantCall ? CONSTANT_CALL_TABLE : tableMap.get(LATEST_VERSION); + } - return table; + private static void adjustTable(JumpTable table) { + // Make the corresponding changes, excluding opcode activation. + adjustMemOperations(table); + adjustVoteWitness(table); + adjustSelfdestruct(table); } public static JumpTable newBaseOperationSet() { @@ -331,20 +366,11 @@ public static JumpTable newBaseOperationSet() { EnergyCost::getBaseTierCost, OperationActions::popAction)); - table.set(new Operation( - Op.MLOAD, 1, 1, - EnergyCost::getMloadCost, - OperationActions::mLoadAction)); + table.set(DEFAULT_MLOAD); - table.set(new Operation( - Op.MSTORE, 2, 0, - EnergyCost::getMStoreCost, - OperationActions::mStoreAction)); + table.set(DEFAULT_MSTORE); - table.set(new Operation( - Op.MSTORE8, 2, 0, - EnergyCost::getMStore8Cost, - OperationActions::mStore8Action)); + table.set(DEFAULT_MSTORE8); table.set(new Operation( Op.SLOAD, 1, 1, @@ -449,10 +475,7 @@ public static JumpTable newBaseOperationSet() { EnergyCost::getRevertCost, OperationActions::revertAction)); - table.set(new Operation( - Op.SUICIDE, 1, 0, - EnergyCost::getSuicideCost, - OperationActions::suicideAction)); + table.set(DEFAULT_SUICIDE); return table; } @@ -570,11 +593,7 @@ public static void appendFreezeOperations(JumpTable table) { public static void appendVoteOperations(JumpTable table) { BooleanSupplier proposal = VMConfig::allowTvmVote; - table.set(new Operation( - Op.VOTEWITNESS, 4, 1, - EnergyCost::getVoteWitnessCost, - OperationActions::voteWitnessAction, - proposal)); + table.set(DEFAULT_VOTEWITNESS); table.set(new Operation( Op.WITHDRAWREWARD, 0, 1, @@ -593,23 +612,6 @@ public static void appendLondonOperations(JumpTable table) { proposal)); } - public static void adjustMemOperations(JumpTable table) { - table.set(new Operation( - Op.MLOAD, 1, 1, - EnergyCost::getMloadCost2, - OperationActions::mLoadAction)); - - table.set(new Operation( - Op.MSTORE, 2, 0, - EnergyCost::getMStoreCost2, - OperationActions::mStoreAction)); - - table.set(new Operation( - Op.MSTORE8, 2, 0, - EnergyCost::getMStore8Cost2, - OperationActions::mStore8Action)); - } - public static void appendFreezeV2Operations(JumpTable table) { BooleanSupplier proposal = VMConfig::allowTvmFreezeV2; @@ -664,19 +666,6 @@ public static void appendShangHaiOperations(JumpTable table) { proposal)); } - public static void adjustForFairEnergy(JumpTable table) { - table.set(new Operation( - Op.VOTEWITNESS, 4, 1, - EnergyCost::getVoteWitnessCost2, - OperationActions::voteWitnessAction, - VMConfig::allowTvmVote)); - - table.set(new Operation( - Op.SUICIDE, 1, 0, - EnergyCost::getSuicideCost2, - OperationActions::suicideAction)); - } - public static void appendCancunOperations(JumpTable table) { BooleanSupplier proposal = VMConfig::allowTvmCancun; BooleanSupplier tvmBlobProposal = VMConfig::allowTvmBlob; @@ -722,18 +711,30 @@ public static void appendOsakaOperations(JumpTable table) { proposal)); } - public static void adjustSelfdestruct(JumpTable table) { - table.set(new Operation( - Op.SUICIDE, 1, 0, - EnergyCost::getSuicideCost3, - OperationActions::suicideAction2)); + public static void adjustMemOperations(JumpTable table) { + boolean adjusted = VMConfig.allowHigherLimitForMaxCpuTimeOfOneTx(); + table.set(adjusted ? ADJUSTED_MLOAD : DEFAULT_MLOAD); + table.set(adjusted ? ADJUSTED_MSTORE : DEFAULT_MSTORE); + table.set(adjusted ? ADJUSTED_MSTORE8 : DEFAULT_MSTORE8); } - public static void adjustVoteWitnessCost(JumpTable table) { - table.set(new Operation( - Op.VOTEWITNESS, 4, 1, - EnergyCost::getVoteWitnessCost3, - OperationActions::voteWitnessAction, - VMConfig::allowTvmVote)); + public static void adjustVoteWitness(JumpTable table) { + if (VMConfig.allowTvmOsaka()) { + table.set(OSAKA_VOTEWITNESS); + } else if (VMConfig.allowEnergyAdjustment()) { + table.set(ADJUSTED_VOTEWITNESS); + } else { + table.set(DEFAULT_VOTEWITNESS); + } + } + + public static void adjustSelfdestruct(JumpTable table) { + if (VMConfig.allowTvmSelfdestructRestriction()) { + table.set(RESTRICTED_SUICIDE); + } else if (VMConfig.allowEnergyAdjustment()) { + table.set(ADJUSTED_SUICIDE); + } else { + table.set(DEFAULT_SUICIDE); + } } } diff --git a/actuator/src/main/java/org/tron/core/vm/nativecontract/CancelAllUnfreezeV2Processor.java b/actuator/src/main/java/org/tron/core/vm/nativecontract/CancelAllUnfreezeV2Processor.java index ec1f4363205..6ee8b1245ce 100644 --- a/actuator/src/main/java/org/tron/core/vm/nativecontract/CancelAllUnfreezeV2Processor.java +++ b/actuator/src/main/java/org/tron/core/vm/nativecontract/CancelAllUnfreezeV2Processor.java @@ -19,6 +19,7 @@ import org.tron.core.vm.VMConstant; import org.tron.core.vm.nativecontract.param.CancelAllUnfreezeV2Param; import org.tron.core.vm.repository.Repository; +import org.tron.core.vm.utils.MUtil; import org.tron.protos.Protocol; @Slf4j(topic = "VMProcessor") @@ -39,6 +40,10 @@ public void validate(CancelAllUnfreezeV2Param param, Repository repo) throws Con throw new ContractValidateException( ACCOUNT_EXCEPTION_STR + readableOwnerAddress + NOT_EXIST_STR); } + + if (accountCapsule.hasInvalidDelegatedV2()) { + MUtil.checkCPUTimeForInvalidDelegatedV2Balance(); + } } public Map execute(CancelAllUnfreezeV2Param param, Repository repo) throws ContractExeException { diff --git a/actuator/src/main/java/org/tron/core/vm/nativecontract/FreezeBalanceV2Processor.java b/actuator/src/main/java/org/tron/core/vm/nativecontract/FreezeBalanceV2Processor.java index e7e932194ed..96c6e936b36 100644 --- a/actuator/src/main/java/org/tron/core/vm/nativecontract/FreezeBalanceV2Processor.java +++ b/actuator/src/main/java/org/tron/core/vm/nativecontract/FreezeBalanceV2Processor.java @@ -14,6 +14,7 @@ import org.tron.core.store.DynamicPropertiesStore; import org.tron.core.vm.nativecontract.param.FreezeBalanceV2Param; import org.tron.core.vm.repository.Repository; +import org.tron.core.vm.utils.MUtil; @Slf4j(topic = "VMProcessor") public class FreezeBalanceV2Processor { @@ -63,6 +64,10 @@ public void validate(FreezeBalanceV2Param param, Repository repo) throws Contrac "Unknown ResourceCode, valid ResourceCode[BANDWIDTH、ENERGY]"); } } + + if (repo.isSelfDestructed(ownerAddress)) { + MUtil.checkCPUTimeForFreezeV2AfterSelfDestruct(); + } } public void execute(FreezeBalanceV2Param param, Repository repo) { diff --git a/actuator/src/main/java/org/tron/core/vm/nativecontract/UnfreezeBalanceV2Processor.java b/actuator/src/main/java/org/tron/core/vm/nativecontract/UnfreezeBalanceV2Processor.java index af2cbf63a43..73ffb5f294b 100644 --- a/actuator/src/main/java/org/tron/core/vm/nativecontract/UnfreezeBalanceV2Processor.java +++ b/actuator/src/main/java/org/tron/core/vm/nativecontract/UnfreezeBalanceV2Processor.java @@ -23,6 +23,7 @@ import org.tron.core.vm.config.VMConfig; import org.tron.core.vm.nativecontract.param.UnfreezeBalanceV2Param; import org.tron.core.vm.repository.Repository; +import org.tron.core.vm.utils.MUtil; import org.tron.core.vm.utils.VoteRewardUtil; import org.tron.protos.Protocol; import org.tron.protos.contract.Common; @@ -86,6 +87,10 @@ public void validate(UnfreezeBalanceV2Param param, Repository repo) throw new ContractValidateException( "Invalid unfreeze_balance, [" + param.getUnfreezeBalance() + "] is invalid"); } + + if (accountCapsule.hasInvalidDelegatedV2()) { + MUtil.checkCPUTimeForInvalidDelegatedV2Balance(); + } } private boolean checkUnfreezeBalance( diff --git a/actuator/src/main/java/org/tron/core/vm/nativecontract/WithdrawExpireUnfreezeProcessor.java b/actuator/src/main/java/org/tron/core/vm/nativecontract/WithdrawExpireUnfreezeProcessor.java index 0bcdb10d46f..982031aa672 100644 --- a/actuator/src/main/java/org/tron/core/vm/nativecontract/WithdrawExpireUnfreezeProcessor.java +++ b/actuator/src/main/java/org/tron/core/vm/nativecontract/WithdrawExpireUnfreezeProcessor.java @@ -17,6 +17,7 @@ import org.tron.core.store.DynamicPropertiesStore; import org.tron.core.vm.nativecontract.param.WithdrawExpireUnfreezeParam; import org.tron.core.vm.repository.Repository; +import org.tron.core.vm.utils.MUtil; import org.tron.protos.Protocol; @Slf4j(topic = "VMProcessor") @@ -52,6 +53,10 @@ public void validate(WithdrawExpireUnfreezeParam param, Repository repo) throws logger.debug(e.getMessage(), e); throw new ContractValidateException(e.getMessage()); } + + if (accountCapsule.hasInvalidDelegatedV2()) { + MUtil.checkCPUTimeForInvalidDelegatedV2Balance(); + } } private long getTotalWithdrawUnfreeze(List unfrozenV2List, long now) { diff --git a/actuator/src/main/java/org/tron/core/vm/program/ContractState.java b/actuator/src/main/java/org/tron/core/vm/program/ContractState.java index c6347b9a072..30ec0d24f34 100644 --- a/actuator/src/main/java/org/tron/core/vm/program/ContractState.java +++ b/actuator/src/main/java/org/tron/core/vm/program/ContractState.java @@ -131,6 +131,16 @@ public boolean isNewContract(byte[] address) { return repository.isNewContract(address); } + @Override + public void markSelfDestruct(byte[] address) { + repository.markSelfDestruct(address); + } + + @Override + public boolean isSelfDestructed(byte[] address) { + return repository.isSelfDestructed(address); + } + @Override public void updateAccount(byte[] address, AccountCapsule accountCapsule) { repository.updateAccount(address, accountCapsule); diff --git a/actuator/src/main/java/org/tron/core/vm/program/Program.java b/actuator/src/main/java/org/tron/core/vm/program/Program.java index 590859a9fef..2be1eb80703 100644 --- a/actuator/src/main/java/org/tron/core/vm/program/Program.java +++ b/actuator/src/main/java/org/tron/core/vm/program/Program.java @@ -512,12 +512,18 @@ public void suicide(DataWord obtainerAddress) { internalTx.setValue(internalTx.getValue() + expireUnfrozenBalance); } } + + getContractState().markSelfDestruct(owner); getResult().addDeleteAccount(this.getContractAddress()); } public void suicide2(DataWord obtainerAddress) { - byte[] owner = getContextAddress(); + + if (getContractState().isSelfDestructed(obtainerAddress.toTronAddress())) { + MUtil.checkCPUTimeForSelfDestructedBeneficiary(); + } + boolean isNewContract = getContractState().isNewContract(owner); if (isNewContract) { suicide(obtainerAddress); @@ -540,6 +546,7 @@ public void suicide2(DataWord obtainerAddress) { "suicide", nonce, getContractState().getAccount(owner).getAssetMapV2()); if (FastByteComparisons.isEqual(owner, obtainer)) { + getContractState().markSelfDestruct(owner); return; } @@ -579,6 +586,8 @@ public void suicide2(DataWord obtainerAddress) { internalTx.setValue(internalTx.getValue() + expireUnfrozenBalance); } } + + getContractState().markSelfDestruct(owner); } public Repository getContractState() { @@ -914,7 +923,8 @@ this, new DataWord(newAddress), getContractAddress(), value, DataWord.ZERO(), if (VMConfig.allowTvmCompatibleEvm()) { program.setContractVersion(getContractVersion()); } - VM.play(program, OperationRegistry.getTable()); + // Reuse the table prepared by the top-level execution. + VM.play(program, OperationRegistry.getTable(isConstantCall())); createResult = program.getResult(); getTrace().merge(program.getTrace()); // always commit nonce @@ -1146,7 +1156,8 @@ this, new DataWord(contextAddress), program.setContractVersion(invoke.getDeposit() .getContract(codeAddress).getContractVersion()); } - VM.play(program, OperationRegistry.getTable()); + // Reuse the table prepared by the top-level execution. + VM.play(program, OperationRegistry.getTable(isConstantCall())); callResult = program.getResult(); getTrace().merge(program.getTrace()); diff --git a/actuator/src/main/java/org/tron/core/vm/repository/Repository.java b/actuator/src/main/java/org/tron/core/vm/repository/Repository.java index 8f91d59d0b8..ab86328c428 100644 --- a/actuator/src/main/java/org/tron/core/vm/repository/Repository.java +++ b/actuator/src/main/java/org/tron/core/vm/repository/Repository.java @@ -59,6 +59,10 @@ public interface Repository { boolean isNewContract(byte[] address); + void markSelfDestruct(byte[] address); + + boolean isSelfDestructed(byte[] address); + void updateAccount(byte[] address, AccountCapsule accountCapsule); void updateDynamicProperty(byte[] word, BytesCapsule bytesCapsule); diff --git a/actuator/src/main/java/org/tron/core/vm/repository/RepositoryImpl.java b/actuator/src/main/java/org/tron/core/vm/repository/RepositoryImpl.java index 62e7ce6ec08..7801a18798a 100644 --- a/actuator/src/main/java/org/tron/core/vm/repository/RepositoryImpl.java +++ b/actuator/src/main/java/org/tron/core/vm/repository/RepositoryImpl.java @@ -139,6 +139,7 @@ public class RepositoryImpl implements Repository { private final HashMap> delegatedResourceAccountIndexCache = new HashMap<>(); private final HashBasedTable> transientStorage = HashBasedTable.create(); private final HashSet newContractCache = new HashSet<>(); + private final HashSet selfDestructCache = new HashSet<>(); public static void removeLruCache(byte[] address) { } @@ -572,6 +573,29 @@ public boolean isNewContract(byte[] address) { } } + @Override + public void markSelfDestruct(byte[] address) { + selfDestructCache.add(Key.create(address)); + } + + @Override + public boolean isSelfDestructed(byte[] address) { + Key key = Key.create(address); + if (selfDestructCache.contains(key)) { + return true; + } + + if (parent != null) { + boolean isSelfDestructed = parent.isSelfDestructed(address); + if (isSelfDestructed) { + selfDestructCache.add(key); + } + return isSelfDestructed; + } else { + return false; + } + } + @Override public void updateAccount(byte[] address, AccountCapsule accountCapsule) { accountCache.put(Key.create(address), @@ -780,6 +804,7 @@ public void commit() { commitDelegatedResourceAccountIndexCache(repository); commitTransientStorage(repository); commitNewContractCache(repository); + commitSelfDestructCache(repository); } @Override @@ -1142,6 +1167,12 @@ public void commitNewContractCache(Repository deposit) { } } + private void commitSelfDestructCache(Repository deposit) { + if (deposit != null) { + selfDestructCache.forEach(key -> deposit.markSelfDestruct(key.getData())); + } + } + /** * Get the block id from the number. */ diff --git a/actuator/src/main/java/org/tron/core/vm/utils/MUtil.java b/actuator/src/main/java/org/tron/core/vm/utils/MUtil.java index e07360e6863..c7059016b88 100644 --- a/actuator/src/main/java/org/tron/core/vm/utils/MUtil.java +++ b/actuator/src/main/java/org/tron/core/vm/utils/MUtil.java @@ -59,6 +59,12 @@ public static boolean isNotNullOrEmpty(String str) { return !isNullOrEmpty(str); } + public static void checkCPUTimeForContractHashFields() { + if (ForkController.instance().pass(Parameter.ForkBlockVersionEnum.VERSION_4_8_2_2)) { + throw new OutOfTimeException("CPU timeout for contract hash fields"); + } + } + public static void checkCPUTime() { if (ForkController.instance().pass(Parameter.ForkBlockVersionEnum.VERSION_4_7_1)) { throw new OutOfTimeException("CPU timeout for 0x0a executing"); @@ -76,4 +82,23 @@ public static void checkCPUTimeForModExp() { throw new OutOfTimeException("CPU timeout for modExp executing"); } } + + public static void checkCPUTimeForFreezeV2AfterSelfDestruct() { + if (ForkController.instance().pass(Parameter.ForkBlockVersionEnum.VERSION_4_8_2_2)) { + throw new OutOfTimeException("CPU timeout for FreezeBalanceV2 after SELFDESTRUCT"); + } + } + + public static void checkCPUTimeForSelfDestructedBeneficiary() { + if (ForkController.instance().pass(Parameter.ForkBlockVersionEnum.VERSION_4_8_2_2)) { + throw new OutOfTimeException( + "CPU timeout for SELFDESTRUCT with selfdestructed beneficiary"); + } + } + + public static void checkCPUTimeForInvalidDelegatedV2Balance() { + if (ForkController.instance().pass(Parameter.ForkBlockVersionEnum.VERSION_4_8_2_2)) { + throw new OutOfTimeException("CPU timeout for invalid delegated V2 balance"); + } + } } diff --git a/build.gradle b/build.gradle index 65e72c0fb73..04dee79fbae 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } ext { - grpcVersion = "1.83.0" + grpcVersion = "1.83.1" } allprojects { @@ -91,16 +91,14 @@ subprojects { } dependencies { - implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.36' - implementation group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.36' - implementation group: 'org.slf4j', name: 'jul-to-slf4j', version: '1.7.36' - implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.13' + implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.17' + implementation group: 'org.slf4j', name: 'jcl-over-slf4j', version: '2.0.17' + implementation group: 'org.slf4j', name: 'jul-to-slf4j', version: '2.0.17' + implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.3.16' implementation "com.google.code.findbugs:jsr305:3.0.0" implementation group: 'org.springframework', name: 'spring-context', version: "${springVersion}" - implementation "org.apache.commons:commons-lang3:3.4" - implementation group: 'org.apache.commons', name: 'commons-math', version: '2.2' - implementation "org.apache.commons:commons-collections4:4.1" - implementation group: 'joda-time', name: 'joda-time', version: '2.3' + implementation "org.apache.commons:commons-lang3:3.20.0" + implementation "org.apache.commons:commons-collections4:4.6.0" implementation group: 'org.bouncycastle', name: 'bcprov-jdk18on', version: '1.84' compileOnly 'org.projectlombok:lombok:1.18.34' diff --git a/chainbase/src/main/java/org/tron/core/capsule/AccountCapsule.java b/chainbase/src/main/java/org/tron/core/capsule/AccountCapsule.java index 1af7b55c8b2..026dce74ec8 100644 --- a/chainbase/src/main/java/org/tron/core/capsule/AccountCapsule.java +++ b/chainbase/src/main/java/org/tron/core/capsule/AccountCapsule.java @@ -1336,6 +1336,10 @@ public void clearDelegatedResource() { this.account = builder.build(); } + public boolean hasInvalidDelegatedV2() { + return getDelegatedFrozenV2BalanceForBandwidth() < 0 || getDelegatedFrozenV2BalanceForEnergy() < 0; + } + public void importAsset(byte[] key) { this.account = AssetUtil.importAsset(this.account, key); } diff --git a/chainbase/src/main/java/org/tron/core/store/DynamicPropertiesStore.java b/chainbase/src/main/java/org/tron/core/store/DynamicPropertiesStore.java index 0f74f20d379..33bbaa4a362 100644 --- a/chainbase/src/main/java/org/tron/core/store/DynamicPropertiesStore.java +++ b/chainbase/src/main/java/org/tron/core/store/DynamicPropertiesStore.java @@ -12,13 +12,13 @@ import java.util.stream.IntStream; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.tron.common.parameter.CommonParameter; import org.tron.common.utils.ByteArray; import org.tron.common.utils.Sha256Hash; +import org.tron.common.utils.Time; import org.tron.core.capsule.BytesCapsule; import org.tron.core.config.Parameter.ChainConstant; import org.tron.core.db.TronStoreWithRevoking; @@ -2261,8 +2261,8 @@ public void updateNextMaintenanceTime(long blockTime) { logger.info( "Do update nextMaintenanceTime, currentMaintenanceTime: {}, blockTime: {}, " + "nextMaintenanceTime: {}.", - new DateTime(currentMaintenanceTime), new DateTime(blockTime), - new DateTime(nextMaintenanceTime) + Time.getIsoTimeString(currentMaintenanceTime), Time.getIsoTimeString(blockTime), + Time.getIsoTimeString(nextMaintenanceTime) ); } diff --git a/common/build.gradle b/common/build.gradle index 14d3eb4e637..4b36d067b70 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -8,7 +8,9 @@ sourceCompatibility = 1.8 dependencies { - api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.6' // https://github.com/FasterXML/jackson-databind/issues/3627 + // avoid x.y.z.w micro-patches, they may ship broken Gradle module metadata: + // https://github.com/FasterXML/jackson-databind/issues/3627 + api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.10' api "com.cedarsoftware:java-util:3.2.0" api group: 'org.apache.httpcomponents', name: 'httpasyncclient', version: '4.1.1' api group: 'commons-codec', name: 'commons-codec', version: '1.11' diff --git a/common/src/main/java/org/tron/common/entity/NodeInfo.java b/common/src/main/java/org/tron/common/entity/NodeInfo.java index 4b23bd185e3..6f53b3935b8 100644 --- a/common/src/main/java/org/tron/common/entity/NodeInfo.java +++ b/common/src/main/java/org/tron/common/entity/NodeInfo.java @@ -146,7 +146,7 @@ public Protocol.NodeInfo transferToProtoEntity() { peerInfoBuilder.setLastBlockUpdateTime(peerInfo.getLastBlockUpdateTime()); peerInfoBuilder.setSyncFlag(peerInfo.isSyncFlag()); peerInfoBuilder.setHeadBlockTimeWeBothHave(peerInfo.getHeadBlockTimeWeBothHave()); - peerInfoBuilder.setNeedSyncFromPeer(peerInfo.isSyncFlag()); + peerInfoBuilder.setNeedSyncFromPeer(peerInfo.isNeedSyncFromPeer()); peerInfoBuilder.setNeedSyncFromUs(peerInfo.isNeedSyncFromUs()); peerInfoBuilder.setHost(peerInfo.getHost()); peerInfoBuilder.setPort(peerInfo.getPort()); diff --git a/common/src/main/java/org/tron/common/logsfilter/TriggerConfig.java b/common/src/main/java/org/tron/common/logsfilter/TriggerConfig.java index d76db47c40d..bf4b1cd4946 100644 --- a/common/src/main/java/org/tron/common/logsfilter/TriggerConfig.java +++ b/common/src/main/java/org/tron/common/logsfilter/TriggerConfig.java @@ -33,7 +33,7 @@ public TriggerConfig() { triggerName = ""; enabled = false; topic = ""; - redundancy = false; // event will also write to log + redundancy = false; // if true, event triggers will also be emitted as log triggers ethCompatible = false; // add eth compatible fields, just for transaction now solidified = false; // just write solidified data, just for block and transaction now } diff --git a/common/src/main/java/org/tron/common/utils/Time.java b/common/src/main/java/org/tron/common/utils/Time.java index fdbfcb5f283..15e9d3d4b55 100644 --- a/common/src/main/java/org/tron/common/utils/Time.java +++ b/common/src/main/java/org/tron/common/utils/Time.java @@ -1,9 +1,17 @@ package org.tron.common.utils; import java.sql.Timestamp; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; public class Time { + // Matches joda-time's DateTime.toString() output, byte for byte: fixed + // 3-digit millis, offset as +08:00, and Z when the system zone is UTC. + private static final DateTimeFormatter ISO_MILLIS_FORMAT = + DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); + public static long getCurrentMillis() { return System.currentTimeMillis(); } @@ -11,4 +19,8 @@ public static long getCurrentMillis() { public static String getTimeString(long time) { return new Timestamp(time).toString(); } + + public static String getIsoTimeString(long time) { + return Instant.ofEpochMilli(time).atZone(ZoneId.systemDefault()).format(ISO_MILLIS_FORMAT); + } } diff --git a/common/src/main/java/org/tron/core/config/Parameter.java b/common/src/main/java/org/tron/core/config/Parameter.java index 233f1d9ef7a..0f9402641e9 100644 --- a/common/src/main/java/org/tron/core/config/Parameter.java +++ b/common/src/main/java/org/tron/core/config/Parameter.java @@ -30,7 +30,8 @@ public enum ForkBlockVersionEnum { VERSION_4_8_0_1(33, 1596780000000L, 70), VERSION_4_8_1(34, 1596780000000L, 80), VERSION_4_8_1_1(35, 1596780000000L, 70), - VERSION_4_8_2(36, 1596780000000L, 80); + VERSION_4_8_2(36, 1596780000000L, 80), + VERSION_4_8_2_2(37, 1596780000000L, 70); // if add a version, modify BLOCK_VERSION simultaneously @Getter @@ -79,7 +80,7 @@ public class ChainConstant { public static final int SINGLE_REPEAT = 1; public static final int BLOCK_FILLED_SLOTS_NUMBER = 128; public static final int MAX_FROZEN_NUMBER = 1; - public static final int BLOCK_VERSION = 36; + public static final int BLOCK_VERSION = 37; public static final long FROZEN_PERIOD = 86_400_000L; public static final long DELEGATE_PERIOD = 3 * 86_400_000L; public static final long TRX_PRECISION = 1000_000L; diff --git a/common/src/main/java/org/tron/core/config/README.md b/common/src/main/java/org/tron/core/config/README.md index 5618cb9fed9..6bcd2ade1aa 100644 --- a/common/src/main/java/org/tron/core/config/README.md +++ b/common/src/main/java/org/tron/core/config/README.md @@ -20,7 +20,7 @@ storage { # block_KDB, peers, properties, recent-block, trans, # utxo, votes, witness, witness_schedule. - # Otherwise, db configs will remain defualt and data will be stored in + # Otherwise, db configs will remain default and data will be stored in # the path of "output-directory" or which is set by "-d" ("--output-directory"). # Attention: name is a required field that must be set !!! diff --git a/common/src/test/java/org/tron/common/entity/NodeInfoTest.java b/common/src/test/java/org/tron/common/entity/NodeInfoTest.java new file mode 100644 index 00000000000..302fdb7b080 --- /dev/null +++ b/common/src/test/java/org/tron/common/entity/NodeInfoTest.java @@ -0,0 +1,58 @@ +package org.tron.common.entity; + +import java.util.ArrayList; +import java.util.List; +import org.junit.Assert; +import org.junit.Test; +import org.tron.protos.Protocol; + +public class NodeInfoTest { + + private PeerInfo newPeerInfo(boolean syncFlag, boolean needSyncFromPeer, + boolean needSyncFromUs) { + PeerInfo peerInfo = new PeerInfo(); + peerInfo.setSyncFlag(syncFlag); + peerInfo.setNeedSyncFromPeer(needSyncFromPeer); + peerInfo.setNeedSyncFromUs(needSyncFromUs); + // string fields must be non-null, otherwise the protobuf setters throw NPE + peerInfo.setLastSyncBlock(""); + peerInfo.setHost("127.0.0.1"); + peerInfo.setNodeId(""); + peerInfo.setHeadBlockWeBothHave(""); + peerInfo.setLocalDisconnectReason(""); + peerInfo.setRemoteDisconnectReason(""); + return peerInfo; + } + + /** + * The protobuf conversion must map each peer flag from its own source field. A previous + * copy-and-paste defect populated needSyncFromPeer from isSyncFlag(); distinct values for + * syncFlag and needSyncFromPeer are required so that such a mismatch is detected. + */ + @Test + public void testPeerFlagMappingIsIndependent() { + NodeInfo nodeInfo = new NodeInfo(); + nodeInfo.setBlock(""); + nodeInfo.setSolidityBlock(""); + List peerList = new ArrayList<>(); + // syncFlag != needSyncFromPeer so the two fields cannot be confused + peerList.add(newPeerInfo(false, true, false)); + peerList.add(newPeerInfo(true, false, true)); + nodeInfo.setPeerList(peerList); + nodeInfo.setCheatWitnessInfoMap(new java.util.HashMap<>()); + + Protocol.NodeInfo proto = nodeInfo.transferToProtoEntity(); + + Assert.assertEquals(2, proto.getPeerInfoListCount()); + + Protocol.NodeInfo.PeerInfo peer0 = proto.getPeerInfoList(0); + Assert.assertFalse(peer0.getSyncFlag()); + Assert.assertTrue(peer0.getNeedSyncFromPeer()); + Assert.assertFalse(peer0.getNeedSyncFromUs()); + + Protocol.NodeInfo.PeerInfo peer1 = proto.getPeerInfoList(1); + Assert.assertTrue(peer1.getSyncFlag()); + Assert.assertFalse(peer1.getNeedSyncFromPeer()); + Assert.assertTrue(peer1.getNeedSyncFromUs()); + } +} diff --git a/consensus/src/main/java/org/tron/consensus/dpos/DposService.java b/consensus/src/main/java/org/tron/consensus/dpos/DposService.java index 397c9d0835c..0a40ec8e076 100644 --- a/consensus/src/main/java/org/tron/consensus/dpos/DposService.java +++ b/consensus/src/main/java/org/tron/consensus/dpos/DposService.java @@ -14,12 +14,12 @@ import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.common.args.GenesisBlock; import org.tron.common.parameter.CommonParameter; import org.tron.common.utils.ByteArray; +import org.tron.common.utils.Time; import org.tron.consensus.ConsensusDelegate; import org.tron.consensus.base.BlockHandle; import org.tron.consensus.base.ConsensusInterface; @@ -134,14 +134,14 @@ public boolean validBlock(BlockCapsule blockCapsule) { if (slot == 0 && consensusDelegate.getDynamicPropertiesStore().allowConsensusLogicOptimization()) { logger.warn("ValidBlock failed: slot error, witness: {}, timeStamp: {}", - ByteArray.toHexString(witnessAddress.toByteArray()), new DateTime(timeStamp)); + ByteArray.toHexString(witnessAddress.toByteArray()), Time.getIsoTimeString(timeStamp)); return false; } final ByteString scheduledWitness = dposSlot.getScheduledWitness(slot); if (!scheduledWitness.equals(witnessAddress)) { logger.warn("ValidBlock failed: sWitness: {}, bWitness: {}, bTimeStamp: {}, slot: {}", ByteArray.toHexString(scheduledWitness.toByteArray()), - ByteArray.toHexString(witnessAddress.toByteArray()), new DateTime(timeStamp), slot); + ByteArray.toHexString(witnessAddress.toByteArray()), Time.getIsoTimeString(timeStamp), slot); return false; } diff --git a/consensus/src/main/java/org/tron/consensus/dpos/DposTask.java b/consensus/src/main/java/org/tron/consensus/dpos/DposTask.java index 9e42552c80f..38f5614e571 100644 --- a/consensus/src/main/java/org/tron/consensus/dpos/DposTask.java +++ b/consensus/src/main/java/org/tron/consensus/dpos/DposTask.java @@ -6,7 +6,6 @@ import java.util.concurrent.ExecutorService; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; @@ -15,6 +14,7 @@ import org.tron.common.parameter.CommonParameter; import org.tron.common.utils.ByteArray; import org.tron.common.utils.Sha256Hash; +import org.tron.common.utils.Time; import org.tron.consensus.ConsensusDelegate; import org.tron.consensus.base.Param.Miner; import org.tron.consensus.base.State; @@ -123,7 +123,7 @@ private State produceBlock() { BlockHeader.raw raw = blockCapsule.getInstance().getBlockHeader().getRawData(); logger.info("Produce block successfully, num: {}, time: {}, witness: {}, ID:{}, parentID:{}", raw.getNumber(), - new DateTime(raw.getTimestamp()), + Time.getIsoTimeString(raw.getTimestamp()), ByteArray.toHexString(raw.getWitnessAddress().toByteArray()), new Sha256Hash(raw.getNumber(), Sha256Hash.of(CommonParameter .getInstance().isECKeyCryptoEngine(), raw.toByteArray())), diff --git a/framework/src/main/java/org/tron/common/application/GrpcNettyMaxConcurrentStreamsLimiter.java b/framework/src/main/java/org/tron/common/application/GrpcNettyMaxConcurrentStreamsLimiter.java deleted file mode 100644 index cdd71ffee3c..00000000000 --- a/framework/src/main/java/org/tron/common/application/GrpcNettyMaxConcurrentStreamsLimiter.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * java-tron is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * java-tron is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with java-tron. If not, see . - */ - -package org.tron.common.application; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -import io.grpc.netty.GrpcHttp2ConnectionHandler; -import io.grpc.netty.InternalProtocolNegotiator; -import io.grpc.netty.InternalProtocolNegotiators; -import io.grpc.netty.NettyServerBuilder; -import io.netty.channel.ChannelHandler; -import io.netty.util.AsciiString; - -/** Enforces the advertised HTTP/2 concurrent stream limit for grpc-netty servers. */ -final class GrpcNettyMaxConcurrentStreamsLimiter { - - private GrpcNettyMaxConcurrentStreamsLimiter() { - } - - static NettyServerBuilder configurePlaintext( - NettyServerBuilder builder, int maxConcurrentStreams) { - checkNotNull(builder, "builder"); - checkArgument(maxConcurrentStreams > 0, "maxConcurrentStreams must be positive"); - builder.maxConcurrentCallsPerConnection(maxConcurrentStreams); - // TODO: Remove this shim after https://github.com/grpc/grpc-java/issues/12930 is fixed. - return builder.protocolNegotiator(newPlaintextNegotiator(maxConcurrentStreams)); - } - - static InternalProtocolNegotiator.ProtocolNegotiator newPlaintextNegotiator( - int maxConcurrentStreams) { - checkArgument(maxConcurrentStreams > 0, "maxConcurrentStreams must be positive"); - return new EnforcingProtocolNegotiator( - InternalProtocolNegotiators.serverPlaintext(), maxConcurrentStreams); - } - - private static final class EnforcingProtocolNegotiator - implements InternalProtocolNegotiator.ProtocolNegotiator { - - private final InternalProtocolNegotiator.ProtocolNegotiator delegate; - private final int maxConcurrentStreams; - - private EnforcingProtocolNegotiator( - InternalProtocolNegotiator.ProtocolNegotiator delegate, int maxConcurrentStreams) { - this.delegate = checkNotNull(delegate, "delegate"); - this.maxConcurrentStreams = maxConcurrentStreams; - } - - @Override - public AsciiString scheme() { - return delegate.scheme(); - } - - @Override - public ChannelHandler newHandler(GrpcHttp2ConnectionHandler grpcHandler) { - // grpc-java builds the connection directly, bypassing Netty's builder-side enforcement. - grpcHandler.connection().remote().maxActiveStreams(maxConcurrentStreams); - return delegate.newHandler(grpcHandler); - } - - @Override - public void close() { - delegate.close(); - } - } -} diff --git a/framework/src/main/java/org/tron/common/application/HttpService.java b/framework/src/main/java/org/tron/common/application/HttpService.java index 1dea271ec69..27f180ab7a3 100644 --- a/framework/src/main/java/org/tron/common/application/HttpService.java +++ b/framework/src/main/java/org/tron/common/application/HttpService.java @@ -43,6 +43,11 @@ public abstract class HttpService extends AbstractService { protected long maxRequestSize = 4 * 1024 * 1024; // 4MB + // Applied by ConnectionLimit only while maxHttpConnectNumber is reached: existing + // connections idle out after this long so the acceptor can resume. Jetty restores the + // connector default (30s) once the count drops back below the limit. + private static final long CONNECTION_LIMIT_IDLE_TIMEOUT_MS = 5000L; + @VisibleForTesting public long getMaxRequestSize() { return this.maxRequestSize; @@ -80,7 +85,9 @@ protected void initServer() { this.apiServer = new Server(this.port); int maxHttpConnectNumber = Args.getInstance().getMaxHttpConnectNumber(); if (maxHttpConnectNumber > 0) { - this.apiServer.addBean(new ConnectionLimit(maxHttpConnectNumber, this.apiServer)); + ConnectionLimit connectionLimit = new ConnectionLimit(maxHttpConnectNumber, this.apiServer); + connectionLimit.setIdleTimeout(CONNECTION_LIMIT_IDLE_TIMEOUT_MS); + this.apiServer.addBean(connectionLimit); } this.apiServer.setErrorHandler(new OversizedRequestErrorHandler()); } diff --git a/framework/src/main/java/org/tron/common/application/RpcService.java b/framework/src/main/java/org/tron/common/application/RpcService.java index 27fcc479f4e..c398b71ae41 100644 --- a/framework/src/main/java/org/tron/common/application/RpcService.java +++ b/framework/src/main/java/org/tron/common/application/RpcService.java @@ -100,9 +100,8 @@ protected NettyServerBuilder initServerBuilder() { serverBuilder = serverBuilder.executor(this.executorService); } // Set configs from config.conf or default value - serverBuilder = GrpcNettyMaxConcurrentStreamsLimiter.configurePlaintext( - serverBuilder, parameter.getMaxConcurrentCallsPerConnection()); serverBuilder + .maxConcurrentCallsPerConnection(parameter.getMaxConcurrentCallsPerConnection()) .flowControlWindow(parameter.getFlowControlWindow()) .maxConnectionIdle(parameter.getMaxConnectionIdleInMillis(), TimeUnit.MILLISECONDS) .maxConnectionAge(parameter.getMaxConnectionAgeInMillis(), TimeUnit.MILLISECONDS) diff --git a/framework/src/main/java/org/tron/core/config/DefaultConfig.java b/framework/src/main/java/org/tron/core/config/DefaultConfig.java index 06d93682342..d36640b0c40 100755 --- a/framework/src/main/java/org/tron/core/config/DefaultConfig.java +++ b/framework/src/main/java/org/tron/core/config/DefaultConfig.java @@ -11,10 +11,10 @@ import org.tron.core.config.args.Args; import org.tron.core.db.RevokingDatabase; import org.tron.core.db2.core.SnapshotManager; +import org.tron.core.services.interfaceOnPBFT.HttpApiOnPBFTService; import org.tron.core.services.interfaceOnPBFT.RpcApiServiceOnPBFT; -import org.tron.core.services.interfaceOnPBFT.http.PBFT.HttpApiOnPBFTService; +import org.tron.core.services.interfaceOnSolidity.HttpApiOnSolidityService; import org.tron.core.services.interfaceOnSolidity.RpcApiServiceOnSolidity; -import org.tron.core.services.interfaceOnSolidity.http.solidity.HttpApiOnSolidityService; @Slf4j(topic = "app") @Configuration diff --git a/framework/src/main/java/org/tron/core/metrics/net/NetMetricManager.java b/framework/src/main/java/org/tron/core/metrics/net/NetMetricManager.java index 38dfccff05a..037580037e3 100644 --- a/framework/src/main/java/org/tron/core/metrics/net/NetMetricManager.java +++ b/framework/src/main/java/org/tron/core/metrics/net/NetMetricManager.java @@ -181,7 +181,7 @@ public Protocol.MetricsInfo.NetInfo getNetProtoInfo() { // udp RateInfo udpInTraffic = net.getUdpInTraffic(); Protocol.MetricsInfo.RateInfo udpInTrafficInfo = udpInTraffic.toProtoEntity(); - netInfo.setTcpOutTraffic(udpInTrafficInfo); + netInfo.setUdpInTraffic(udpInTrafficInfo); RateInfo udpOutTraffic = net.getUdpOutTraffic(); Protocol.MetricsInfo.RateInfo udpOutTrafficInfo = udpOutTraffic.toProtoEntity(); netInfo.setUdpOutTraffic(udpOutTrafficInfo); diff --git a/framework/src/main/java/org/tron/core/services/RpcApiService.java b/framework/src/main/java/org/tron/core/services/RpcApiService.java index b9cb05a3b14..9e208f25137 100755 --- a/framework/src/main/java/org/tron/core/services/RpcApiService.java +++ b/framework/src/main/java/org/tron/core/services/RpcApiService.java @@ -95,7 +95,7 @@ import org.tron.core.exception.VMIllegalException; import org.tron.core.exception.ZksnarkException; import org.tron.core.metrics.MetricsApiService; -import org.tron.core.services.http.Util; +import org.tron.core.services.http.servlets.Util; import org.tron.core.utils.TransactionUtil; import org.tron.core.zen.address.DiversifierT; import org.tron.core.zen.address.IncomingViewingKey; diff --git a/framework/src/main/java/org/tron/core/services/filter/LiteFnQueryHttpFilter.java b/framework/src/main/java/org/tron/core/services/filter/LiteFnQueryHttpFilter.java index 07025996677..11f6b2c8533 100644 --- a/framework/src/main/java/org/tron/core/services/filter/LiteFnQueryHttpFilter.java +++ b/framework/src/main/java/org/tron/core/services/filter/LiteFnQueryHttpFilter.java @@ -36,15 +36,10 @@ public static Set getFilterPaths() { filterPaths.add("/wallet/getblockbylatestnum"); filterPaths.add("/wallet/getblockbylimitnext"); filterPaths.add("/wallet/getblockbynum"); - filterPaths.add("/wallet/getmerkletreevoucherinfo"); filterPaths.add("/wallet/gettransactionbyid"); filterPaths.add("/wallet/gettransactioncountbyblocknum"); filterPaths.add("/wallet/gettransactioninfobyid"); filterPaths.add("/wallet/gettransactionreceiptbyid"); - filterPaths.add("/wallet/isspend"); - filterPaths.add("/wallet/scanandmarknotebyivk"); - filterPaths.add("/wallet/scannotebyivk"); - filterPaths.add("/wallet/scannotebyovk"); filterPaths.add("/wallet/totaltransaction"); filterPaths.add("/wallet/gettransactioninfobyblocknum"); filterPaths.add("/wallet/getmarketorderbyaccount"); @@ -61,14 +56,9 @@ public static Set getFilterPaths() { filterPaths.add("/walletsolidity/getblockbylatestnum"); filterPaths.add("/walletsolidity/getblockbylimitnext"); filterPaths.add("/walletsolidity/getblockbynum"); - filterPaths.add("/walletsolidity/getmerkletreevoucherinfo"); filterPaths.add("/walletsolidity/gettransactionbyid"); filterPaths.add("/walletsolidity/gettransactioncountbyblocknum"); filterPaths.add("/walletsolidity/gettransactioninfobyid"); - filterPaths.add("/walletsolidity/isspend"); - filterPaths.add("/walletsolidity/scanandmarknotebyivk"); - filterPaths.add("/walletsolidity/scannotebyivk"); - filterPaths.add("/walletsolidity/scannotebyovk"); filterPaths.add("/walletsolidity/gettransactioninfobyblocknum"); filterPaths.add("/walletsolidity/getmarketorderbyaccount"); filterPaths.add("/walletsolidity/getmarketorderbyid"); @@ -84,14 +74,10 @@ public static Set getFilterPaths() { filterPaths.add("/walletpbft/getblockbylatestnum"); filterPaths.add("/walletpbft/getblockbylimitnext"); filterPaths.add("/walletpbft/getblockbynum"); - filterPaths.add("/walletpbft/getmerkletreevoucherinfo"); filterPaths.add("/walletpbft/gettransactionbyid"); filterPaths.add("/walletpbft/gettransactioncountbyblocknum"); filterPaths.add("/walletpbft/gettransactioninfobyid"); - filterPaths.add("/walletpbft/isspend"); - filterPaths.add("/walletpbft/scanandmarknotebyivk"); - filterPaths.add("/walletpbft/scannotebyivk"); - filterPaths.add("/walletpbft/scannotebyovk"); + filterPaths.add("/walletpbft/gettransactioninfobyblocknum"); filterPaths.add("/walletpbft/getmarketorderbyaccount"); filterPaths.add("/walletpbft/getmarketorderbyid"); filterPaths.add("/walletpbft/getmarketpricebypair"); diff --git a/framework/src/main/java/org/tron/core/services/filter/PbftCursorFilter.java b/framework/src/main/java/org/tron/core/services/filter/PbftCursorFilter.java new file mode 100644 index 00000000000..7bc7f4fa712 --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/filter/PbftCursorFilter.java @@ -0,0 +1,15 @@ +package org.tron.core.services.filter; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.tron.core.db.Manager; +import org.tron.core.db2.core.Chainbase; + +@Component +public class PbftCursorFilter extends WalletCursorFilter { + + @Autowired + public PbftCursorFilter(Manager dbManager) { + super(dbManager, Chainbase.Cursor.PBFT); + } +} diff --git a/framework/src/main/java/org/tron/core/services/filter/SolidityCursorFilter.java b/framework/src/main/java/org/tron/core/services/filter/SolidityCursorFilter.java new file mode 100644 index 00000000000..992b1a7548c --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/filter/SolidityCursorFilter.java @@ -0,0 +1,15 @@ +package org.tron.core.services.filter; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.tron.core.db.Manager; +import org.tron.core.db2.core.Chainbase; + +@Component +public class SolidityCursorFilter extends WalletCursorFilter { + + @Autowired + public SolidityCursorFilter(Manager dbManager) { + super(dbManager, Chainbase.Cursor.SOLIDITY); + } +} diff --git a/framework/src/main/java/org/tron/core/services/filter/WalletCursorFilter.java b/framework/src/main/java/org/tron/core/services/filter/WalletCursorFilter.java new file mode 100644 index 00000000000..d7a8f43b696 --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/filter/WalletCursorFilter.java @@ -0,0 +1,56 @@ +package org.tron.core.services.filter; + +import java.io.IOException; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import org.tron.core.db.Manager; +import org.tron.core.db2.core.Chainbase; + +/** + * Selects which state view (HEAD / SOLIDITY / PBFT) the http servlets on this port read from. + * + *

The read cursor is a per-thread setting ({@code ThreadLocal} in {@code Chainbase}): it only + * decides from which snapshot the current thread starts its reads, and has no effect on any + * other thread. This filter sets the cursor before the servlet runs, so the same stateless + * servlet beans can serve {@code /wallet} (HEAD), {@code /walletsolidity} (SOLIDITY) and + * {@code /walletpbft} (PBFT) without per-port subclasses. + * + *

The cursor is always reset to HEAD in a finally block: jetty pools its worker threads, and + * a leftover cursor would leak into the next request served by the same thread. Only read-only + * endpoints may be mounted behind this filter — write paths must run with the HEAD cursor. + */ +public abstract class WalletCursorFilter implements Filter { + + private final Manager dbManager; + private final Chainbase.Cursor cursor; + + protected WalletCursorFilter(Manager dbManager, Chainbase.Cursor cursor) { + this.dbManager = dbManager; + this.cursor = cursor; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + // do nothing + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, + FilterChain filterChain) throws IOException, ServletException { + try { + dbManager.setCursor(cursor); + filterChain.doFilter(servletRequest, servletResponse); + } finally { + dbManager.resetCursor(); + } + } + + @Override + public void destroy() { + // do nothing + } +} diff --git a/framework/src/main/java/org/tron/core/services/http/FullNodeHttpApiService.java b/framework/src/main/java/org/tron/core/services/http/FullNodeHttpApiService.java index 5a3b86cb396..240b2b8e7f2 100644 --- a/framework/src/main/java/org/tron/core/services/http/FullNodeHttpApiService.java +++ b/framework/src/main/java/org/tron/core/services/http/FullNodeHttpApiService.java @@ -9,289 +9,28 @@ import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import org.tron.common.application.HttpService; import org.tron.core.config.args.Args; import org.tron.core.services.filter.HttpApiAccessFilter; import org.tron.core.services.filter.HttpInterceptor; import org.tron.core.services.filter.LiteFnQueryHttpFilter; - +import org.tron.core.services.http.servlets.GetNodeInfoServlet; +import org.tron.core.services.http.servlets.ListNodesServlet; +import org.tron.core.services.http.servlets.MetricsServlet; @Component("fullNodeHttpApiService") @Slf4j(topic = "API") public class FullNodeHttpApiService extends HttpService { - @Autowired - private GetAccountServlet getAccountServlet; - @Autowired - private TransferServlet transferServlet; - @Autowired - private BroadcastServlet broadcastServlet; - @Autowired - private UpdateAccountServlet updateAccountServlet; - @Autowired - private VoteWitnessAccountServlet voteWitnessAccountServlet; - @Autowired - private CreateAssetIssueServlet createAssetIssueServlet; - @Autowired - private UpdateWitnessServlet updateWitnessServlet; - @Autowired - private CreateAccountServlet createAccountServlet; - @Autowired - private CreateWitnessServlet createWitnessServlet; - @Autowired - private TransferAssetServlet transferAssetServlet; - @Autowired - private ParticipateAssetIssueServlet participateAssetIssueServlet; - @Autowired - private FreezeBalanceServlet freezeBalanceServlet; - @Autowired - private UnFreezeBalanceServlet unFreezeBalanceServlet; - @Autowired - private UnFreezeAssetServlet unFreezeAssetServlet; - @Autowired - private WithdrawBalanceServlet withdrawBalanceServlet; - @Autowired - private UpdateAssetServlet updateAssetServlet; - @Autowired - private ListNodesServlet listNodesServlet; - @Autowired - private GetAssetIssueByAccountServlet getAssetIssueByAccountServlet; - @Autowired - private GetAccountNetServlet getAccountNetServlet; - @Autowired - private GetAssetIssueByNameServlet getAssetIssueByNameServlet; - @Autowired - private GetAssetIssueListByNameServlet getAssetIssueListByNameServlet; - @Autowired - private GetAssetIssueByIdServlet getAssetIssueByIdServlet; - @Autowired - private GetNowBlockServlet getNowBlockServlet; - @Autowired - private GetBlockByNumServlet getBlockByNumServlet; - @Autowired - private GetBlockByIdServlet getBlockByIdServlet; - @Autowired - private GetBlockByLimitNextServlet getBlockByLimitNextServlet; - @Autowired - private GetBlockByLatestNumServlet getBlockByLatestNumServlet; - @Autowired - private GetTransactionByIdServlet getTransactionByIdServlet; - @Autowired - private GetTransactionInfoByIdServlet getTransactionInfoByIdServlet; - @Autowired - private GetTransactionReceiptByIdServlet getTransactionReceiptByIdServlet; - @Autowired - private GetTransactionCountByBlockNumServlet getTransactionCountByBlockNumServlet; - @Autowired - private ListWitnessesServlet listWitnessesServlet; - @Autowired - private GetPaginatedNowWitnessListServlet getPaginatedNowWitnessListServlet; - @Autowired - private GetAssetIssueListServlet getAssetIssueListServlet; - @Autowired - private GetPaginatedAssetIssueListServlet getPaginatedAssetIssueListServlet; - @Autowired - private GetPaginatedProposalListServlet getPaginatedProposalListServlet; - @Autowired - private GetPaginatedExchangeListServlet getPaginatedExchangeListServlet; - @Autowired - private TotalTransactionServlet totalTransactionServlet; - @Autowired - private GetNextMaintenanceTimeServlet getNextMaintenanceTimeServlet; - @Autowired - private ValidateAddressServlet validateAddressServlet; - @Autowired - private DeployContractServlet deployContractServlet; - @Autowired - private TriggerSmartContractServlet triggerSmartContractServlet; - @Autowired - private TriggerConstantContractServlet triggerConstantContractServlet; - @Autowired - private EstimateEnergyServlet estimateEnergyServlet; - @Autowired - private GetContractServlet getContractServlet; - @Autowired - private GetContractInfoServlet getContractInfoServlet; - @Autowired - private ClearABIServlet clearABIServlet; - @Autowired - private ProposalCreateServlet proposalCreateServlet; - @Autowired - private ProposalApproveServlet proposalApproveServlet; - @Autowired - private ProposalDeleteServlet proposalDeleteServlet; - @Autowired - private ListProposalsServlet listProposalsServlet; - @Autowired - private GetProposalByIdServlet getProposalByIdServlet; - @Autowired - private ExchangeCreateServlet exchangeCreateServlet; - @Autowired - private ExchangeInjectServlet exchangeInjectServlet; - @Autowired - private ExchangeTransactionServlet exchangeTransactionServlet; - @Autowired - private ExchangeWithdrawServlet exchangeWithdrawServlet; - @Autowired - private GetExchangeByIdServlet getExchangeByIdServlet; - @Autowired - private ListExchangesServlet listExchangesServlet; - @Autowired - private GetChainParametersServlet getChainParametersServlet; - @Autowired - private GetAccountResourceServlet getAccountResourceServlet; - @Autowired - private GetNodeInfoServlet getNodeInfoServlet; - @Autowired - private GetTransactionSignWeightServlet getTransactionSignWeightServlet; - @Autowired - private GetTransactionApprovedListServlet getTransactionApprovedListServlet; - @Autowired - private AccountPermissionUpdateServlet accountPermissionUpdateServlet; - @Autowired - private UpdateSettingServlet updateSettingServlet; - @Autowired - private UpdateEnergyLimitServlet updateEnergyLimitServlet; - @Autowired - private GetDelegatedResourceAccountIndexServlet getDelegatedResourceAccountIndexServlet; - @Autowired - private GetDelegatedResourceAccountIndexV2Servlet getDelegatedResourceAccountIndexV2Servlet; - @Autowired - private GetDelegatedResourceServlet getDelegatedResourceServlet; - @Autowired - private GetDelegatedResourceV2Servlet getDelegatedResourceV2Servlet; - @Autowired - private GetCanDelegatedMaxSizeServlet getCanDelegatedMaxSizeServlet; - @Autowired - private GetAvailableUnfreezeCountServlet getAvailableUnfreezeCountServlet; - @Autowired - private GetCanWithdrawUnfreezeAmountServlet getCanWithdrawUnfreezeAmountServlet; - @Autowired - private SetAccountIdServlet setAccountServlet; - @Autowired - private GetAccountByIdServlet getAccountByIdServlet; - @Autowired - private GetExpandedSpendingKeyServlet getExpandedSpendingKeyServlet; - @Autowired - private GetAkFromAskServlet getAkFromAskServlet; - @Autowired - private GetNkFromNskServlet getNkFromNskServlet; - @Autowired - private GetSpendingKeyServlet getSpendingKeyServlet; - @Autowired - private GetNewShieldedAddressServlet getNewShieldedAddressServlet; - @Autowired - private GetDiversifierServlet getDiversifierServlet; - @Autowired - private GetIncomingViewingKeyServlet getIncomingViewingKeyServlet; - @Autowired - private GetZenPaymentAddressServlet getZenPaymentAddressServlet; - @Autowired - private CreateShieldedTransactionServlet createShieldedTransactionServlet; - @Autowired - private ScanNoteByIvkServlet scanNoteByIvkServlet; - @Autowired - private ScanAndMarkNoteByIvkServlet scanAndMarkNoteByIvkServlet; - @Autowired - private ScanNoteByOvkServlet scanNoteByOvkServlet; - @Autowired - private GetRcmServlet getRcmServlet; - @Autowired - private CreateSpendAuthSigServlet createSpendAuthSigServlet; - @Autowired - private CreateShieldNullifierServlet createShieldNullifierServlet; - @Autowired - private GetShieldTransactionHashServlet getShieldTransactionHashServlet; - @Autowired - private GetMerkleTreeVoucherInfoServlet getMerkleTreeVoucherInfoServlet; - @Autowired - private IsSpendServlet isSpendServlet; - @Autowired - private CreateShieldedTransactionWithoutSpendAuthSigServlet - createShieldedTransactionWithoutSpendAuthSigServlet; - @Autowired - private BroadcastHexServlet broadcastHexServlet; - @Autowired - private GetBurnTrxServlet getBurnTrxServlet; - @Autowired - private GetBrokerageServlet getBrokerageServlet; - @Autowired - private GetRewardServlet getRewardServlet; - @Autowired - private UpdateBrokerageServlet updateBrokerageServlet; - @Autowired - private CreateCommonTransactionServlet createCommonTransactionServlet; - @Autowired - private GetTransactionInfoByBlockNumServlet getTransactionInfoByBlockNumServlet; - @Autowired - private IsShieldedTRC20ContractNoteSpentServlet isShieldedTRC20ContractNoteSpentServlet; - @Autowired - private CreateShieldedContractParametersServlet createShieldedContractParametersServlet; - @Autowired - private CreateShieldedContractParametersWithoutAskServlet - createShieldedContractParametersWithoutAskServlet; - @Autowired - private ScanShieldedTRC20NotesByIvkServlet scanShieldedTRC20NotesByIvkServlet; - @Autowired - private ScanShieldedTRC20NotesByOvkServlet scanShieldedTRC20NotesByOvkServlet; - @Autowired - private GetTriggerInputForShieldedTRC20ContractServlet - getTriggerInputForShieldedTRC20ContractServlet; - @Autowired - private MetricsServlet metricsServlet; - @Autowired - private MarketSellAssetServlet marketSellAssetServlet; - @Autowired - private MarketCancelOrderServlet marketCancelOrderServlet; - @Autowired - private GetMarketOrderByAccountServlet getMarketOrderByAccountServlet; - @Autowired - private GetMarketOrderByIdServlet getMarketOrderByIdServlet; - @Autowired - private GetMarketPriceByPairServlet getMarketPriceByPairServlet; - @Autowired - private GetMarketOrderListByPairServlet getMarketOrderListByPairServlet; - @Autowired - private GetMarketPairListServlet getMarketPairListServlet; - - @Autowired - private GetAccountBalanceServlet getAccountBalanceServlet; - - @Autowired - private GetBlockBalanceServlet getBlockBalanceServlet; - @Autowired private LiteFnQueryHttpFilter liteFnQueryHttpFilter; @Autowired private HttpApiAccessFilter httpApiAccessFilter; - @Autowired - private GetTransactionFromPendingServlet getTransactionFromPendingServlet; - @Autowired - private GetTransactionListFromPendingServlet getTransactionListFromPendingServlet; - @Autowired - private GetPendingSizeServlet getPendingSizeServlet; - @Autowired - private GetEnergyPricesServlet getEnergyPricesServlet; - @Autowired - private GetBandwidthPricesServlet getBandwidthPricesServlet; - @Autowired - private GetBlockServlet getBlockServlet; - @Autowired - private GetMemoFeePricesServlet getMemoFeePricesServlet; @Autowired - private FreezeBalanceV2Servlet freezeBalanceV2Servlet; - @Autowired - private UnFreezeBalanceV2Servlet unFreezeBalanceV2Servlet; - @Autowired - private WithdrawExpireUnfreezeServlet withdrawExpireUnfreezeServlet; - @Autowired - private DelegateResourceServlet delegateResourceServlet; - @Autowired - private UnDelegateResourceServlet unDelegateResourceServlet; - @Autowired - private CancelAllUnfreezeV2Servlet cancelAllUnfreezeV2Servlet; + private ApplicationContext appContext; public FullNodeHttpApiService() { port = Args.getInstance().getFullNodeHttpPort(); @@ -302,219 +41,28 @@ public FullNodeHttpApiService() { @Override protected void addServlet(ServletContextHandler context) { - context.addServlet(new ServletHolder(getAccountServlet), "/wallet/getaccount"); - context.addServlet(new ServletHolder(transferServlet), "/wallet/createtransaction"); - context.addServlet(new ServletHolder(broadcastServlet), "/wallet/broadcasttransaction"); - context.addServlet(new ServletHolder(updateAccountServlet), "/wallet/updateaccount"); - context.addServlet(new ServletHolder(voteWitnessAccountServlet), - "/wallet/votewitnessaccount"); - context.addServlet(new ServletHolder(createAssetIssueServlet), "/wallet/createassetissue"); - context.addServlet(new ServletHolder(updateWitnessServlet), "/wallet/updatewitness"); - context.addServlet(new ServletHolder(createAccountServlet), "/wallet/createaccount"); - context.addServlet(new ServletHolder(createWitnessServlet), "/wallet/createwitness"); - context.addServlet(new ServletHolder(transferAssetServlet), "/wallet/transferasset"); - context.addServlet(new ServletHolder(participateAssetIssueServlet), - "/wallet/participateassetissue"); - context.addServlet(new ServletHolder(freezeBalanceServlet), "/wallet/freezebalance"); - context.addServlet(new ServletHolder(unFreezeBalanceServlet), "/wallet/unfreezebalance"); - context.addServlet(new ServletHolder(unFreezeAssetServlet), "/wallet/unfreezeasset"); - context.addServlet(new ServletHolder(withdrawBalanceServlet), "/wallet/withdrawbalance"); - context.addServlet(new ServletHolder(updateAssetServlet), "/wallet/updateasset"); - context.addServlet(new ServletHolder(listNodesServlet), "/wallet/listnodes"); - context.addServlet( - new ServletHolder(getAssetIssueByAccountServlet), "/wallet/getassetissuebyaccount"); - context.addServlet(new ServletHolder(getAccountNetServlet), "/wallet/getaccountnet"); - context.addServlet(new ServletHolder(getAssetIssueByNameServlet), - "/wallet/getassetissuebyname"); - context.addServlet(new ServletHolder(getAssetIssueListByNameServlet), - "/wallet/getassetissuelistbyname"); - context.addServlet(new ServletHolder(getAssetIssueByIdServlet), "/wallet/getassetissuebyid"); - context.addServlet(new ServletHolder(getNowBlockServlet), "/wallet/getnowblock"); - context.addServlet(new ServletHolder(getBlockByNumServlet), "/wallet/getblockbynum"); - context.addServlet(new ServletHolder(getBlockByIdServlet), "/wallet/getblockbyid"); - context.addServlet(new ServletHolder(getBlockByLimitNextServlet), - "/wallet/getblockbylimitnext"); - context.addServlet(new ServletHolder(getBlockByLatestNumServlet), - "/wallet/getblockbylatestnum"); - context.addServlet(new ServletHolder(getTransactionByIdServlet), - "/wallet/gettransactionbyid"); - context.addServlet( - new ServletHolder(getTransactionInfoByIdServlet), "/wallet/gettransactioninfobyid"); - context.addServlet( - new ServletHolder(getTransactionReceiptByIdServlet), "/wallet/gettransactionreceiptbyid"); - context.addServlet( - new ServletHolder(getTransactionCountByBlockNumServlet), - "/wallet/gettransactioncountbyblocknum"); - // Get the list of witnesses info with contains vote counts for last epoch/maintenance - context.addServlet(new ServletHolder(listWitnessesServlet), "/wallet/listwitnesses"); - // Get the paged list of witnesses info with realtime vote counts - context.addServlet(new ServletHolder(getPaginatedNowWitnessListServlet), - "/wallet/getpaginatednowwitnesslist"); - context.addServlet(new ServletHolder(getAssetIssueListServlet), "/wallet/getassetissuelist"); - context.addServlet( - new ServletHolder(getPaginatedAssetIssueListServlet), - "/wallet/getpaginatedassetissuelist"); - context.addServlet( - new ServletHolder(getPaginatedProposalListServlet), "/wallet/getpaginatedproposallist"); - context.addServlet( - new ServletHolder(getPaginatedExchangeListServlet), "/wallet/getpaginatedexchangelist"); - context.addServlet(new ServletHolder(totalTransactionServlet), "/wallet/totaltransaction"); - context.addServlet( - new ServletHolder(getNextMaintenanceTimeServlet), "/wallet/getnextmaintenancetime"); - context.addServlet(new ServletHolder(validateAddressServlet), "/wallet/validateaddress"); - context.addServlet(new ServletHolder(deployContractServlet), "/wallet/deploycontract"); - context.addServlet(new ServletHolder(triggerSmartContractServlet), - "/wallet/triggersmartcontract"); - context.addServlet(new ServletHolder(triggerConstantContractServlet), - "/wallet/triggerconstantcontract"); - context.addServlet(new ServletHolder(estimateEnergyServlet), "/wallet/estimateenergy"); - context.addServlet(new ServletHolder(getContractServlet), "/wallet/getcontract"); - context.addServlet(new ServletHolder(getContractInfoServlet), "/wallet/getcontractinfo"); - context.addServlet(new ServletHolder(clearABIServlet), "/wallet/clearabi"); - context.addServlet(new ServletHolder(proposalCreateServlet), "/wallet/proposalcreate"); - context.addServlet(new ServletHolder(proposalApproveServlet), "/wallet/proposalapprove"); - context.addServlet(new ServletHolder(proposalDeleteServlet), "/wallet/proposaldelete"); - context.addServlet(new ServletHolder(listProposalsServlet), "/wallet/listproposals"); - context.addServlet(new ServletHolder(getProposalByIdServlet), "/wallet/getproposalbyid"); - context.addServlet(new ServletHolder(exchangeCreateServlet), "/wallet/exchangecreate"); - context.addServlet(new ServletHolder(exchangeInjectServlet), "/wallet/exchangeinject"); - context.addServlet(new ServletHolder(exchangeTransactionServlet), - "/wallet/exchangetransaction"); - context.addServlet(new ServletHolder(exchangeWithdrawServlet), "/wallet/exchangewithdraw"); - context.addServlet(new ServletHolder(getExchangeByIdServlet), "/wallet/getexchangebyid"); - context.addServlet(new ServletHolder(listExchangesServlet), "/wallet/listexchanges"); - context.addServlet(new ServletHolder(getChainParametersServlet), - "/wallet/getchainparameters"); - context.addServlet(new ServletHolder(getAccountResourceServlet), - "/wallet/getaccountresource"); - context.addServlet(new ServletHolder(getTransactionSignWeightServlet), - "/wallet/getsignweight"); - context.addServlet(new ServletHolder(getTransactionApprovedListServlet), - "/wallet/getapprovedlist"); - context.addServlet(new ServletHolder(accountPermissionUpdateServlet), - "/wallet/accountpermissionupdate"); - context.addServlet(new ServletHolder(getNodeInfoServlet), "/wallet/getnodeinfo"); - context.addServlet(new ServletHolder(updateSettingServlet), "/wallet/updatesetting"); - context.addServlet(new ServletHolder(updateEnergyLimitServlet), "/wallet/updateenergylimit"); - context.addServlet(new ServletHolder(getDelegatedResourceServlet), - "/wallet/getdelegatedresource"); - context.addServlet(new ServletHolder(getDelegatedResourceV2Servlet), - "/wallet/getdelegatedresourcev2"); - context.addServlet(new ServletHolder(getCanDelegatedMaxSizeServlet), - "/wallet/getcandelegatedmaxsize"); - context.addServlet(new ServletHolder(getAvailableUnfreezeCountServlet), - "/wallet/getavailableunfreezecount"); - context.addServlet(new ServletHolder(getCanWithdrawUnfreezeAmountServlet), - "/wallet/getcanwithdrawunfreezeamount"); - context.addServlet( - new ServletHolder(getDelegatedResourceAccountIndexServlet), - "/wallet/getdelegatedresourceaccountindex"); - context.addServlet( - new ServletHolder(getDelegatedResourceAccountIndexV2Servlet), - "/wallet/getdelegatedresourceaccountindexv2"); - context.addServlet(new ServletHolder(setAccountServlet), "/wallet/setaccountid"); - context.addServlet(new ServletHolder(getAccountByIdServlet), "/wallet/getaccountbyid"); - context - .addServlet(new ServletHolder(getExpandedSpendingKeyServlet), - "/wallet/getexpandedspendingkey"); - context.addServlet(new ServletHolder(getAkFromAskServlet), "/wallet/getakfromask"); - context.addServlet(new ServletHolder(getNkFromNskServlet), "/wallet/getnkfromnsk"); - context.addServlet(new ServletHolder(getSpendingKeyServlet), "/wallet/getspendingkey"); - context - .addServlet(new ServletHolder(getNewShieldedAddressServlet), - "/wallet/getnewshieldedaddress"); - context.addServlet(new ServletHolder(getDiversifierServlet), "/wallet/getdiversifier"); - context.addServlet(new ServletHolder(getIncomingViewingKeyServlet), - "/wallet/getincomingviewingkey"); - context.addServlet(new ServletHolder(getZenPaymentAddressServlet), - "/wallet/getzenpaymentaddress"); - // context.addServlet(new ServletHolder(createShieldedTransactionServlet), - // "/wallet/createshieldedtransaction"); - // context.addServlet(new ServletHolder(createShieldedTransactionWithoutSpendAuthSigServlet), - // "/wallet/createshieldedtransactionwithoutspendauthsig"); - // context.addServlet(new ServletHolder(scanNoteByIvkServlet), "/wallet/scannotebyivk"); - // context.addServlet(new ServletHolder(scanAndMarkNoteByIvkServlet), - // "/wallet/scanandmarknotebyivk"); - // context.addServlet(new ServletHolder(scanNoteByOvkServlet), "/wallet/scannotebyovk"); - context.addServlet(new ServletHolder(getRcmServlet), "/wallet/getrcm"); - // context.addServlet(new ServletHolder(getMerkleTreeVoucherInfoServlet), - // "/wallet/getmerkletreevoucherinfo"); - // context.addServlet(new ServletHolder(isSpendServlet), "/wallet/isspend"); - context.addServlet(new ServletHolder(createSpendAuthSigServlet), - "/wallet/createspendauthsig"); - // context.addServlet(new ServletHolder(createShieldNullifierServlet), - // "/wallet/createshieldnullifier"); - // context.addServlet(new ServletHolder(getShieldTransactionHashServlet), - // "/wallet/getshieldtransactionhash"); - - context - .addServlet(new ServletHolder(isShieldedTRC20ContractNoteSpentServlet), - "/wallet/isshieldedtrc20contractnotespent"); - context.addServlet(new ServletHolder(createShieldedContractParametersServlet), - "/wallet/createshieldedcontractparameters"); - context.addServlet(new ServletHolder(createShieldedContractParametersWithoutAskServlet), - "/wallet/createshieldedcontractparameterswithoutask"); - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByIvkServlet), - "/wallet/scanshieldedtrc20notesbyivk"); - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByOvkServlet), - "/wallet/scanshieldedtrc20notesbyovk"); - context.addServlet(new ServletHolder(getTriggerInputForShieldedTRC20ContractServlet), - "/wallet/gettriggerinputforshieldedtrc20contract"); - - context.addServlet(new ServletHolder(broadcastHexServlet), "/wallet/broadcasthex"); - context.addServlet(new ServletHolder(getBrokerageServlet), "/wallet/getBrokerage"); - context.addServlet(new ServletHolder(getRewardServlet), "/wallet/getReward"); - context.addServlet(new ServletHolder(updateBrokerageServlet), "/wallet/updateBrokerage"); - context.addServlet(new ServletHolder(createCommonTransactionServlet), - "/wallet/createCommonTransaction"); - context.addServlet(new ServletHolder(getTransactionInfoByBlockNumServlet), - "/wallet/gettransactioninfobyblocknum"); - context.addServlet(new ServletHolder(listNodesServlet), "/net/listnodes"); - - context.addServlet(new ServletHolder(metricsServlet), "/monitor/getstatsinfo"); - context.addServlet(new ServletHolder(getNodeInfoServlet), "/monitor/getnodeinfo"); - context.addServlet(new ServletHolder(marketSellAssetServlet), "/wallet/marketsellasset"); - context.addServlet(new ServletHolder(marketCancelOrderServlet), "/wallet/marketcancelorder"); - context.addServlet(new ServletHolder(getMarketOrderByAccountServlet), - "/wallet/getmarketorderbyaccount"); - context.addServlet(new ServletHolder(getMarketOrderByIdServlet), - "/wallet/getmarketorderbyid"); - context.addServlet(new ServletHolder(getMarketPriceByPairServlet), - "/wallet/getmarketpricebypair"); - context.addServlet(new ServletHolder(getMarketOrderListByPairServlet), - "/wallet/getmarketorderlistbypair"); - context.addServlet(new ServletHolder(getMarketPairListServlet), - "/wallet/getmarketpairlist"); - - context.addServlet(new ServletHolder(getAccountBalanceServlet), - "/wallet/getaccountbalance"); - context.addServlet(new ServletHolder(getBlockBalanceServlet), - "/wallet/getblockbalance"); - context.addServlet(new ServletHolder(getBurnTrxServlet), "/wallet/getburntrx"); - context.addServlet(new ServletHolder(getTransactionFromPendingServlet), - "/wallet/gettransactionfrompending"); - context.addServlet(new ServletHolder(getTransactionListFromPendingServlet), - "/wallet/gettransactionlistfrompending"); - context.addServlet(new ServletHolder(getPendingSizeServlet), "/wallet/getpendingsize"); - context.addServlet(new ServletHolder(getEnergyPricesServlet), "/wallet/getenergyprices"); - context.addServlet(new ServletHolder(getBandwidthPricesServlet), - "/wallet/getbandwidthprices"); - context.addServlet(new ServletHolder(getBlockServlet), "/wallet/getblock"); - context.addServlet(new ServletHolder(getMemoFeePricesServlet), "/wallet/getmemofee"); - - context.addServlet(new ServletHolder(freezeBalanceV2Servlet), - "/wallet/freezebalancev2"); - context.addServlet(new ServletHolder(unFreezeBalanceV2Servlet), - "/wallet/unfreezebalancev2"); - context.addServlet(new ServletHolder(withdrawExpireUnfreezeServlet), - "/wallet/withdrawexpireunfreeze"); - context.addServlet(new ServletHolder(delegateResourceServlet), - "/wallet/delegateresource"); - context.addServlet(new ServletHolder(unDelegateResourceServlet), - "/wallet/undelegateresource"); - context.addServlet(new ServletHolder(cancelAllUnfreezeV2Servlet), - "/wallet/cancelallunfreezev2"); + addServletsFromRegistry(context); + } + /** + * Registry-driven registration: mounts every endpoint the registry declares for the FULL + * surface under the /wallet prefix, resolving servlet beans from the application context. + * The three root-mounted endpoints (net / monitor) are not under /wallet and are mounted + * explicitly; their paths must stay listed in the access-filter pathSpecs in + * {@link #addFilter}. + */ + protected void addServletsFromRegistry(ServletContextHandler context) { + for (HttpApiRegistry.Entry def : HttpApiRegistry.forSurface(HttpApi.Surface.FULL)) { + context.addServlet(new ServletHolder(appContext.getBean(def.getServlet())), + "/wallet/" + def.getSuffix()); + } + // root-mounted endpoints, not under the /wallet prefix + context.addServlet(new ServletHolder(appContext.getBean(ListNodesServlet.class)), + "/net/listnodes"); + context.addServlet(new ServletHolder(appContext.getBean(MetricsServlet.class)), + "/monitor/getstatsinfo"); + context.addServlet(new ServletHolder(appContext.getBean(GetNodeInfoServlet.class)), + "/monitor/getnodeinfo"); } @Override diff --git a/framework/src/main/java/org/tron/core/services/http/HttpApi.java b/framework/src/main/java/org/tron/core/services/http/HttpApi.java new file mode 100644 index 00000000000..f064fb0ea20 --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/http/HttpApi.java @@ -0,0 +1,58 @@ +package org.tron.core.services.http; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Declares one http endpoint on the servlet that serves it: the path suffix it is mounted under, + * whether it mutates state, and the surfaces (http services) it is exposed on. + * + *

This annotation is the single declaration of an endpoint's exposure. {@link HttpApiRegistry} + * derives a read-only registry and the audit matrix from it, so no hand-maintained table repeats + * the information and an endpoint cannot drift between its implementation and its registration. + * + *

Deliberately not {@code @Inherited}, and read only via + * {@link Class#getDeclaredAnnotation}. Servlets in this code base have historically been + * subclassed to vary behaviour. If the annotation were inheritable, or were looked up with a + * superclass-walking helper such as Spring's {@code AnnotatedElementUtils#findMergedAnnotation}, + * any future subclass would silently inherit its parent's suffix, access and surfaces: a + * {@code WRITE} endpoint could reach a cursor surface without anyone declaring it. + * {@link HttpApiRegistry} asserts both properties at startup so the guarantee cannot be removed + * by accident. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface HttpApi { + + /** Path suffix the endpoint is mounted under, with no leading slash and no {@code '/'}. */ + String value(); + + /** Whether the endpoint mutates chain state. */ + Access access(); + + /** Http services the endpoint is exposed on; must not be empty. */ + Surface[] surfaces(); + + /** + * Http services an endpoint can be exposed on. FULL / SOLIDITY / PBFT are the three + * services run by the FullNode process (its HEAD, solidified and PBFT-finalized views); + * SOLIDITY_NODE is run only when a node starts as a standalone SolidityNode process. + */ + enum Surface { + FULL, SOLIDITY, PBFT, SOLIDITY_NODE + } + + /** + * READ: no state mutation — queries, crypto derivation and constant VM calls. + * BUILD: no state mutation — composes an unsigned transaction, or the parameters for one, + * for the client to sign and broadcast. + * WRITE: pushes a transaction into the chain. + */ + enum Access { + READ, BUILD, WRITE + } +} diff --git a/framework/src/main/java/org/tron/core/services/http/HttpApiExcluded.java b/framework/src/main/java/org/tron/core/services/http/HttpApiExcluded.java new file mode 100644 index 00000000000..1f126b6511b --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/http/HttpApiExcluded.java @@ -0,0 +1,27 @@ +package org.tron.core.services.http; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks a concrete servlet under the registry-managed package as deliberately not exposed through + * {@link HttpApiRegistry}, with the reason recorded on the class itself. + * + *

{@link HttpApiRegistry} requires every concrete servlet in that package to carry either + * {@link HttpApi} or this annotation. Without that rule a servlet could be added and simply never + * registered — the silent-omission failure this refactor exists to remove, only moved from the + * registration lists to the annotations. Opting out is therefore an explicit, reviewable act. + * + *

Like {@link HttpApi} this is not {@code @Inherited} and is read only as a declared annotation. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface HttpApiExcluded { + + /** Why the servlet is not registered; must not be blank. */ + String value(); +} diff --git a/framework/src/main/java/org/tron/core/services/http/HttpApiRegistry.java b/framework/src/main/java/org/tron/core/services/http/HttpApiRegistry.java new file mode 100644 index 00000000000..90dd579d641 --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/http/HttpApiRegistry.java @@ -0,0 +1,238 @@ +package org.tron.core.services.http; + +import java.lang.annotation.Inherited; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Pattern; +import javax.servlet.http.HttpServlet; +import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; +import org.springframework.core.annotation.AnnotatedElementUtils; +import org.springframework.core.type.filter.AssignableTypeFilter; +import org.springframework.stereotype.Component; +import org.tron.core.exception.TronError; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** + * Read-only view of the node's http endpoints, derived at class-load from the {@link HttpApi} + * annotation declared on each servlet. No hand-maintained table repeats the metadata: the + * annotation is the single declaration and this registry is computed from it, so an endpoint + * cannot drift between its implementation and its registration. + * + *

The whole table is built and validated when this class is first touched — which happens + * while a service mounts its servlets, before any Jetty bind, and covers every surface whether + * or not that surface is enabled on the node. A table that breaks an invariant aborts the boot + * with {@link TronError.ErrCode#API_SERVER_INIT}. Invariants: + * + *

    + *
  • every concrete top-level servlet under {@value #PACKAGE} declares exactly one of + * {@link HttpApi} or {@link HttpApiExcluded} — a servlet cannot be added and silently left + * unmounted;
  • + *
  • conversely a servlet that could never be mounted (abstract, or nested inside another + * class) must declare neither — otherwise its endpoint would be silently dropped;
  • + *
  • each {@code (surface, suffix)} pair is unique;
  • + *
  • suffixes are a single path token — {@value #SUFFIX_SYNTAX} — so a suffix can never turn + * into a Jetty wildcard or otherwise malformed path spec;
  • + *
  • every {@link HttpApi} servlet is a Spring {@link Component} bean;
  • + *
  • every endpoint whose access is not {@link Access#READ} is exposed on the FULL surface + * only — a cursor surface (SOLIDITY / PBFT) must never run a write path on a + * cursor-switched thread, and the standalone SolidityNode surface cannot propagate + * transactions.
  • + *
+ * + *

Annotations are read with {@link Class#getDeclaredAnnotation} and {@link HttpApi} is not + * {@link Inherited}, asserted below, so a servlet subclass can never inherit its parent's + * exposure — the failure mode the removed cursor-wrapper subclasses would otherwise reintroduce. + */ +public final class HttpApiRegistry { + + static final String PACKAGE = "org.tron.core.services.http.servlets"; + + /** Human-readable form of {@link #SUFFIX_PATTERN}, quoted in the boot failure message. */ + static final String SUFFIX_SYNTAX = "[A-Za-z0-9_.-]+"; + + /** + * A suffix is concatenated into a jetty path spec ("/wallet/" + suffix), so it must be a single + * path token. Anything outside this set could change how jetty matches the mapping — {@code *} + * in particular turns the mount into a prefix wildcard that swallows every sibling endpoint — + * or produce a path that cannot be requested at all. + */ + private static final Pattern SUFFIX_PATTERN = Pattern.compile(SUFFIX_SYNTAX); + + private static final List ENTRIES = init(); + + private HttpApiRegistry() { + } + + /** One declared endpoint: its suffix, servlet type and exposed surfaces. */ + public static final class Entry { + + private final String suffix; + private final Class servlet; + private final EnumSet surfaces; + + private Entry(String suffix, Class servlet, + EnumSet surfaces) { + this.suffix = suffix; + this.servlet = servlet; + this.surfaces = surfaces; + } + + public String getSuffix() { + return suffix; + } + + public Class getServlet() { + return servlet; + } + + public Set getSurfaces() { + return Collections.unmodifiableSet(surfaces); + } + } + + /** Endpoints exposed on {@code surface}, ordered by suffix. */ + public static List forSurface(Surface surface) { + List result = new ArrayList<>(); + for (Entry entry : ENTRIES) { + if (entry.surfaces.contains(surface)) { + result.add(entry); + } + } + return Collections.unmodifiableList(result); + } + + private static List init() { + try { + List entries = buildFromPackage(PACKAGE); + if (entries.isEmpty()) { + // a broken classpath scan (packaging / classloader) would otherwise leave the node with + // no http api and no error; fail the boot loudly instead + throw new IllegalStateException("no http endpoints discovered in " + PACKAGE); + } + return entries; + } catch (RuntimeException | Error e) { + // any failure building the table — an invariant violation (IllegalStateException), a broken + // classpath scan, or a servlet's own static init blowing up in Class.forName — means the + // http api surface is not serviceable. Route every such failure through the standard exit + // (logged, System.exit) rather than let it escape this static initializer as an + // ExceptionInInitializerError that carries no TronError for ExitManager to unwrap. + throw new TronError(e, TronError.ErrCode.API_SERVER_INIT); + } + } + + /** + * Every {@link HttpServlet} class in {@code pkg}, including the abstract and nested ones that + * cannot be mounted. Those are still scanned so {@link #buildFromPackage} can reject one that + * declares an endpoint, rather than dropping it silently. + */ + private static List> scanAllServlets(String pkg) { + ClassPathScanningCandidateComponentProvider scanner = + new ClassPathScanningCandidateComponentProvider(false) { + @Override + protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) { + return true; + } + }; + scanner.addIncludeFilter(new AssignableTypeFilter(HttpServlet.class)); + List> classes = new ArrayList<>(); + for (BeanDefinition bean : scanner.findCandidateComponents(pkg)) { + classes.add(load(bean.getBeanClassName())); + } + return classes; + } + + /** Whether {@code clazz} can be resolved as a bean and mounted as an endpoint servlet. */ + private static boolean isMountable(Class clazz) { + return clazz.getEnclosingClass() == null && !Modifier.isAbstract(clazz.getModifiers()); + } + + /** Builds and validates the registry from the servlets in {@code pkg}; visible for testing. */ + static List buildFromPackage(String pkg) { + if (HttpApi.class.isAnnotationPresent(Inherited.class)) { + throw new IllegalStateException( + "@HttpApi must not be @Inherited: a subclass would inherit its parent's exposure"); + } + List entries = new ArrayList<>(); + Set mounts = new TreeSet<>(); + for (Class clazz : scanAllServlets(pkg)) { + HttpApi api = clazz.getDeclaredAnnotation(HttpApi.class); + HttpApiExcluded excluded = clazz.getDeclaredAnnotation(HttpApiExcluded.class); + if (!isMountable(clazz)) { + // an abstract base or a nested helper is not an endpoint; it may hold neither annotation, + // because declaring one would promise an endpoint that can never be mounted + if (api != null || excluded != null) { + throw new IllegalStateException(clazz.getName() + + " cannot be mounted and must declare neither @HttpApi nor @HttpApiExcluded:" + + " an endpoint servlet must be a concrete top-level class"); + } + continue; + } + if ((api == null) == (excluded == null)) { + throw new IllegalStateException(clazz.getName() + + " must declare exactly one of @HttpApi or @HttpApiExcluded"); + } + if (api == null) { + continue; + } + Entry entry = validate(clazz, api); + for (Surface surface : entry.surfaces) { + if (!mounts.add(surface + " " + entry.suffix)) { + throw new IllegalStateException( + "duplicate endpoint (" + surface + ", " + entry.suffix + ")"); + } + } + entries.add(entry); + } + entries.sort(Comparator.comparing(Entry::getSuffix)); + return Collections.unmodifiableList(entries); + } + + private static Entry validate(Class clazz, HttpApi api) { + // get semantics: a direct @Component or any Spring stereotype meta-annotated with it, but + // never one inherited from a superclass + if (!AnnotatedElementUtils.isAnnotated(clazz, Component.class)) { + throw new IllegalStateException(clazz.getName() + " with @HttpApi must be a @Component bean"); + } + // validate api path suffix value + String suffix = api.value(); + if (suffix == null || suffix.trim().isEmpty()) { + throw new IllegalStateException(clazz.getName() + " has a blank @HttpApi suffix"); + } + if (suffix.contains("/")) { + throw new IllegalStateException(clazz.getName() + " suffix must not contain '/': " + suffix); + } + if (!SUFFIX_PATTERN.matcher(suffix).matches()) { + throw new IllegalStateException(clazz.getName() + " suffix must be a single path token (" + + SUFFIX_SYNTAX + "), found: '" + suffix + "'"); + } + // validate surface + if (api.surfaces().length == 0) { + throw new IllegalStateException(clazz.getName() + " must declare at least one surface"); + } + EnumSet surfaces = EnumSet.copyOf(Arrays.asList(api.surfaces())); + if (api.access() != Access.READ && !surfaces.equals(EnumSet.of(Surface.FULL))) { + throw new IllegalStateException(String.format( + "%s is %s and may only be exposed on the FULL surface, found %s", + clazz.getName(), api.access(), surfaces)); + } + return new Entry(suffix, clazz.asSubclass(HttpServlet.class), surfaces); + } + + private static Class load(String name) { + try { + return Class.forName(name); + } catch (ClassNotFoundException e) { + throw new IllegalStateException("cannot load servlet " + name, e); + } + } +} diff --git a/framework/src/main/java/org/tron/core/services/http/AccountPermissionUpdateServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/AccountPermissionUpdateServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/AccountPermissionUpdateServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/AccountPermissionUpdateServlet.java index 6fe83eff8be..8b45a7bff5f 100644 --- a/framework/src/main/java/org/tron/core/services/http/AccountPermissionUpdateServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/AccountPermissionUpdateServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AccountContract.AccountPermissionUpdateContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "accountpermissionupdate", access = Access.BUILD, + surfaces = {Surface.FULL}) public class AccountPermissionUpdateServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/BroadcastHexServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/BroadcastHexServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/BroadcastHexServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/BroadcastHexServlet.java index 5d59df59678..42ed9d5a168 100644 --- a/framework/src/main/java/org/tron/core/services/http/BroadcastHexServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/BroadcastHexServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -10,11 +10,16 @@ import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; @Component @Slf4j(topic = "API") +@HttpApi(value = "broadcasthex", access = Access.WRITE, + surfaces = {Surface.FULL}) public class BroadcastHexServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/BroadcastServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/BroadcastServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/BroadcastServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/BroadcastServlet.java index 370a81eef4e..706467569e0 100644 --- a/framework/src/main/java/org/tron/core/services/http/BroadcastServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/BroadcastServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,12 +9,16 @@ import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; - @Component @Slf4j(topic = "API") +@HttpApi(value = "broadcasttransaction", access = Access.WRITE, + surfaces = {Surface.FULL}) public class BroadcastServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CancelAllUnfreezeV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CancelAllUnfreezeV2Servlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/CancelAllUnfreezeV2Servlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CancelAllUnfreezeV2Servlet.java index a2d4571be27..3e0099c57b4 100644 --- a/framework/src/main/java/org/tron/core/services/http/CancelAllUnfreezeV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CancelAllUnfreezeV2Servlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,6 +6,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; @@ -14,6 +17,8 @@ @Component @Slf4j(topic = "API") +@HttpApi(value = "cancelallunfreezev2", access = Access.BUILD, + surfaces = {Surface.FULL}) public class CancelAllUnfreezeV2Servlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ClearABIServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ClearABIServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/ClearABIServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ClearABIServlet.java index e0833052ce8..9543c342c23 100644 --- a/framework/src/main/java/org/tron/core/services/http/ClearABIServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ClearABIServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.ClearABIContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "clearabi", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ClearABIServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateAccountServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/CreateAccountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateAccountServlet.java index b547fd00364..c0c23400b55 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateAccountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AccountContract.AccountCreateContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "createaccount", access = Access.BUILD, + surfaces = {Surface.FULL}) public class CreateAccountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateAssetIssueServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateAssetIssueServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/CreateAssetIssueServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateAssetIssueServlet.java index bc1a33509e0..6d35b5c2763 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateAssetIssueServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateAssetIssueServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "createassetissue", access = Access.BUILD, + surfaces = {Surface.FULL}) public class CreateAssetIssueServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateCommonTransactionServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateCommonTransactionServlet.java similarity index 88% rename from framework/src/main/java/org/tron/core/services/http/CreateCommonTransactionServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateCommonTransactionServlet.java index f4b5e03db82..b4f083afb38 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateCommonTransactionServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateCommonTransactionServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.GeneratedMessageV3; import com.google.protobuf.Message; @@ -12,13 +12,17 @@ import org.tron.core.Wallet; import org.tron.core.actuator.TransactionFactory; import org.tron.core.exception.ContractValidateException; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; - @Component @Slf4j(topic = "API") +@HttpApi(value = "createCommonTransaction", access = Access.BUILD, + surfaces = {Surface.FULL}) public class CreateCommonTransactionServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateShieldNullifierServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldNullifierServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/CreateShieldNullifierServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldNullifierServlet.java index cfbc1eb48c4..31dbc0554df 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateShieldNullifierServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldNullifierServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,10 +8,11 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.api.GrpcAPI.NfParameters; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApiExcluded; @Component @Slf4j(topic = "API") +@HttpApiExcluded("shielded note API disabled on every surface (commented out upstream)") public class CreateShieldNullifierServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateShieldedContractParametersServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedContractParametersServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/CreateShieldedContractParametersServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedContractParametersServlet.java index 2b5afbbd8e2..d7a706e062a 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateShieldedContractParametersServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedContractParametersServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.PrivateShieldedTRC20Parameters; import org.tron.api.GrpcAPI.ShieldedTRC20Parameters; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "createshieldedcontractparameters", access = Access.BUILD, + surfaces = {Surface.FULL}) public class CreateShieldedContractParametersServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateShieldedContractParametersWithoutAskServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedContractParametersWithoutAskServlet.java similarity index 81% rename from framework/src/main/java/org/tron/core/services/http/CreateShieldedContractParametersWithoutAskServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedContractParametersWithoutAskServlet.java index 80a8ba53bbc..f2caa0b3896 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateShieldedContractParametersWithoutAskServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedContractParametersWithoutAskServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.PrivateShieldedTRC20ParametersWithoutAsk; import org.tron.api.GrpcAPI.ShieldedTRC20Parameters; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "createshieldedcontractparameterswithoutask", access = Access.BUILD, + surfaces = {Surface.FULL}) public class CreateShieldedContractParametersWithoutAskServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedTransactionServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedTransactionServlet.java index 2a90e2f704c..bd158e925c5 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedTransactionServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,11 +7,12 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.PrivateParameters; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApiExcluded; import org.tron.protos.Protocol.Transaction; - @Component @Slf4j(topic = "API") +@HttpApiExcluded("shielded note API disabled on every surface (commented out upstream)") public class CreateShieldedTransactionServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionWithoutSpendAuthSigServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedTransactionWithoutSpendAuthSigServlet.java similarity index 88% rename from framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionWithoutSpendAuthSigServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedTransactionWithoutSpendAuthSigServlet.java index eb870bd1721..58a5e7538eb 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionWithoutSpendAuthSigServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateShieldedTransactionWithoutSpendAuthSigServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,13 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApiExcluded; import org.tron.json.JSON; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; - @Component @Slf4j(topic = "API") +@HttpApiExcluded("shielded note API disabled on every surface (commented out upstream)") public class CreateShieldedTransactionWithoutSpendAuthSigServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateSpendAuthSigServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateSpendAuthSigServlet.java similarity index 79% rename from framework/src/main/java/org/tron/core/services/http/CreateSpendAuthSigServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateSpendAuthSigServlet.java index b2b57c9cb9d..3c6ba93cf7f 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateSpendAuthSigServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateSpendAuthSigServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,10 +8,14 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.api.GrpcAPI.SpendAuthSigParameters; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "createspendauthsig", access = Access.READ, + surfaces = {Surface.FULL}) public class CreateSpendAuthSigServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/CreateWitnessServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/CreateWitnessServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/CreateWitnessServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/CreateWitnessServlet.java index 3258dbbe6b9..6a3047ae8ee 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateWitnessServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/CreateWitnessServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.WitnessContract.WitnessCreateContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "createwitness", access = Access.BUILD, + surfaces = {Surface.FULL}) public class CreateWitnessServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/DelegateResourceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/DelegateResourceServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/DelegateResourceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/DelegateResourceServlet.java index 25641ff093c..69d5a68af45 100644 --- a/framework/src/main/java/org/tron/core/services/http/DelegateResourceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/DelegateResourceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,6 +6,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; @@ -14,6 +17,8 @@ @Component @Slf4j(topic = "API") +@HttpApi(value = "delegateresource", access = Access.BUILD, + surfaces = {Surface.FULL}) public class DelegateResourceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/DeployContractServlet.java similarity index 89% rename from framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/DeployContractServlet.java index 45a5be961e9..8aed6f71306 100644 --- a/framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/DeployContractServlet.java @@ -1,7 +1,7 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import static org.tron.core.services.http.Util.getHexAddress; -import static org.tron.core.services.http.Util.setTransactionPermissionId; +import static org.tron.core.services.http.servlets.Util.getHexAddress; +import static org.tron.core.services.http.servlets.Util.setTransactionPermissionId; import com.google.common.base.Strings; import com.google.protobuf.ByteString; @@ -13,6 +13,9 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; @@ -20,9 +23,10 @@ import org.tron.protos.contract.SmartContractOuterClass.SmartContract; import org.tron.protos.contract.SmartContractOuterClass.SmartContract.ABI; - @Component @Slf4j(topic = "API") +@HttpApi(value = "deploycontract", access = Access.BUILD, + surfaces = {Surface.FULL}) public class DeployContractServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/EstimateEnergyServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/EstimateEnergyServlet.java similarity index 90% rename from framework/src/main/java/org/tron/core/services/http/EstimateEnergyServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/EstimateEnergyServlet.java index 91d673a2d08..c39dc23b2ec 100644 --- a/framework/src/main/java/org/tron/core/services/http/EstimateEnergyServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/EstimateEnergyServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import io.netty.util.internal.StringUtil; @@ -16,12 +16,17 @@ import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.exception.ContractValidateException; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol; import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract; @Component @Slf4j(topic = "API") +@HttpApi(value = "estimateenergy", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class EstimateEnergyServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeCreateServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeCreateServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/ExchangeCreateServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ExchangeCreateServlet.java index 84707c5586f..6ef1b773766 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeCreateServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeCreateServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeCreateContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "exchangecreate", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ExchangeCreateServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeInjectServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeInjectServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/ExchangeInjectServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ExchangeInjectServlet.java index b4b2b31221e..30d6f0f0def 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeInjectServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeInjectServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeInjectContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "exchangeinject", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ExchangeInjectServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeTransactionServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeTransactionServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/ExchangeTransactionServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ExchangeTransactionServlet.java index a143cd45c70..073b37b50ad 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeTransactionServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeTransactionServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeTransactionContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "exchangetransaction", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ExchangeTransactionServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeWithdrawServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeWithdrawServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/ExchangeWithdrawServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ExchangeWithdrawServlet.java index 159f23abb22..f778ee52d1f 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeWithdrawServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ExchangeWithdrawServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeWithdrawContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "exchangewithdraw", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ExchangeWithdrawServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/FreezeBalanceServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/FreezeBalanceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/FreezeBalanceServlet.java index 2990755b928..b42dc6c1302 100644 --- a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/FreezeBalanceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.FreezeBalanceContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "freezebalance", access = Access.BUILD, + surfaces = {Surface.FULL}) public class FreezeBalanceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/FreezeBalanceV2Servlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/FreezeBalanceV2Servlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/FreezeBalanceV2Servlet.java index 95d20233898..567429c32c2 100644 --- a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/FreezeBalanceV2Servlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,6 +6,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; @@ -13,6 +16,8 @@ @Component @Slf4j(topic = "API") +@HttpApi(value = "freezebalancev2", access = Access.BUILD, + surfaces = {Surface.FULL}) public class FreezeBalanceV2Servlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountBalanceServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetAccountBalanceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAccountBalanceServlet.java index db48fc11340..52007015aa8 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountBalanceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,11 +6,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.contract.BalanceContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getaccountbalance", access = Access.READ, + surfaces = {Surface.FULL}) public class GetAccountBalanceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountByIdServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetAccountByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAccountByIdServlet.java index 96243327c70..aa7b3b5839e 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -7,12 +7,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Account; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getaccountbyid", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetAccountByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountNetServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountNetServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetAccountNetServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAccountNetServlet.java index 121a23c61ab..68507b1a6d3 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountNetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountNetServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -9,11 +9,15 @@ import org.tron.api.GrpcAPI.AccountNetMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.Account; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getaccountnet", access = Access.READ, + surfaces = {Surface.FULL}) public class GetAccountNetServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountResourceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountResourceServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/GetAccountResourceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAccountResourceServlet.java index 0e26a526a12..a50c331664b 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountResourceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountResourceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -9,10 +9,15 @@ import org.tron.api.GrpcAPI.AccountResourceMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") +@HttpApi(value = "getaccountresource", access = Access.READ, + surfaces = {Surface.FULL}) public class GetAccountResourceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetAccountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAccountServlet.java index ee5bbdf3d3a..00a8e78f106 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAccountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,12 +6,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Account; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getaccount", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetAccountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAkFromAskServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAkFromAskServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/GetAkFromAskServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAkFromAskServlet.java index c31692413a9..e57062241e1 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAkFromAskServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAkFromAskServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getakfromask", access = Access.READ, + surfaces = {Surface.FULL}) public class GetAkFromAskServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByAccountServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetAssetIssueByAccountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByAccountServlet.java index e9e85af2e81..c781d8755c5 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByAccountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -9,11 +9,15 @@ import org.tron.api.GrpcAPI.AssetIssueList; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.Account; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getassetissuebyaccount", access = Access.READ, + surfaces = {Surface.FULL}) public class GetAssetIssueByAccountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByIdServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/GetAssetIssueByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByIdServlet.java index b705c4ed0cd..85b712a3277 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,12 +6,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getassetissuebyid", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetAssetIssueByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByNameServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByNameServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/GetAssetIssueByNameServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByNameServlet.java index da6a7243f41..7d51cf31f36 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByNameServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueByNameServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -8,13 +8,17 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getassetissuebyname", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetAssetIssueByNameServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListByNameServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueListByNameServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/GetAssetIssueListByNameServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueListByNameServlet.java index 2c203ed983e..0c61732a51e 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListByNameServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueListByNameServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -10,12 +10,16 @@ import org.tron.api.GrpcAPI.AssetIssueList; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getassetissuelistbyname", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetAssetIssueListByNameServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueListServlet.java similarity index 75% rename from framework/src/main/java/org/tron/core/services/http/GetAssetIssueListServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueListServlet.java index 3968554a671..49dea552c11 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAssetIssueListServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,9 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.AssetIssueList; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getassetissuelist", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetAssetIssueListServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetAvailableUnfreezeCountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetAvailableUnfreezeCountServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetAvailableUnfreezeCountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetAvailableUnfreezeCountServlet.java index 51f78fc4390..b1f420f2f6b 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAvailableUnfreezeCountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetAvailableUnfreezeCountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -10,9 +10,14 @@ import org.tron.api.GrpcAPI; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getavailableunfreezecount", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetAvailableUnfreezeCountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBandwidthPricesServlet.java similarity index 73% rename from framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBandwidthPricesServlet.java index 09d51cc8635..dab3de8f397 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBandwidthPricesServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,9 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getbandwidthprices", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBandwidthPricesServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockBalanceServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/GetBlockBalanceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBlockBalanceServlet.java index 5217b37907a..3fa5343eecc 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockBalanceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,11 +6,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.contract.BalanceContract.BlockBalanceTrace; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getblockbalance", access = Access.READ, + surfaces = {Surface.FULL}) public class GetBlockBalanceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByIdServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetBlockByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByIdServlet.java index f7e6ac0ff7d..c069cec104f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -10,11 +10,15 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.Block; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getblockbyid", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBlockByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockByLatestNumServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByLatestNumServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetBlockByLatestNumServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByLatestNumServlet.java index 1f2eabdd8dc..7a723444a8f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockByLatestNumServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByLatestNumServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -9,10 +9,14 @@ import org.tron.api.GrpcAPI.BlockList; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getblockbylatestnum", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBlockByLatestNumServlet extends RateLimiterServlet { private static final long BLOCK_LIMIT_NUM = 100; diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockByLimitNextServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByLimitNextServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/GetBlockByLimitNextServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByLimitNextServlet.java index 3e6700a1fae..2b7e5555fe7 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockByLimitNextServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByLimitNextServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -9,10 +9,14 @@ import org.tron.api.GrpcAPI.BlockLimit; import org.tron.api.GrpcAPI.BlockList; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getblockbylimitnext", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBlockByLimitNextServlet extends RateLimiterServlet { private static final long BLOCK_LIMIT_NUM = 100; diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockByNumServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByNumServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetBlockByNumServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByNumServlet.java index 800b421ace0..8530a3e7227 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockByNumServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockByNumServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -8,11 +8,15 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.Block; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getblockbynum", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBlockByNumServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBlockServlet.java index 2320fc87c7d..32bcf3a3122 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBlockServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.common.base.Strings; import java.io.IOException; @@ -10,13 +10,17 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BlockReq; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Block; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getblock", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBlockServlet extends RateLimiterServlet { @Autowired @@ -77,9 +81,7 @@ private void fillResponse(boolean visible, BlockReq request, HttpServletResponse response.getWriter().println("{}"); } } catch (IllegalArgumentException e) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("Error", e.getMessage()); - response.getWriter().println(jsonObject.toJSONString()); + Util.writeAuditedError(e.getMessage(), response); } } diff --git a/framework/src/main/java/org/tron/core/services/http/GetBrokerageServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBrokerageServlet.java similarity index 74% rename from framework/src/main/java/org/tron/core/services/http/GetBrokerageServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBrokerageServlet.java index 1fbd94fe690..a5d89967da6 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBrokerageServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBrokerageServlet.java @@ -1,6 +1,5 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -8,10 +7,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.db.Manager; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getBrokerage", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBrokerageServlet extends RateLimiterServlet { @Autowired @@ -27,12 +30,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) { } response.getWriter().println("{\"brokerage\": " + value + "}"); } catch (DecoderException | IllegalArgumentException e) { - try { - response.getWriter() - .println("{\"Error\": " + "\"INVALID address, " + e.getMessage() + "\"}"); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.writeAuditedError(Util.INVALID_ADDRESS_MSG, response); } catch (Exception e) { Util.processError(e, response); } diff --git a/framework/src/main/java/org/tron/core/services/http/GetBurnTrxServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetBurnTrxServlet.java similarity index 71% rename from framework/src/main/java/org/tron/core/services/http/GetBurnTrxServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetBurnTrxServlet.java index ea066a6e98c..8d1a9504cab 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBurnTrxServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetBurnTrxServlet.java @@ -1,16 +1,19 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.db.Manager; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getburntrx", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetBurnTrxServlet extends RateLimiterServlet { @Autowired @@ -24,12 +27,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) { : "{\"burnTrxAmount\": " + value + "}"; response.getWriter().println(out); } catch (Exception e) { - logger.error("", e); - try { - response.getWriter().println(Util.printErrorMsg(e)); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.processServerError(e, response); } } diff --git a/framework/src/main/java/org/tron/core/services/http/GetCanDelegatedMaxSizeServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetCanDelegatedMaxSizeServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/GetCanDelegatedMaxSizeServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetCanDelegatedMaxSizeServlet.java index 924306a6a3f..ab7a8836429 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetCanDelegatedMaxSizeServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetCanDelegatedMaxSizeServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -10,9 +10,14 @@ import org.tron.api.GrpcAPI; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getcandelegatedmaxsize", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetCanDelegatedMaxSizeServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetCanWithdrawUnfreezeAmountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetCanWithdrawUnfreezeAmountServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/GetCanWithdrawUnfreezeAmountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetCanWithdrawUnfreezeAmountServlet.java index 435cca9e5fb..3b14599d05e 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetCanWithdrawUnfreezeAmountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetCanWithdrawUnfreezeAmountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -10,9 +10,14 @@ import org.tron.api.GrpcAPI; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getcanwithdrawunfreezeamount", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetCanWithdrawUnfreezeAmountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetChainParametersServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetChainParametersServlet.java similarity index 74% rename from framework/src/main/java/org/tron/core/services/http/GetChainParametersServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetChainParametersServlet.java index 18c96f4d64e..7ea45f751ca 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetChainParametersServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetChainParametersServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,10 +6,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getchainparameters", access = Access.READ, + surfaces = {Surface.FULL}) public class GetChainParametersServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetContractInfoServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetContractInfoServlet.java similarity index 90% rename from framework/src/main/java/org/tron/core/services/http/GetContractInfoServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetContractInfoServlet.java index 6a1549bd398..bada0ae6007 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetContractInfoServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetContractInfoServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,12 +7,16 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BytesMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.contract.SmartContractOuterClass.SmartContractDataWrapper; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getcontractinfo", access = Access.READ, + surfaces = {Surface.FULL}) public class GetContractInfoServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetContractServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetContractServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/GetContractServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetContractServlet.java index 3565d3121f6..8bb2add9f01 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetContractServlet.java @@ -1,6 +1,6 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import static org.tron.core.services.http.PostParams.S_VALUE; +import static org.tron.core.services.http.servlets.PostParams.S_VALUE; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,12 +9,16 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BytesMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.contract.SmartContractOuterClass.SmartContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getcontract", access = Access.READ, + surfaces = {Surface.FULL}) public class GetContractServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexServlet.java index e022c523548..744df1d63d0 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -10,12 +10,16 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.DelegatedResourceAccountIndex; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getdelegatedresourceaccountindex", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetDelegatedResourceAccountIndexServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexV2Servlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2Servlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexV2Servlet.java index 7ff517256f9..5ec1c7d738d 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexV2Servlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -10,12 +10,16 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.DelegatedResourceAccountIndex; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getdelegatedresourceaccountindexv2", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetDelegatedResourceAccountIndexV2Servlet extends RateLimiterServlet { private static final String VALUE_FIELD_NAME = "value"; diff --git a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceServlet.java index 5787aba3c93..aa5f11604e6 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -12,10 +12,14 @@ import org.tron.api.GrpcAPI.DelegatedResourceMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getdelegatedresource", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetDelegatedResourceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceV2Servlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceV2Servlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceV2Servlet.java index 632bb4f8033..a7daf26587f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetDelegatedResourceV2Servlet.java @@ -1,8 +1,7 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -12,11 +11,14 @@ import org.tron.api.GrpcAPI.DelegatedResourceMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; - - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getdelegatedresourcev2", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetDelegatedResourceV2Servlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetDiversifierServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetDiversifierServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/GetDiversifierServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetDiversifierServlet.java index e37a1d6a785..6dc1b38ed80 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetDiversifierServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetDiversifierServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -8,10 +8,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getdiversifier", access = Access.READ, + surfaces = {Surface.FULL}) public class GetDiversifierServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetEnergyPricesServlet.java similarity index 73% rename from framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetEnergyPricesServlet.java index b9b6ba0d893..47823238b7f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetEnergyPricesServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,9 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getenergyprices", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetEnergyPricesServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetExchangeByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetExchangeByIdServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/GetExchangeByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetExchangeByIdServlet.java index 1e87a4f188f..abd0007d640 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetExchangeByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetExchangeByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -9,11 +9,15 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getexchangebyid", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetExchangeByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetExpandedSpendingKeyServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetExpandedSpendingKeyServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/GetExpandedSpendingKeyServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetExpandedSpendingKeyServlet.java index a71f5db56e1..2cb50d82fdf 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetExpandedSpendingKeyServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetExpandedSpendingKeyServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.util.stream.Collectors; @@ -11,9 +11,14 @@ import org.tron.api.GrpcAPI.ExpandedSpendingKeyMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getexpandedspendingkey", access = Access.READ, + surfaces = {Surface.FULL}) public class GetExpandedSpendingKeyServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetIncomingViewingKeyServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetIncomingViewingKeyServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/GetIncomingViewingKeyServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetIncomingViewingKeyServlet.java index 4eb3a01693e..f81a151a7ba 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetIncomingViewingKeyServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetIncomingViewingKeyServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,11 +8,15 @@ import org.tron.api.GrpcAPI; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getincomingviewingkey", access = Access.READ, + surfaces = {Surface.FULL}) public class GetIncomingViewingKeyServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderByAccountServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/GetMarketOrderByAccountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderByAccountServlet.java index 1f011bb88ce..ae2be9d672f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderByAccountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -9,13 +9,17 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; import org.tron.protos.Protocol.MarketOrderList; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getmarketorderbyaccount", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetMarketOrderByAccountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderByIdServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/GetMarketOrderByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderByIdServlet.java index bdb8a4b6d3c..df4a39a8497 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.util.stream.Collectors; @@ -10,11 +10,15 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.MarketOrder; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getmarketorderbyid", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetMarketOrderByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderListByPairServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderListByPairServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetMarketOrderListByPairServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderListByPairServlet.java index 963ea880033..cef376dc603 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderListByPairServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketOrderListByPairServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -8,12 +8,16 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.MarketOrderList; import org.tron.protos.Protocol.MarketOrderPair; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getmarketorderlistbypair", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetMarketOrderListByPairServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetMarketPairListServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketPairListServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/GetMarketPairListServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetMarketPairListServlet.java index 6cb9c5d868f..1bea1cc23f7 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMarketPairListServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketPairListServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,11 +7,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.MarketOrderPairList; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getmarketpairlist", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetMarketPairListServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetMarketPriceByPairServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketPriceByPairServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetMarketPriceByPairServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetMarketPriceByPairServlet.java index b6d31e10936..74ee421384f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMarketPriceByPairServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetMarketPriceByPairServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -8,12 +8,16 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.MarketOrderPair; import org.tron.protos.Protocol.MarketPriceList; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getmarketpricebypair", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetMarketPriceByPairServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetMemoFeePricesServlet.java similarity index 77% rename from framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetMemoFeePricesServlet.java index 0da52bf9d35..64b2feb4532 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetMemoFeePricesServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,9 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getmemofee", access = Access.READ, + surfaces = {Surface.FULL}) public class GetMemoFeePricesServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetMerkleTreeVoucherInfoServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetMerkleTreeVoucherInfoServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/GetMerkleTreeVoucherInfoServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetMerkleTreeVoucherInfoServlet.java index 5c4d8895c50..8a6fc6177b6 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMerkleTreeVoucherInfoServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetMerkleTreeVoucherInfoServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,12 +6,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApiExcluded; import org.tron.protos.contract.ShieldContract.IncrementalMerkleVoucherInfo; import org.tron.protos.contract.ShieldContract.OutputPointInfo; - @Component @Slf4j(topic = "API") +@HttpApiExcluded("sapling shielded note-scan API, disabled on every surface") public class GetMerkleTreeVoucherInfoServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetNewShieldedAddressServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetNewShieldedAddressServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/GetNewShieldedAddressServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetNewShieldedAddressServlet.java index 853268b7c8c..1bbae9bcad2 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetNewShieldedAddressServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetNewShieldedAddressServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,9 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.ShieldedAddressInfo; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getnewshieldedaddress", access = Access.READ, + surfaces = {Surface.FULL}) public class GetNewShieldedAddressServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetNextMaintenanceTimeServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetNextMaintenanceTimeServlet.java similarity index 78% rename from framework/src/main/java/org/tron/core/services/http/GetNextMaintenanceTimeServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetNextMaintenanceTimeServlet.java index c93244f5782..15f658771ef 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetNextMaintenanceTimeServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetNextMaintenanceTimeServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,10 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getnextmaintenancetime", access = Access.READ, + surfaces = {Surface.FULL}) public class GetNextMaintenanceTimeServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetNkFromNskServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetNkFromNskServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/GetNkFromNskServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetNkFromNskServlet.java index 6ec2f525e1b..cb9eecdd314 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetNkFromNskServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetNkFromNskServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getnkfromnsk", access = Access.READ, + surfaces = {Surface.FULL}) public class GetNkFromNskServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetNodeInfoServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetNodeInfoServlet.java similarity index 70% rename from framework/src/main/java/org/tron/core/services/http/GetNodeInfoServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetNodeInfoServlet.java index 0b8f7b9ce2b..7a08bbab2ec 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetNodeInfoServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetNodeInfoServlet.java @@ -1,6 +1,5 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -8,11 +7,15 @@ import org.springframework.stereotype.Component; import org.tron.common.entity.NodeInfo; import org.tron.core.services.NodeInfoService; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getnodeinfo", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetNodeInfoServlet extends RateLimiterServlet { @Autowired @@ -24,12 +27,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) { response.getWriter().println(JSON.toJSONString(nodeInfo)); } catch (Exception e) { - logger.error("", e); - try { - response.getWriter().println(Util.printErrorMsg(e)); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.processServerError(e, response); } } diff --git a/framework/src/main/java/org/tron/core/services/http/GetNowBlockServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetNowBlockServlet.java similarity index 75% rename from framework/src/main/java/org/tron/core/services/http/GetNowBlockServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetNowBlockServlet.java index 56e01d557f5..bbbaca633b4 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetNowBlockServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetNowBlockServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,10 +6,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.Block; @Component @Slf4j(topic = "API") +@HttpApi(value = "getnowblock", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetNowBlockServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetPaginatedAssetIssueListServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedAssetIssueListServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetPaginatedAssetIssueListServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedAssetIssueListServlet.java index 0246979e279..00af72a8b7c 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetPaginatedAssetIssueListServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedAssetIssueListServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.AssetIssueList; import org.tron.api.GrpcAPI.PaginatedMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getpaginatedassetissuelist", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetPaginatedAssetIssueListServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetPaginatedExchangeListServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedExchangeListServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/GetPaginatedExchangeListServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedExchangeListServlet.java index 28018497952..f10f13bf91e 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetPaginatedExchangeListServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedExchangeListServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.ExchangeList; import org.tron.api.GrpcAPI.PaginatedMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getpaginatedexchangelist", access = Access.READ, + surfaces = {Surface.FULL}) public class GetPaginatedExchangeListServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetPaginatedNowWitnessListServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedNowWitnessListServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/GetPaginatedNowWitnessListServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedNowWitnessListServlet.java index e53ab6610ec..00d9b45eb8b 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetPaginatedNowWitnessListServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedNowWitnessListServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -9,10 +9,15 @@ import org.tron.api.GrpcAPI; import org.tron.core.Wallet; import org.tron.core.exception.MaintenanceUnavailableException; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; // Get the paged list of witnesses info with realtime vote counts @Component @Slf4j(topic = "API") +@HttpApi(value = "getpaginatednowwitnesslist", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetPaginatedNowWitnessListServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetPaginatedProposalListServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedProposalListServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetPaginatedProposalListServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedProposalListServlet.java index 11b2c57ff48..8808e67d3c1 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetPaginatedProposalListServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetPaginatedProposalListServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import java.util.stream.Collectors; @@ -10,9 +10,14 @@ import org.tron.api.GrpcAPI.PaginatedMessage; import org.tron.api.GrpcAPI.ProposalList; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getpaginatedproposallist", access = Access.READ, + surfaces = {Surface.FULL}) public class GetPaginatedProposalListServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetPendingSizeServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetPendingSizeServlet.java similarity index 73% rename from framework/src/main/java/org/tron/core/services/http/GetPendingSizeServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetPendingSizeServlet.java index 9788c926586..1742e32ad72 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetPendingSizeServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetPendingSizeServlet.java @@ -1,16 +1,19 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.db.Manager; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getpendingsize", access = Access.READ, + surfaces = {Surface.FULL}) public class GetPendingSizeServlet extends RateLimiterServlet { @Autowired @@ -24,12 +27,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) { : "{\"pendingSize\": " + value + "}"; response.getWriter().println(out); } catch (Exception e) { - logger.error("", e); - try { - response.getWriter().println(Util.printErrorMsg(e)); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.processServerError(e, response); } } diff --git a/framework/src/main/java/org/tron/core/services/http/GetProposalByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetProposalByIdServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetProposalByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetProposalByIdServlet.java index f57bc8b1b3f..2f8d9573e3b 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetProposalByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetProposalByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -9,12 +9,16 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Proposal; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getproposalbyid", access = Access.READ, + surfaces = {Surface.FULL}) public class GetProposalByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetRcmServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetRcmServlet.java similarity index 78% rename from framework/src/main/java/org/tron/core/services/http/GetRcmServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetRcmServlet.java index 091867455f5..8fe6276c931 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetRcmServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetRcmServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,10 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BytesMessage; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getrcm", access = Access.READ, + surfaces = {Surface.FULL}) public class GetRcmServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetRewardServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetRewardServlet.java similarity index 69% rename from framework/src/main/java/org/tron/core/services/http/GetRewardServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetRewardServlet.java index 61b88d1160f..e3ddccbcb9e 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetRewardServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetRewardServlet.java @@ -1,6 +1,5 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -8,10 +7,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.db.Manager; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getReward", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetRewardServlet extends RateLimiterServlet { @Autowired @@ -29,19 +32,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) { : "{\"reward\": " + value + "}"; response.getWriter().println(out); } catch (DecoderException | IllegalArgumentException e) { - try { - response.getWriter() - .println("{\"Error\": " + "\"INVALID address, " + e.getMessage() + "\"}"); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.writeAuditedError(Util.INVALID_ADDRESS_MSG, response); } catch (Exception e) { - logger.error("", e); - try { - response.getWriter().println(Util.printErrorMsg(e)); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.processServerError(e, response); } } diff --git a/framework/src/main/java/org/tron/core/services/http/GetShieldTransactionHashServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetShieldTransactionHashServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetShieldTransactionHashServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetShieldTransactionHashServlet.java index 64f0c7e7b28..0e5070c168f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetShieldTransactionHashServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetShieldTransactionHashServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -8,11 +8,12 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BytesMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApiExcluded; import org.tron.protos.Protocol.Transaction; - @Component @Slf4j(topic = "API") +@HttpApiExcluded("shielded note API disabled on every surface (commented out upstream)") public class GetShieldTransactionHashServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetSpendingKeyServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetSpendingKeyServlet.java similarity index 82% rename from framework/src/main/java/org/tron/core/services/http/GetSpendingKeyServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetSpendingKeyServlet.java index 23c274566ca..3ffa2122db0 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetSpendingKeyServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetSpendingKeyServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -8,9 +8,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BytesMessage; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "getspendingkey", access = Access.READ, + surfaces = {Surface.FULL}) public class GetSpendingKeyServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionApprovedListServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionApprovedListServlet.java similarity index 81% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionApprovedListServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionApprovedListServlet.java index d4d123b7efe..252889cf6e2 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionApprovedListServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionApprovedListServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,11 +7,15 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.TransactionApprovedList; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.Transaction; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getapprovedlist", access = Access.READ, + surfaces = {Surface.FULL}) public class GetTransactionApprovedListServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionByIdServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionByIdServlet.java index 49343da9070..260029bc620 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.io.IOException; @@ -11,11 +11,15 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.Transaction; - @Component @Slf4j(topic = "API") +@HttpApi(value = "gettransactionbyid", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetTransactionByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionCountByBlockNumServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionCountByBlockNumServlet.java similarity index 81% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionCountByBlockNumServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionCountByBlockNumServlet.java index 81c1ece73fb..a3d56ec3f7c 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionCountByBlockNumServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionCountByBlockNumServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import java.util.stream.Collectors; @@ -9,10 +9,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "gettransactioncountbyblocknum", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetTransactionCountByBlockNumServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionFromPendingServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionFromPendingServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionFromPendingServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionFromPendingServlet.java index 276eff62af8..d7fd07522c1 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionFromPendingServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionFromPendingServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,10 +9,14 @@ import org.tron.common.utils.ByteArray; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.db.Manager; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "gettransactionfrompending", access = Access.READ, + surfaces = {Surface.FULL}) public class GetTransactionFromPendingServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionInfoByBlockNumServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionInfoByBlockNumServlet.java index 5d0a09b1a68..6472ff737cb 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionInfoByBlockNumServlet.java @@ -1,6 +1,5 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; -import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -10,6 +9,9 @@ import org.tron.api.GrpcAPI.NumberMessage; import org.tron.api.GrpcAPI.TransactionInfoList; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONArray; import org.tron.json.JSONObject; import org.tron.protos.Protocol.TransactionInfo; @@ -17,6 +19,8 @@ @Component @Slf4j(topic = "API") +@HttpApi(value = "gettransactioninfobyblocknum", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetTransactionInfoByBlockNumServlet extends RateLimiterServlet { @Autowired @@ -52,12 +56,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) { response.getWriter().println("{}"); } } catch (Exception e) { - logger.debug("Exception: {}", e.getMessage()); - try { - response.getWriter().println(Util.printErrorMsg(e)); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.processError(e, response); } } @@ -75,12 +74,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) response.getWriter().println("{}"); } } catch (Exception e) { - logger.debug("Exception: {}", e.getMessage()); - try { - response.getWriter().println(Util.printErrorMsg(e)); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } + Util.processError(e, response); } } } diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionInfoByIdServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionInfoByIdServlet.java index 580cb4a5b66..52be3ef3f56 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionInfoByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import java.util.List; @@ -11,12 +11,16 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.TransactionInfo; import org.tron.protos.Protocol.TransactionInfo.Log; - @Component @Slf4j(topic = "API") +@HttpApi(value = "gettransactioninfobyid", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class GetTransactionInfoByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionListFromPendingServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionListFromPendingServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionListFromPendingServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionListFromPendingServlet.java index 0a70b22eebf..93601cf1b76 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionListFromPendingServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionListFromPendingServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.Collection; import javax.servlet.http.HttpServletRequest; @@ -8,10 +8,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.TransactionIdList; import org.tron.core.db.Manager; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "gettransactionlistfrompending", access = Access.READ, + surfaces = {Surface.FULL}) public class GetTransactionListFromPendingServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionReceiptByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionReceiptByIdServlet.java similarity index 86% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionReceiptByIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionReceiptByIdServlet.java index bdd46d85a88..3bf2f9eb1a3 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionReceiptByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionReceiptByIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -9,11 +9,15 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.protos.Protocol.TransactionInfo; - @Component @Slf4j(topic = "API") +@HttpApi(value = "gettransactionreceiptbyid", access = Access.READ, + surfaces = {Surface.FULL}) public class GetTransactionReceiptByIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionSignWeightServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionSignWeightServlet.java similarity index 81% rename from framework/src/main/java/org/tron/core/services/http/GetTransactionSignWeightServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionSignWeightServlet.java index bbd819d4e6d..6ae5373f665 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionSignWeightServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTransactionSignWeightServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,12 +6,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.TransactionSignWeight; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.core.utils.TransactionUtil; import org.tron.protos.Protocol.Transaction; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getsignweight", access = Access.READ, + surfaces = {Surface.FULL}) public class GetTransactionSignWeightServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetTriggerInputForShieldedTRC20ContractServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetTriggerInputForShieldedTRC20ContractServlet.java similarity index 80% rename from framework/src/main/java/org/tron/core/services/http/GetTriggerInputForShieldedTRC20ContractServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetTriggerInputForShieldedTRC20ContractServlet.java index 3a0bc4ed282..5bedddb2ddd 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTriggerInputForShieldedTRC20ContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetTriggerInputForShieldedTRC20ContractServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.api.GrpcAPI.ShieldedTRC20TriggerContractParameters; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "gettriggerinputforshieldedtrc20contract", access = Access.READ, + surfaces = {Surface.FULL}) public class GetTriggerInputForShieldedTRC20ContractServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/GetZenPaymentAddressServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/GetZenPaymentAddressServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/GetZenPaymentAddressServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/GetZenPaymentAddressServlet.java index c4f81ea7f87..b750a86f094 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetZenPaymentAddressServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/GetZenPaymentAddressServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -9,13 +9,17 @@ import org.tron.api.GrpcAPI; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.core.zen.address.DiversifierT; import org.tron.core.zen.address.IncomingViewingKey; import org.tron.json.JSONObject; - @Component @Slf4j(topic = "API") +@HttpApi(value = "getzenpaymentaddress", access = Access.READ, + surfaces = {Surface.FULL}) public class GetZenPaymentAddressServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/IsShieldedTRC20ContractNoteSpentServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/IsShieldedTRC20ContractNoteSpentServlet.java similarity index 77% rename from framework/src/main/java/org/tron/core/services/http/IsShieldedTRC20ContractNoteSpentServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/IsShieldedTRC20ContractNoteSpentServlet.java index 9e01ec8fda1..ff68577f4c2 100644 --- a/framework/src/main/java/org/tron/core/services/http/IsShieldedTRC20ContractNoteSpentServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/IsShieldedTRC20ContractNoteSpentServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI; import org.tron.api.GrpcAPI.NfTRC20Parameters; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "isshieldedtrc20contractnotespent", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class IsShieldedTRC20ContractNoteSpentServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/IsSpendServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/IsSpendServlet.java similarity index 87% rename from framework/src/main/java/org/tron/core/services/http/IsSpendServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/IsSpendServlet.java index 46120a6611d..e3aee4f902e 100644 --- a/framework/src/main/java/org/tron/core/services/http/IsSpendServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/IsSpendServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -9,10 +9,11 @@ import org.tron.api.GrpcAPI.NoteParameters; import org.tron.api.GrpcAPI.SpendResult; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApiExcluded; @Component @Slf4j(topic = "API") +@HttpApiExcluded("sapling shielded note-scan API, disabled on every surface") public class IsSpendServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/JsonFormat.java b/framework/src/main/java/org/tron/core/services/http/servlets/JsonFormat.java similarity index 99% rename from framework/src/main/java/org/tron/core/services/http/JsonFormat.java rename to framework/src/main/java/org/tron/core/services/http/servlets/JsonFormat.java index 2fa7d9fbb42..0561b9de564 100644 --- a/framework/src/main/java/org/tron/core/services/http/JsonFormat.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/JsonFormat.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; /* Copyright (c) 2009, Orbitz World Wide @@ -58,6 +58,7 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT import org.tron.common.utils.Commons; import org.tron.common.utils.StringUtil; import org.tron.core.Constant; +import org.tron.core.services.http.HttpSelfFormatFieldName; import org.tron.protos.contract.BalanceContract; /** diff --git a/framework/src/main/java/org/tron/core/services/http/ListExchangesServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ListExchangesServlet.java similarity index 71% rename from framework/src/main/java/org/tron/core/services/http/ListExchangesServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ListExchangesServlet.java index ff349ecefab..3f26bbbc905 100644 --- a/framework/src/main/java/org/tron/core/services/http/ListExchangesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ListExchangesServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,10 +6,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "listexchanges", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class ListExchangesServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ListNodesServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ListNodesServlet.java similarity index 78% rename from framework/src/main/java/org/tron/core/services/http/ListNodesServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ListNodesServlet.java index 6b7b2b251a8..d61df490b93 100644 --- a/framework/src/main/java/org/tron/core/services/http/ListNodesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ListNodesServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,9 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.NodeList; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "listnodes", access = Access.READ, + surfaces = {Surface.FULL}) public class ListNodesServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ListProposalsServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ListProposalsServlet.java similarity index 78% rename from framework/src/main/java/org/tron/core/services/http/ListProposalsServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ListProposalsServlet.java index a3b26d4afc6..cc3b9eae312 100644 --- a/framework/src/main/java/org/tron/core/services/http/ListProposalsServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ListProposalsServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,9 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.ProposalList; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "listproposals", access = Access.READ, + surfaces = {Surface.FULL}) public class ListProposalsServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ListWitnessesServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ListWitnessesServlet.java similarity index 75% rename from framework/src/main/java/org/tron/core/services/http/ListWitnessesServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ListWitnessesServlet.java index 5274d07992b..a789e10d0cd 100644 --- a/framework/src/main/java/org/tron/core/services/http/ListWitnessesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ListWitnessesServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,10 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.WitnessList; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "listwitnesses", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class ListWitnessesServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/MarketCancelOrderServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/MarketCancelOrderServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/MarketCancelOrderServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/MarketCancelOrderServlet.java index a9e27bfb8e3..b1ad8509a9b 100644 --- a/framework/src/main/java/org/tron/core/services/http/MarketCancelOrderServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/MarketCancelOrderServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.MarketContract.MarketCancelOrderContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "marketcancelorder", access = Access.BUILD, + surfaces = {Surface.FULL}) public class MarketCancelOrderServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/MarketSellAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/MarketSellAssetServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/MarketSellAssetServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/MarketSellAssetServlet.java index 12bb7e3e078..b34f3e8a4c6 100644 --- a/framework/src/main/java/org/tron/core/services/http/MarketSellAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/MarketSellAssetServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.MarketContract.MarketSellAssetContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "marketsellasset", access = Access.BUILD, + surfaces = {Surface.FULL}) public class MarketSellAssetServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/MetricsServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/MetricsServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/MetricsServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/MetricsServlet.java index aaaebb22146..d7a66488964 100644 --- a/framework/src/main/java/org/tron/core/services/http/MetricsServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/MetricsServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,10 +7,12 @@ import org.springframework.stereotype.Component; import org.tron.core.metrics.MetricsApiService; import org.tron.core.metrics.MetricsInfo; +import org.tron.core.services.http.HttpApiExcluded; import org.tron.json.JSON; @Component @Slf4j(topic = "API") +@HttpApiExcluded("root-mounted at /monitor/getstatsinfo, not a wallet endpoint") public class MetricsServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ParticipateAssetIssueServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ParticipateAssetIssueServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/ParticipateAssetIssueServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ParticipateAssetIssueServlet.java index ec5e3d956f6..b79d9ab4b88 100644 --- a/framework/src/main/java/org/tron/core/services/http/ParticipateAssetIssueServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ParticipateAssetIssueServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.ParticipateAssetIssueContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "participateassetissue", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ParticipateAssetIssueServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/PostParams.java b/framework/src/main/java/org/tron/core/services/http/servlets/PostParams.java similarity index 88% rename from framework/src/main/java/org/tron/core/services/http/PostParams.java rename to framework/src/main/java/org/tron/core/services/http/servlets/PostParams.java index 7dcb0be6ae3..c9611effda8 100644 --- a/framework/src/main/java/org/tron/core/services/http/PostParams.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/PostParams.java @@ -1,7 +1,7 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.apache.http.entity.ContentType.APPLICATION_FORM_URLENCODED; -import static org.tron.core.services.http.Util.getJsonString; +import static org.tron.core.services.http.servlets.Util.getJsonString; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; diff --git a/framework/src/main/java/org/tron/core/services/http/ProposalApproveServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ProposalApproveServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/ProposalApproveServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ProposalApproveServlet.java index dfeeb1acde5..39145400f8e 100644 --- a/framework/src/main/java/org/tron/core/services/http/ProposalApproveServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ProposalApproveServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ProposalContract.ProposalApproveContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "proposalapprove", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ProposalApproveServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ProposalCreateServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ProposalCreateServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/ProposalCreateServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ProposalCreateServlet.java index f1055e00396..86a2ca4d4a4 100644 --- a/framework/src/main/java/org/tron/core/services/http/ProposalCreateServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ProposalCreateServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ProposalContract.ProposalCreateContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "proposalcreate", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ProposalCreateServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ProposalDeleteServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ProposalDeleteServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/ProposalDeleteServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ProposalDeleteServlet.java index 8e7163f490b..2793fa47d59 100644 --- a/framework/src/main/java/org/tron/core/services/http/ProposalDeleteServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ProposalDeleteServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ProposalContract.ProposalDeleteContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "proposaldelete", access = Access.BUILD, + surfaces = {Surface.FULL}) public class ProposalDeleteServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/RateLimiterServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/RateLimiterServlet.java similarity index 97% rename from framework/src/main/java/org/tron/core/services/http/RateLimiterServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/RateLimiterServlet.java index b5ae7d58623..c96abc5d693 100644 --- a/framework/src/main/java/org/tron/core/services/http/RateLimiterServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/RateLimiterServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.common.base.Strings; import io.prometheus.client.Histogram; @@ -131,8 +131,7 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) super.service(req, resp); Metrics.histogramObserve(requestTimer); } else { - resp.getWriter() - .println(Util.printErrorMsg(new IllegalAccessException("lack of computing resources"))); + Util.writeAuditedError(Util.RATE_LIMITER_ERROR_MSG, resp); } } catch (ServletException | IOException | BadMessageException e) { throw e; diff --git a/framework/src/main/java/org/tron/core/services/http/ScanAndMarkNoteByIvkServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ScanAndMarkNoteByIvkServlet.java similarity index 94% rename from framework/src/main/java/org/tron/core/services/http/ScanAndMarkNoteByIvkServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ScanAndMarkNoteByIvkServlet.java index b91fd394442..567d35e6f6e 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanAndMarkNoteByIvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ScanAndMarkNoteByIvkServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,11 +9,13 @@ import org.tron.api.GrpcAPI.IvkDecryptAndMarkParameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApiExcluded; import org.tron.json.JSONArray; import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") +@HttpApiExcluded("sapling shielded note-scan API, disabled on every surface") public class ScanAndMarkNoteByIvkServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ScanNoteByIvkServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ScanNoteByIvkServlet.java similarity index 93% rename from framework/src/main/java/org/tron/core/services/http/ScanNoteByIvkServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ScanNoteByIvkServlet.java index c8e25a2fc37..e9e8cb19ead 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanNoteByIvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ScanNoteByIvkServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -10,11 +10,13 @@ import org.tron.api.GrpcAPI.IvkDecryptParameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApiExcluded; import org.tron.json.JSONArray; import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") +@HttpApiExcluded("sapling shielded note-scan API, disabled on every surface") public class ScanNoteByIvkServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ScanNoteByOvkServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ScanNoteByOvkServlet.java similarity index 91% rename from framework/src/main/java/org/tron/core/services/http/ScanNoteByOvkServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ScanNoteByOvkServlet.java index 1cf6363ba98..bd7491c64c9 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanNoteByOvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ScanNoteByOvkServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -10,9 +10,11 @@ import org.tron.api.GrpcAPI.OvkDecryptParameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApiExcluded; @Component @Slf4j(topic = "API") +@HttpApiExcluded("sapling shielded note-scan API, disabled on every surface") public class ScanNoteByOvkServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByIvkServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesByIvkServlet.java similarity index 91% rename from framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByIvkServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesByIvkServlet.java index d9da2453c9b..fbc82f20238 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByIvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesByIvkServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,11 +9,16 @@ import org.tron.api.GrpcAPI.IvkDecryptTRC20Parameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONArray; import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") +@HttpApi(value = "scanshieldedtrc20notesbyivk", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class ScanShieldedTRC20NotesByIvkServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByOvkServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesByOvkServlet.java similarity index 89% rename from framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByOvkServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesByOvkServlet.java index 33893347d8f..14d02f7345c 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByOvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesByOvkServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,9 +9,14 @@ import org.tron.api.GrpcAPI.OvkDecryptTRC20Parameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "scanshieldedtrc20notesbyovk", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class ScanShieldedTRC20NotesByOvkServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/SetAccountIdServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/SetAccountIdServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/SetAccountIdServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/SetAccountIdServlet.java index 2f5b9fd9cd4..4486c0b6fc5 100644 --- a/framework/src/main/java/org/tron/core/services/http/SetAccountIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/SetAccountIdServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,13 +7,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol; import org.tron.protos.contract.AccountContract.SetAccountIdContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "setaccountid", access = Access.BUILD, + surfaces = {Surface.FULL}) public class SetAccountIdServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/TotalTransactionServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/TotalTransactionServlet.java similarity index 78% rename from framework/src/main/java/org/tron/core/services/http/TotalTransactionServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/TotalTransactionServlet.java index 6af40232e8f..c7171996fb8 100644 --- a/framework/src/main/java/org/tron/core/services/http/TotalTransactionServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/TotalTransactionServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -7,10 +7,14 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.core.Wallet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; @Component @Slf4j(topic = "API") +@HttpApi(value = "totaltransaction", access = Access.READ, + surfaces = {Surface.FULL}) public class TotalTransactionServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/TransferAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/TransferAssetServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/TransferAssetServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/TransferAssetServlet.java index c8becdb9fde..f20cc4f713a 100644 --- a/framework/src/main/java/org/tron/core/services/http/TransferAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/TransferAssetServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.TransferAssetContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "transferasset", access = Access.BUILD, + surfaces = {Surface.FULL}) public class TransferAssetServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/TransferServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/TransferServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/TransferServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/TransferServlet.java index 11b2179800a..fc67cf24d91 100644 --- a/framework/src/main/java/org/tron/core/services/http/TransferServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/TransferServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.TransferContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "createtransaction", access = Access.BUILD, + surfaces = {Surface.FULL}) public class TransferServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/TriggerConstantContractServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/TriggerConstantContractServlet.java similarity index 90% rename from framework/src/main/java/org/tron/core/services/http/TriggerConstantContractServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/TriggerConstantContractServlet.java index 634165911d1..79fd4fd4e8e 100644 --- a/framework/src/main/java/org/tron/core/services/http/TriggerConstantContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/TriggerConstantContractServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import io.netty.util.internal.StringUtil; @@ -16,14 +16,18 @@ import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.exception.ContractValidateException; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "triggerconstantcontract", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY, Surface.PBFT, Surface.SOLIDITY_NODE}) public class TriggerConstantContractServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/TriggerSmartContractServlet.java similarity index 93% rename from framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/TriggerSmartContractServlet.java index bc4d9dc5f66..21fdf8580d2 100644 --- a/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/TriggerSmartContractServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import io.netty.util.internal.StringUtil; @@ -17,14 +17,18 @@ import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.exception.ContractValidateException; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "triggersmartcontract", access = Access.BUILD, + surfaces = {Surface.FULL}) public class TriggerSmartContractServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UnDelegateResourceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UnDelegateResourceServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UnDelegateResourceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UnDelegateResourceServlet.java index 140129d4e34..7743041aabe 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnDelegateResourceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UnDelegateResourceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,6 +6,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; @@ -13,6 +16,8 @@ @Component @Slf4j(topic = "API") +@HttpApi(value = "undelegateresource", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UnDelegateResourceServlet extends RateLimiterServlet { @Autowired private Wallet wallet; diff --git a/framework/src/main/java/org/tron/core/services/http/UnFreezeAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeAssetServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UnFreezeAssetServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeAssetServlet.java index a2218547b4a..d585c348e5d 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnFreezeAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeAssetServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.UnfreezeAssetContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "unfreezeasset", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UnFreezeAssetServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeBalanceServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeBalanceServlet.java index 1f893003c20..d2236c9603d 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeBalanceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.UnfreezeBalanceContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "unfreezebalance", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UnFreezeBalanceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeBalanceV2Servlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceV2Servlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeBalanceV2Servlet.java index 05644c0b941..762836ed09d 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UnFreezeBalanceV2Servlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,6 +6,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; @@ -13,6 +16,8 @@ @Component @Slf4j(topic = "API") +@HttpApi(value = "unfreezebalancev2", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UnFreezeBalanceV2Servlet extends RateLimiterServlet { @Autowired private Wallet wallet; diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateAccountServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UpdateAccountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UpdateAccountServlet.java index 532d7acf658..4ef015c8593 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateAccountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AccountContract.AccountUpdateContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "updateaccount", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UpdateAccountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateAssetServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UpdateAssetServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UpdateAssetServlet.java index e7e8179b1a4..f516c49896d 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateAssetServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.UpdateAssetContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "updateasset", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UpdateAssetServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateBrokerageServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateBrokerageServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UpdateBrokerageServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UpdateBrokerageServlet.java index e1073354ddc..82d0fa9279d 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateBrokerageServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateBrokerageServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.StorageContract.UpdateBrokerageContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "updateBrokerage", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UpdateBrokerageServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateEnergyLimitServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateEnergyLimitServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UpdateEnergyLimitServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UpdateEnergyLimitServlet.java index cd349c7e153..217c9615061 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateEnergyLimitServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateEnergyLimitServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.UpdateEnergyLimitContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "updateenergylimit", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UpdateEnergyLimitServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateSettingServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateSettingServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UpdateSettingServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UpdateSettingServlet.java index e58f02df157..36311d05170 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateSettingServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateSettingServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.UpdateSettingContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "updatesetting", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UpdateSettingServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateWitnessServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateWitnessServlet.java similarity index 83% rename from framework/src/main/java/org/tron/core/services/http/UpdateWitnessServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/UpdateWitnessServlet.java index 6b0c4449e88..151f919dc4a 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateWitnessServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/UpdateWitnessServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -6,14 +6,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.WitnessContract.WitnessUpdateContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "updatewitness", access = Access.BUILD, + surfaces = {Surface.FULL}) public class UpdateWitnessServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/servlets/Util.java similarity index 92% rename from framework/src/main/java/org/tron/core/services/http/Util.java rename to framework/src/main/java/org/tron/core/services/http/servlets/Util.java index 5be2495e1f7..caaa26cadc4 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/Util.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.apache.commons.lang3.StringUtils.EMPTY; import static org.tron.common.utils.Commons.decodeFromBase58Check; @@ -48,7 +48,9 @@ import org.tron.core.capsule.TransactionCapsule; import org.tron.core.config.args.Args; import org.tron.core.db.TransactionTrace; -import org.tron.core.services.http.JsonFormat.ParseException; +import org.tron.core.exception.ContractValidateException; +import org.tron.core.exception.MaintenanceUnavailableException; +import org.tron.core.services.http.servlets.JsonFormat.ParseException; import org.tron.json.JSON; import org.tron.json.JSONArray; import org.tron.json.JSONException; @@ -65,6 +67,10 @@ @Slf4j(topic = "API") public class Util { + private static final String INTERNAL_SERVER_ERROR = "internal server error"; + public static final String RATE_LIMITER_ERROR_MSG = "lack of computing resources"; + static final String INVALID_ADDRESS_MSG = "INVALID address"; + public static final String EVENTS_DEPRECATED_MSG = "'events' field is deprecated and no longer supported"; @@ -114,12 +120,31 @@ public static String printTransactionFee(String transactionFee) { return jsonObject.toJSONString(); } - public static String printErrorMsg(Exception e) { + private static String printErrorMsg(String msg) { JSONObject jsonObject = new JSONObject(); - jsonObject.put("Error", e.getClass() + " : " + e.getMessage()); + jsonObject.put("Error", msg); return jsonObject.toJSONString(); } + private static String clientMessage(Exception e) { + if (e == null) { + return INTERNAL_SERVER_ERROR; + } + + Class type = e.getClass(); + if (type == IllegalArgumentException.class) { + return EVENTS_DEPRECATED_MSG.equals(e.getMessage()) + ? EVENTS_DEPRECATED_MSG : INTERNAL_SERVER_ERROR; + } + if (type == ParseException.class + || type == ContractValidateException.class + || type == MaintenanceUnavailableException.class) { + String message = e.getMessage(); + return StringUtils.isBlank(message) ? INTERNAL_SERVER_ERROR : message; + } + return INTERNAL_SERVER_ERROR; + } + public static String printBlockList(BlockList list, boolean selfType) { List blocks = list.getBlockList(); JSONObject jsonObject = new JSONObject(); @@ -526,11 +551,24 @@ public static String getMemo(byte[] memo) { } public static void processError(Exception e, HttpServletResponse response) { - logger.debug(e.getMessage(), e); + logger.debug("HTTP request failed", e); + writeAuditedError(clientMessage(e), response); + } + + // For catch blocks that cover server-side work only, so the failure stays visible at the + // default log level. The Exception entry point above keeps debug because its callers also + // cover request parsing, which an unauthenticated client can fail cheaply and repeatedly. + static void processServerError(Exception e, HttpServletResponse response) { + logger.error("HTTP request failed", e); + writeAuditedError(clientMessage(e), response); + } + + // Bypasses clientMessage: callers must pass audited fixed or pre-existing client texts only. + static void writeAuditedError(String msg, HttpServletResponse response) { try { - response.getWriter().println(Util.printErrorMsg(e)); + response.getWriter().println(Util.printErrorMsg(msg)); } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); + logger.debug("Failed to write HTTP error response", ioe); } } diff --git a/framework/src/main/java/org/tron/core/services/http/ValidateAddressServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/ValidateAddressServlet.java similarity index 88% rename from framework/src/main/java/org/tron/core/services/http/ValidateAddressServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/ValidateAddressServlet.java index 07eecfc5466..bddb224c8d2 100644 --- a/framework/src/main/java/org/tron/core/services/http/ValidateAddressServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/ValidateAddressServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.IOException; import java.util.Base64; @@ -10,12 +10,16 @@ import org.tron.common.utils.ByteArray; import org.tron.common.utils.Commons; import org.tron.common.utils.DecodeUtil; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; - @Component @Slf4j(topic = "API") +@HttpApi(value = "validateaddress", access = Access.READ, + surfaces = {Surface.FULL}) public class ValidateAddressServlet extends RateLimiterServlet { private String validAddress(String input) { @@ -47,7 +51,7 @@ private String validAddress(String input) { } } catch (Exception e) { result = false; - msg = e.getMessage(); + msg = "Invalid address"; } JSONObject jsonAddress = new JSONObject(); diff --git a/framework/src/main/java/org/tron/core/services/http/VoteWitnessAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/VoteWitnessAccountServlet.java similarity index 84% rename from framework/src/main/java/org/tron/core/services/http/VoteWitnessAccountServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/VoteWitnessAccountServlet.java index f3695b83de8..ef47f033700 100644 --- a/framework/src/main/java/org/tron/core/services/http/VoteWitnessAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/VoteWitnessAccountServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.WitnessContract.VoteWitnessContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "votewitnessaccount", access = Access.BUILD, + surfaces = {Surface.FULL}) public class VoteWitnessAccountServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/WithdrawBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/WithdrawBalanceServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/WithdrawBalanceServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/WithdrawBalanceServlet.java index 33faa01866c..7452ce8ade9 100644 --- a/framework/src/main/java/org/tron/core/services/http/WithdrawBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/WithdrawBalanceServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,14 +7,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.WithdrawBalanceContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "withdrawbalance", access = Access.BUILD, + surfaces = {Surface.FULL}) public class WithdrawBalanceServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/WithdrawExpireUnfreezeServlet.java b/framework/src/main/java/org/tron/core/services/http/servlets/WithdrawExpireUnfreezeServlet.java similarity index 85% rename from framework/src/main/java/org/tron/core/services/http/WithdrawExpireUnfreezeServlet.java rename to framework/src/main/java/org/tron/core/services/http/servlets/WithdrawExpireUnfreezeServlet.java index 7e5f3f96c57..15b0294bfa5 100644 --- a/framework/src/main/java/org/tron/core/services/http/WithdrawExpireUnfreezeServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/servlets/WithdrawExpireUnfreezeServlet.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -7,15 +7,19 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; import org.tron.json.JSON; import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.WithdrawExpireUnfreezeContract; - @Component @Slf4j(topic = "API") +@HttpApi(value = "withdrawexpireunfreeze", access = Access.BUILD, + surfaces = {Surface.FULL}) public class WithdrawExpireUnfreezeServlet extends RateLimiterServlet { @Autowired diff --git a/framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionByIdSolidityServlet.java b/framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionByIdSolidityServlet.java deleted file mode 100644 index f98c7450afc..00000000000 --- a/framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionByIdSolidityServlet.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.tron.core.services.http.solidity; - -import com.google.protobuf.ByteString; -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.api.GrpcAPI.BytesMessage; -import org.tron.common.utils.ByteArray; -import org.tron.core.Wallet; -import org.tron.core.services.http.JsonFormat; -import org.tron.core.services.http.PostParams; -import org.tron.core.services.http.RateLimiterServlet; -import org.tron.core.services.http.Util; -import org.tron.protos.Protocol.Transaction; - - -@Component -@Slf4j(topic = "API") -public class GetTransactionByIdSolidityServlet extends RateLimiterServlet { - - @Autowired - private Wallet wallet; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - try { - boolean visible = Util.getVisible(request); - String input = request.getParameter("value"); - fillResponse(ByteString.copyFrom(ByteArray.fromHexString(input)), visible, response); - } catch (Exception e) { - logger.debug("Exception: {}", e.getMessage()); - try { - response.getWriter().println(e.getMessage()); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } - } - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - try { - PostParams params = PostParams.getPostParams(request); - BytesMessage.Builder build = BytesMessage.newBuilder(); - JsonFormat.merge(params.getParams(), build, params.isVisible()); - fillResponse(build.build().getValue(), params.isVisible(), response); - } catch (Exception e) { - logger.debug("Exception: {}", e.getMessage()); - try { - response.getWriter().println(e.getMessage()); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } - } - } - - private void fillResponse(ByteString txId, boolean visible, HttpServletResponse response) - throws IOException { - Transaction reply = wallet.getTransactionById(txId); - if (reply != null) { - response.getWriter().println(Util.printTransaction(reply, visible)); - } else { - response.getWriter().println("{}"); - } - } - -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionInfoByIdSolidityServlet.java b/framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionInfoByIdSolidityServlet.java deleted file mode 100644 index 0408215f09d..00000000000 --- a/framework/src/main/java/org/tron/core/services/http/solidity/GetTransactionInfoByIdSolidityServlet.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.tron.core.services.http.solidity; - -import com.google.protobuf.ByteString; -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.api.GrpcAPI.BytesMessage; -import org.tron.common.utils.ByteArray; -import org.tron.core.Wallet; -import org.tron.core.services.http.JsonFormat; -import org.tron.core.services.http.PostParams; -import org.tron.core.services.http.RateLimiterServlet; -import org.tron.core.services.http.Util; -import org.tron.protos.Protocol.TransactionInfo; - - -@Component -@Slf4j(topic = "API") -public class GetTransactionInfoByIdSolidityServlet extends RateLimiterServlet { - - @Autowired - private Wallet wallet; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - try { - boolean visible = Util.getVisible(request); - String input = request.getParameter("value"); - TransactionInfo transInfo = wallet - .getTransactionInfoById(ByteString.copyFrom(ByteArray.fromHexString(input))); - if (transInfo == null) { - response.getWriter().println("{}"); - } else { - response.getWriter().println(JsonFormat.printToString(transInfo, visible)); - } - } catch (Exception e) { - logger.debug("Exception: {}", e.getMessage()); - try { - response.getWriter().println(e.getMessage()); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } - } - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - try { - PostParams params = PostParams.getPostParams(request); - - BytesMessage.Builder build = BytesMessage.newBuilder(); - JsonFormat.merge(params.getParams(), build, params.isVisible()); - TransactionInfo transInfo = wallet.getTransactionInfoById(build.build().getValue()); - if (transInfo == null) { - response.getWriter().println("{}"); - } else { - response.getWriter().println(JsonFormat.printToString(transInfo, params.isVisible())); - } - } catch (Exception e) { - logger.debug("Exception: {}", e.getMessage()); - try { - response.getWriter().println(e.getMessage()); - } catch (IOException ioe) { - logger.debug("IOException: {}", ioe.getMessage()); - } - } - } - -} diff --git a/framework/src/main/java/org/tron/core/services/http/solidity/SolidityNodeHttpApiService.java b/framework/src/main/java/org/tron/core/services/http/solidity/SolidityNodeHttpApiService.java index 0c4843c0550..1af4ec0dc34 100644 --- a/framework/src/main/java/org/tron/core/services/http/solidity/SolidityNodeHttpApiService.java +++ b/framework/src/main/java/org/tron/core/services/http/solidity/SolidityNodeHttpApiService.java @@ -7,164 +7,24 @@ import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import org.tron.common.application.HttpService; import org.tron.core.config.args.Args; import org.tron.core.services.filter.HttpApiAccessFilter; -import org.tron.core.services.http.EstimateEnergyServlet; -import org.tron.core.services.http.GetAccountByIdServlet; -import org.tron.core.services.http.GetAccountServlet; -import org.tron.core.services.http.GetAssetIssueByIdServlet; -import org.tron.core.services.http.GetAssetIssueByNameServlet; -import org.tron.core.services.http.GetAssetIssueListByNameServlet; -import org.tron.core.services.http.GetAssetIssueListServlet; -import org.tron.core.services.http.GetAvailableUnfreezeCountServlet; -import org.tron.core.services.http.GetBandwidthPricesServlet; -import org.tron.core.services.http.GetBlockByIdServlet; -import org.tron.core.services.http.GetBlockByLatestNumServlet; -import org.tron.core.services.http.GetBlockByLimitNextServlet; -import org.tron.core.services.http.GetBlockByNumServlet; -import org.tron.core.services.http.GetBlockServlet; -import org.tron.core.services.http.GetBrokerageServlet; -import org.tron.core.services.http.GetBurnTrxServlet; -import org.tron.core.services.http.GetCanDelegatedMaxSizeServlet; -import org.tron.core.services.http.GetCanWithdrawUnfreezeAmountServlet; -import org.tron.core.services.http.GetDelegatedResourceAccountIndexServlet; -import org.tron.core.services.http.GetDelegatedResourceAccountIndexV2Servlet; -import org.tron.core.services.http.GetDelegatedResourceServlet; -import org.tron.core.services.http.GetDelegatedResourceV2Servlet; -import org.tron.core.services.http.GetEnergyPricesServlet; -import org.tron.core.services.http.GetExchangeByIdServlet; -import org.tron.core.services.http.GetMarketOrderByAccountServlet; -import org.tron.core.services.http.GetMarketOrderByIdServlet; -import org.tron.core.services.http.GetMarketOrderListByPairServlet; -import org.tron.core.services.http.GetMarketPairListServlet; -import org.tron.core.services.http.GetMarketPriceByPairServlet; -import org.tron.core.services.http.GetMerkleTreeVoucherInfoServlet; -import org.tron.core.services.http.GetNodeInfoServlet; -import org.tron.core.services.http.GetNowBlockServlet; -import org.tron.core.services.http.GetPaginatedAssetIssueListServlet; -import org.tron.core.services.http.GetPaginatedNowWitnessListServlet; -import org.tron.core.services.http.GetRewardServlet; -import org.tron.core.services.http.GetTransactionCountByBlockNumServlet; -import org.tron.core.services.http.GetTransactionInfoByBlockNumServlet; -import org.tron.core.services.http.IsShieldedTRC20ContractNoteSpentServlet; -import org.tron.core.services.http.IsSpendServlet; -import org.tron.core.services.http.ListExchangesServlet; -import org.tron.core.services.http.ListWitnessesServlet; -import org.tron.core.services.http.ScanAndMarkNoteByIvkServlet; -import org.tron.core.services.http.ScanNoteByIvkServlet; -import org.tron.core.services.http.ScanNoteByOvkServlet; -import org.tron.core.services.http.ScanShieldedTRC20NotesByIvkServlet; -import org.tron.core.services.http.ScanShieldedTRC20NotesByOvkServlet; -import org.tron.core.services.http.TriggerConstantContractServlet; - +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApiRegistry; +import org.tron.core.services.http.servlets.GetNodeInfoServlet; @Component @Slf4j(topic = "API") public class SolidityNodeHttpApiService extends HttpService { - @Autowired - private GetAccountServlet getAccountServlet; - @Autowired - private GetTransactionByIdSolidityServlet getTransactionByIdServlet; - @Autowired - private GetTransactionInfoByIdSolidityServlet getTransactionInfoByIdServlet; - @Autowired - private GetTransactionCountByBlockNumServlet getTransactionCountByBlockNumServlet; - @Autowired - private GetDelegatedResourceServlet getDelegatedResourceServlet; - @Autowired - private GetDelegatedResourceV2Servlet getDelegatedResourceV2Servlet; - @Autowired - private GetCanDelegatedMaxSizeServlet getCanDelegatedMaxSizeServlet; - @Autowired - private GetAvailableUnfreezeCountServlet getAvailableUnfreezeCountServlet; - @Autowired - private GetCanWithdrawUnfreezeAmountServlet getCanWithdrawUnfreezeAmountServlet; - @Autowired - private GetDelegatedResourceAccountIndexServlet getDelegatedResourceAccountIndexServlet; - @Autowired - private GetDelegatedResourceAccountIndexV2Servlet getDelegatedResourceAccountIndexV2Servlet; - @Autowired - private GetExchangeByIdServlet getExchangeByIdServlet; - @Autowired - private ListExchangesServlet listExchangesServlet; - @Autowired - private ListWitnessesServlet listWitnessesServlet; - @Autowired - private GetPaginatedNowWitnessListServlet getPaginatedNowWitnessListServlet; - @Autowired - private GetAssetIssueListServlet getAssetIssueListServlet; - @Autowired - private GetPaginatedAssetIssueListServlet getPaginatedAssetIssueListServlet; - @Autowired - private GetAssetIssueByNameServlet getAssetIssueByNameServlet; - @Autowired - private GetAssetIssueByIdServlet getAssetIssueByIdServlet; - @Autowired - private GetAssetIssueListByNameServlet getAssetIssueListByNameServlet; - @Autowired - private GetNowBlockServlet getNowBlockServlet; - @Autowired - private GetBlockByNumServlet getBlockByNumServlet; - @Autowired - private GetNodeInfoServlet getNodeInfoServlet; - @Autowired - private GetAccountByIdServlet getAccountByIdServlet; - @Autowired - private GetBlockByIdServlet getBlockByIdServlet; - @Autowired - private GetBlockByLimitNextServlet getBlockByLimitNextServlet; - @Autowired - private GetBlockByLatestNumServlet getBlockByLatestNumServlet; - @Autowired - private ScanAndMarkNoteByIvkServlet scanAndMarkNoteByIvkServlet; - @Autowired - private ScanNoteByIvkServlet scanNoteByIvkServlet; - @Autowired - private ScanNoteByOvkServlet scanNoteByOvkServlet; - @Autowired - private GetMerkleTreeVoucherInfoServlet getMerkleTreeVoucherInfoServlet; - @Autowired - private IsSpendServlet isSpendServlet; - @Autowired - private ScanShieldedTRC20NotesByIvkServlet scanShieldedTRC20NotesByIvkServlet; - @Autowired - private ScanShieldedTRC20NotesByOvkServlet scanShieldedTRC20NotesByOvkServlet; - @Autowired - private IsShieldedTRC20ContractNoteSpentServlet isShieldedTRC20ContractNoteSpentServlet; - @Autowired - private GetMarketOrderByAccountServlet getMarketOrderByAccountServlet; - @Autowired - private GetMarketOrderByIdServlet getMarketOrderByIdServlet; - @Autowired - private GetMarketPriceByPairServlet getMarketPriceByPairServlet; - @Autowired - private GetMarketOrderListByPairServlet getMarketOrderListByPairServlet; - @Autowired - private GetMarketPairListServlet getMarketPairListServlet; - @Autowired - private GetBurnTrxServlet getBurnTrxServlet; - @Autowired - private GetBrokerageServlet getBrokerageServlet; - @Autowired - private GetRewardServlet getRewardServlet; - @Autowired - private TriggerConstantContractServlet triggerConstantContractServlet; - @Autowired - private EstimateEnergyServlet estimateEnergyServlet; - @Autowired - private GetTransactionInfoByBlockNumServlet getTransactionInfoByBlockNumServlet; @Autowired private HttpApiAccessFilter httpApiAccessFilter; - @Autowired - private GetBlockServlet getBlockServlet; - @Autowired - private GetBandwidthPricesServlet getBandwidthPricesServlet; - @Autowired - private GetEnergyPricesServlet getEnergyPricesServlet; + @Autowired + private ApplicationContext appContext; public SolidityNodeHttpApiService() { port = Args.getInstance().getSolidityHttpPort(); @@ -175,108 +35,22 @@ public SolidityNodeHttpApiService() { @Override protected void addServlet(ServletContextHandler context) { - // same as FullNode - context.addServlet(new ServletHolder(getAccountServlet), "/walletsolidity/getaccount"); - context.addServlet(new ServletHolder(listWitnessesServlet), "/walletsolidity/listwitnesses"); - context.addServlet(new ServletHolder(getPaginatedNowWitnessListServlet), - "/walletsolidity/getpaginatednowwitnesslist"); - context.addServlet(new ServletHolder(getAssetIssueListServlet), - "/walletsolidity/getassetissuelist"); - context.addServlet(new ServletHolder(getPaginatedAssetIssueListServlet), - "/walletsolidity/getpaginatedassetissuelist"); - context.addServlet(new ServletHolder(getAssetIssueByNameServlet), - "/walletsolidity/getassetissuebyname"); - context.addServlet(new ServletHolder(getAssetIssueByIdServlet), - "/walletsolidity/getassetissuebyid"); - context.addServlet(new ServletHolder(getAssetIssueListByNameServlet), - "/walletsolidity/getassetissuelistbyname"); - context.addServlet(new ServletHolder(getNowBlockServlet), "/walletsolidity/getnowblock"); - context.addServlet(new ServletHolder(getBlockByNumServlet), "/walletsolidity/getblockbynum"); - context.addServlet(new ServletHolder(getDelegatedResourceServlet), - "/walletsolidity/getdelegatedresource"); - context.addServlet(new ServletHolder(getDelegatedResourceV2Servlet), - "/walletsolidity/getdelegatedresourcev2"); - context.addServlet(new ServletHolder(getCanDelegatedMaxSizeServlet), - "/walletsolidity/getcandelegatedmaxsize"); - context.addServlet(new ServletHolder(getAvailableUnfreezeCountServlet), - "/walletsolidity/getavailableunfreezecount"); - context.addServlet(new ServletHolder(getCanWithdrawUnfreezeAmountServlet), - "/walletsolidity/getcanwithdrawunfreezeamount"); - context.addServlet(new ServletHolder(getDelegatedResourceAccountIndexServlet), - "/walletsolidity/getdelegatedresourceaccountindex"); - context.addServlet(new ServletHolder(getDelegatedResourceAccountIndexV2Servlet), - "/walletsolidity/getdelegatedresourceaccountindexv2"); - context - .addServlet(new ServletHolder(getExchangeByIdServlet), - "/walletsolidity/getexchangebyid"); - context.addServlet(new ServletHolder(listExchangesServlet), - "/walletsolidity/listexchanges"); - - context.addServlet(new ServletHolder(getAccountByIdServlet), - "/walletsolidity/getaccountbyid"); - context.addServlet(new ServletHolder(getBlockByIdServlet), - "/walletsolidity/getblockbyid"); - context.addServlet(new ServletHolder(getBlockByLimitNextServlet), - "/walletsolidity/getblockbylimitnext"); - context.addServlet(new ServletHolder(getBlockByLatestNumServlet), - "/walletsolidity/getblockbylatestnum"); - - // context.addServlet(new ServletHolder(getMerkleTreeVoucherInfoServlet), - // "/walletsolidity/getmerkletreevoucherinfo"); - // context.addServlet(new ServletHolder(scanAndMarkNoteByIvkServlet), - // "/walletsolidity/scanandmarknotebyivk"); - // context.addServlet(new ServletHolder(scanNoteByIvkServlet), - // "/walletsolidity/scannotebyivk"); - // context.addServlet(new ServletHolder(scanNoteByOvkServlet), - // "/walletsolidity/scannotebyovk"); - // context.addServlet(new ServletHolder(isSpendServlet), - // "/walletsolidity/isspend"); - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByIvkServlet), - "/walletsolidity/scanshieldedtrc20notesbyivk"); - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByOvkServlet), - "/walletsolidity/scanshieldedtrc20notesbyovk"); - context.addServlet(new ServletHolder(isShieldedTRC20ContractNoteSpentServlet), - "/walletsolidity/isshieldedtrc20contractnotespent"); - - context.addServlet(new ServletHolder(getTransactionInfoByBlockNumServlet), - "/walletsolidity/gettransactioninfobyblocknum"); - - context.addServlet(new ServletHolder(getMarketOrderByAccountServlet), - "/walletsolidity/getmarketorderbyaccount"); - context.addServlet(new ServletHolder(getMarketOrderByIdServlet), - "/walletsolidity/getmarketorderbyid"); - context.addServlet(new ServletHolder(getMarketPriceByPairServlet), - "/walletsolidity/getmarketpricebypair"); - context.addServlet(new ServletHolder(getMarketOrderListByPairServlet), - "/walletsolidity/getmarketorderlistbypair"); - context.addServlet(new ServletHolder(getMarketPairListServlet), - "/walletsolidity/getmarketpairlist"); - - // only for SolidityNode - context.addServlet(new ServletHolder(getTransactionByIdServlet), - "/walletsolidity/gettransactionbyid"); - - context - .addServlet(new ServletHolder(getTransactionInfoByIdServlet), - "/walletsolidity/gettransactioninfobyid"); - context - .addServlet(new ServletHolder(getTransactionCountByBlockNumServlet), - "/walletsolidity/gettransactioncountbyblocknum"); - context.addServlet(new ServletHolder(triggerConstantContractServlet), - "/walletsolidity/triggerconstantcontract"); - context.addServlet(new ServletHolder(estimateEnergyServlet), - "/walletsolidity/estimateenergy"); + addServletsFromRegistry(context); + } - context.addServlet(new ServletHolder(getNodeInfoServlet), "/wallet/getnodeinfo"); - context.addServlet(new ServletHolder(getNodeInfoServlet), "/walletsolidity/getnodeinfo"); - context.addServlet(new ServletHolder(getBrokerageServlet), "/walletsolidity/getBrokerage"); - context.addServlet(new ServletHolder(getRewardServlet), "/walletsolidity/getReward"); - context.addServlet(new ServletHolder(getBurnTrxServlet), "/walletsolidity/getburntrx"); - context.addServlet(new ServletHolder(getBlockServlet), "/walletsolidity/getblock"); - context.addServlet(new ServletHolder(getBandwidthPricesServlet), - "/walletsolidity/getbandwidthprices"); - context.addServlet(new ServletHolder(getEnergyPricesServlet), - "/walletsolidity/getenergyprices"); + /** + * Registry-driven registration: mounts every endpoint the registry declares for the + * SOLIDITY_NODE surface under the /walletsolidity prefix, resolving servlet beans from the + * application context; getnodeinfo is additionally reachable under the fullnode prefix. + */ + protected void addServletsFromRegistry(ServletContextHandler context) { + for (HttpApiRegistry.Entry def : HttpApiRegistry.forSurface(HttpApi.Surface.SOLIDITY_NODE)) { + context.addServlet(new ServletHolder(appContext.getBean(def.getServlet())), + "/walletsolidity/" + def.getSuffix()); + } + // surface-specific alias kept for compatibility: /wallet/getnodeinfo answers on this port + context.addServlet(new ServletHolder(appContext.getBean(GetNodeInfoServlet.class)), + "/wallet/getnodeinfo"); } @Override diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/HttpApiOnPBFTService.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/HttpApiOnPBFTService.java new file mode 100644 index 00000000000..37b20aba0e5 --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/HttpApiOnPBFTService.java @@ -0,0 +1,69 @@ +package org.tron.core.services.interfaceOnPBFT; + +import java.util.EnumSet; +import javax.servlet.DispatcherType; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.jetty.servlet.FilterHolder; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.tron.common.application.HttpService; +import org.tron.core.config.args.Args; +import org.tron.core.services.filter.HttpApiAccessFilter; +import org.tron.core.services.filter.LiteFnQueryHttpFilter; +import org.tron.core.services.filter.PbftCursorFilter; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApiRegistry; + +@Slf4j(topic = "API") +public class HttpApiOnPBFTService extends HttpService { + + @Autowired + private LiteFnQueryHttpFilter liteFnQueryHttpFilter; + @Autowired + private HttpApiAccessFilter httpApiAccessFilter; + @Autowired + private PbftCursorFilter pbftCursorFilter; + @Autowired + private ApplicationContext appContext; + + public HttpApiOnPBFTService() { + port = Args.getInstance().getPBFTHttpPort(); + enable = isFullNode() && Args.getInstance().isPBFTHttpEnable(); + contextPath = "/walletpbft"; + maxRequestSize = Args.getInstance().getHttpMaxMessageSize(); + } + + @Override + protected void addServlet(ServletContextHandler context) { + addServletsFromRegistry(context); + } + + /** + * Registry-driven registration: mounts every endpoint the registry declares for the PBFT + * surface, resolving servlet beans from the application context. + */ + protected void addServletsFromRegistry(ServletContextHandler context) { + for (HttpApiRegistry.Entry def : HttpApiRegistry.forSurface(HttpApi.Surface.PBFT)) { + context.addServlet(new ServletHolder(appContext.getBean(def.getServlet())), + "/" + def.getSuffix()); + } + } + + @Override + protected void addFilter(ServletContextHandler context) { + // filters the specified APIs + // when node is lite fullnode and openHistoryQueryWhenLiteFN is false + context.addFilter(new FilterHolder(liteFnQueryHttpFilter), "/*", + EnumSet.allOf(DispatcherType.class)); + + // api access filter + context.addFilter(new FilterHolder(httpApiAccessFilter), "/*", + EnumSet.allOf(DispatcherType.class)); + + // every request on this port reads the PBFT state view + context.addFilter(new FilterHolder(pbftCursorFilter), "/*", + EnumSet.allOf(DispatcherType.class)); + } +} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/EstimateEnergyOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/EstimateEnergyOnPBFTServlet.java deleted file mode 100644 index 825e2bf79e8..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/EstimateEnergyOnPBFTServlet.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.EstimateEnergyServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class EstimateEnergyOnPBFTServlet extends EstimateEnergyServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> { - try { - super.doPost(request, response); - } catch (IOException e) { - logger.error("EstimateEnergyOnPBFTServlet Exception", e); - } - }); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAccountByIdOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAccountByIdOnPBFTServlet.java deleted file mode 100644 index 1506b98ee96..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAccountByIdOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAccountByIdServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetAccountByIdOnPBFTServlet extends GetAccountByIdServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAccountOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAccountOnPBFTServlet.java deleted file mode 100644 index 1db7d2fbd02..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAccountOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAccountServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetAccountOnPBFTServlet extends GetAccountServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueByIdOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueByIdOnPBFTServlet.java deleted file mode 100644 index 497ac775731..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueByIdOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueByIdServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueByIdOnPBFTServlet extends GetAssetIssueByIdServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueByNameOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueByNameOnPBFTServlet.java deleted file mode 100644 index 9da748921ab..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueByNameOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueByNameServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueByNameOnPBFTServlet extends GetAssetIssueByNameServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueListByNameOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueListByNameOnPBFTServlet.java deleted file mode 100644 index 4f781051cc1..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueListByNameOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueListByNameServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueListByNameOnPBFTServlet extends GetAssetIssueListByNameServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueListOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueListOnPBFTServlet.java deleted file mode 100644 index 18f414c04b1..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAssetIssueListOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueListServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueListOnPBFTServlet extends GetAssetIssueListServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAvailableUnfreezeCountOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAvailableUnfreezeCountOnPBFTServlet.java deleted file mode 100644 index bb393f92efc..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetAvailableUnfreezeCountOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAvailableUnfreezeCountServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetAvailableUnfreezeCountOnPBFTServlet extends GetAvailableUnfreezeCountServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServlet.java deleted file mode 100644 index c89bc5f9646..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServlet.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBandwidthPricesServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetBandwidthPricesOnPBFTServlet extends GetBandwidthPricesServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByIdOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByIdOnPBFTServlet.java deleted file mode 100644 index 59e186ab4e0..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByIdOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByIdServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetBlockByIdOnPBFTServlet extends GetBlockByIdServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByLatestNumOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByLatestNumOnPBFTServlet.java deleted file mode 100644 index 536d6c7bcce..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByLatestNumOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByLatestNumServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetBlockByLatestNumOnPBFTServlet extends GetBlockByLatestNumServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } - -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByLimitNextOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByLimitNextOnPBFTServlet.java deleted file mode 100644 index f04d8820cbf..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByLimitNextOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByLimitNextServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetBlockByLimitNextOnPBFTServlet extends GetBlockByLimitNextServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByNumOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByNumOnPBFTServlet.java deleted file mode 100644 index bc19befc9c0..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBlockByNumOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByNumServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetBlockByNumOnPBFTServlet extends GetBlockByNumServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBrokerageOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBrokerageOnPBFTServlet.java deleted file mode 100644 index c0bcc8de6b5..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBrokerageOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBrokerageServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetBrokerageOnPBFTServlet extends GetBrokerageServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBurnTrxOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBurnTrxOnPBFTServlet.java deleted file mode 100644 index fb1654062c8..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetBurnTrxOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBurnTrxServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetBurnTrxOnPBFTServlet extends GetBurnTrxServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetCanDelegatedMaxSizeOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetCanDelegatedMaxSizeOnPBFTServlet.java deleted file mode 100644 index 8b3b47462e8..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetCanDelegatedMaxSizeOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetCanDelegatedMaxSizeServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetCanDelegatedMaxSizeOnPBFTServlet extends GetCanDelegatedMaxSizeServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetCanWithdrawUnfreezeAmountOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetCanWithdrawUnfreezeAmountOnPBFTServlet.java deleted file mode 100644 index c8b20c4eef7..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetCanWithdrawUnfreezeAmountOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetCanWithdrawUnfreezeAmountServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetCanWithdrawUnfreezeAmountOnPBFTServlet - extends GetCanWithdrawUnfreezeAmountServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceAccountIndexOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceAccountIndexOnPBFTServlet.java deleted file mode 100644 index febee663796..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceAccountIndexOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetDelegatedResourceAccountIndexServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceAccountIndexOnPBFTServlet extends - GetDelegatedResourceAccountIndexServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceAccountIndexV2OnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceAccountIndexV2OnPBFTServlet.java deleted file mode 100644 index 07541905300..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceAccountIndexV2OnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetDelegatedResourceAccountIndexV2Servlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceAccountIndexV2OnPBFTServlet extends - GetDelegatedResourceAccountIndexV2Servlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceOnPBFTServlet.java deleted file mode 100644 index 04b4a0436aa..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetDelegatedResourceServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceOnPBFTServlet extends GetDelegatedResourceServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceV2OnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceV2OnPBFTServlet.java deleted file mode 100644 index 6429c90eec5..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetDelegatedResourceV2OnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetDelegatedResourceV2Servlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceV2OnPBFTServlet extends GetDelegatedResourceV2Servlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServlet.java deleted file mode 100644 index 11c1dcaa0e8..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServlet.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetEnergyPricesServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetEnergyPricesOnPBFTServlet extends GetEnergyPricesServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetExchangeByIdOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetExchangeByIdOnPBFTServlet.java deleted file mode 100644 index ecdbd5228d2..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetExchangeByIdOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetExchangeByIdServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetExchangeByIdOnPBFTServlet extends GetExchangeByIdServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderByAccountOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderByAccountOnPBFTServlet.java deleted file mode 100644 index 7fa308c3abc..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderByAccountOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketOrderByAccountServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetMarketOrderByAccountOnPBFTServlet extends GetMarketOrderByAccountServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderByIdOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderByIdOnPBFTServlet.java deleted file mode 100644 index 63809fd032c..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderByIdOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketOrderByIdServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetMarketOrderByIdOnPBFTServlet extends GetMarketOrderByIdServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderListByPairOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderListByPairOnPBFTServlet.java deleted file mode 100644 index b18dde73651..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketOrderListByPairOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketOrderListByPairServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetMarketOrderListByPairOnPBFTServlet extends GetMarketOrderListByPairServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketPairListOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketPairListOnPBFTServlet.java deleted file mode 100644 index 4d3f69c9132..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketPairListOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketPairListServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetMarketPairListOnPBFTServlet extends GetMarketPairListServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketPriceByPairOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketPriceByPairOnPBFTServlet.java deleted file mode 100644 index 330cf2c2552..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMarketPriceByPairOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketPriceByPairServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetMarketPriceByPairOnPBFTServlet extends GetMarketPriceByPairServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMerkleTreeVoucherInfoOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMerkleTreeVoucherInfoOnPBFTServlet.java deleted file mode 100644 index 0e92ccf2d92..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetMerkleTreeVoucherInfoOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMerkleTreeVoucherInfoServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetMerkleTreeVoucherInfoOnPBFTServlet extends GetMerkleTreeVoucherInfoServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetNodeInfoOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetNodeInfoOnPBFTServlet.java deleted file mode 100644 index 0149d29326d..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetNodeInfoOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetNodeInfoServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetNodeInfoOnPBFTServlet extends GetNodeInfoServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetNowBlockOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetNowBlockOnPBFTServlet.java deleted file mode 100644 index e37ff729433..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetNowBlockOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetNowBlockServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetNowBlockOnPBFTServlet extends GetNowBlockServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetPaginatedAssetIssueListOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetPaginatedAssetIssueListOnPBFTServlet.java deleted file mode 100644 index 900c75d34af..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetPaginatedAssetIssueListOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetPaginatedAssetIssueListServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetPaginatedAssetIssueListOnPBFTServlet extends GetPaginatedAssetIssueListServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetRewardOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetRewardOnPBFTServlet.java deleted file mode 100644 index 98c20c7d5eb..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetRewardOnPBFTServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetRewardServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetRewardOnPBFTServlet extends GetRewardServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> { - super.doPost(request, response); - }); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetTransactionCountByBlockNumOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetTransactionCountByBlockNumOnPBFTServlet.java deleted file mode 100644 index b79f6001d27..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/GetTransactionCountByBlockNumOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetTransactionCountByBlockNumServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetTransactionCountByBlockNumOnPBFTServlet extends - GetTransactionCountByBlockNumServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/IsShieldedTRC20ContractNoteSpentOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/IsShieldedTRC20ContractNoteSpentOnPBFTServlet.java deleted file mode 100644 index afdb6dfc71e..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/IsShieldedTRC20ContractNoteSpentOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.IsShieldedTRC20ContractNoteSpentServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class IsShieldedTRC20ContractNoteSpentOnPBFTServlet extends - IsShieldedTRC20ContractNoteSpentServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/IsSpendOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/IsSpendOnPBFTServlet.java deleted file mode 100644 index 82fb6fb72a7..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/IsSpendOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.IsSpendServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class IsSpendOnPBFTServlet extends IsSpendServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ListExchangesOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ListExchangesOnPBFTServlet.java deleted file mode 100644 index 234db10b7ac..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ListExchangesOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ListExchangesServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class ListExchangesOnPBFTServlet extends ListExchangesServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ListWitnessesOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ListWitnessesOnPBFTServlet.java deleted file mode 100644 index 940f072a709..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ListWitnessesOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ListWitnessesServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class ListWitnessesOnPBFTServlet extends ListWitnessesServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetBlockOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetBlockOnPBFTServlet.java deleted file mode 100644 index 3207ebcf161..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetBlockOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http.PBFT; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetBlockOnPBFTServlet extends GetBlockServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetTransactionByIdOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetTransactionByIdOnPBFTServlet.java deleted file mode 100644 index fc7a8a47257..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetTransactionByIdOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http.PBFT; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetTransactionByIdServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class GetTransactionByIdOnPBFTServlet extends GetTransactionByIdServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetTransactionInfoByIdOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetTransactionInfoByIdOnPBFTServlet.java deleted file mode 100644 index f96720123fd..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/GetTransactionInfoByIdOnPBFTServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http.PBFT; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetTransactionInfoByIdServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class GetTransactionInfoByIdOnPBFTServlet extends GetTransactionInfoByIdServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/HttpApiOnPBFTService.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/HttpApiOnPBFTService.java deleted file mode 100644 index c0616c2ae78..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/HttpApiOnPBFTService.java +++ /dev/null @@ -1,278 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http.PBFT; - -import java.util.EnumSet; -import javax.servlet.DispatcherType; -import lombok.extern.slf4j.Slf4j; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.springframework.beans.factory.annotation.Autowired; -import org.tron.common.application.HttpService; -import org.tron.core.config.args.Args; -import org.tron.core.services.filter.HttpApiAccessFilter; -import org.tron.core.services.filter.LiteFnQueryHttpFilter; -import org.tron.core.services.interfaceOnPBFT.http.EstimateEnergyOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetAccountByIdOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetAccountOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetAssetIssueByIdOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetAssetIssueByNameOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetAssetIssueListByNameOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetAssetIssueListOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetAvailableUnfreezeCountOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetBandwidthPricesOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetBlockByIdOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetBlockByLatestNumOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetBlockByLimitNextOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetBlockByNumOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetBrokerageOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetBurnTrxOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetCanDelegatedMaxSizeOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetCanWithdrawUnfreezeAmountOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetDelegatedResourceAccountIndexOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetDelegatedResourceAccountIndexV2OnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetDelegatedResourceOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetDelegatedResourceV2OnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetEnergyPricesOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetExchangeByIdOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetMarketOrderByAccountOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetMarketOrderByIdOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetMarketOrderListByPairOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetMarketPairListOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetMarketPriceByPairOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetMerkleTreeVoucherInfoOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetNodeInfoOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetNowBlockOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetPaginatedAssetIssueListOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetRewardOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.GetTransactionCountByBlockNumOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.IsShieldedTRC20ContractNoteSpentOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.IsSpendOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.ListExchangesOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.ListWitnessesOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.ScanAndMarkNoteByIvkOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.ScanNoteByIvkOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.ScanNoteByOvkOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.ScanShieldedTRC20NotesByIvkOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.ScanShieldedTRC20NotesByOvkOnPBFTServlet; -import org.tron.core.services.interfaceOnPBFT.http.TriggerConstantContractOnPBFTServlet; - -@Slf4j(topic = "API") -public class HttpApiOnPBFTService extends HttpService { - - @Autowired - private GetAccountOnPBFTServlet accountOnPBFTServlet; - - @Autowired - private GetTransactionByIdOnPBFTServlet getTransactionByIdOnPBFTServlet; - @Autowired - private GetTransactionInfoByIdOnPBFTServlet getTransactionInfoByIdOnPBFTServlet; - @Autowired - private ListWitnessesOnPBFTServlet listWitnessesOnPBFTServlet; - @Autowired - private GetAssetIssueListOnPBFTServlet getAssetIssueListOnPBFTServlet; - @Autowired - private GetPaginatedAssetIssueListOnPBFTServlet getPaginatedAssetIssueListOnPBFTServlet; - @Autowired - private GetNowBlockOnPBFTServlet getNowBlockOnPBFTServlet; - @Autowired - private GetBlockByNumOnPBFTServlet getBlockByNumOnPBFTServlet; - - @Autowired - private GetNodeInfoOnPBFTServlet getNodeInfoOnPBFTServlet; - - @Autowired - private GetDelegatedResourceOnPBFTServlet getDelegatedResourceOnPBFTServlet; - @Autowired - private GetDelegatedResourceAccountIndexOnPBFTServlet - getDelegatedResourceAccountIndexOnPBFTServlet; - @Autowired - private GetExchangeByIdOnPBFTServlet getExchangeByIdOnPBFTServlet; - @Autowired - private ListExchangesOnPBFTServlet listExchangesOnPBFTServlet; - @Autowired - private GetTransactionCountByBlockNumOnPBFTServlet - getTransactionCountByBlockNumOnPBFTServlet; - @Autowired - private GetAssetIssueByNameOnPBFTServlet getAssetIssueByNameOnPBFTServlet; - @Autowired - private GetAssetIssueByIdOnPBFTServlet getAssetIssueByIdOnPBFTServlet; - @Autowired - private GetAssetIssueListByNameOnPBFTServlet getAssetIssueListByNameOnPBFTServlet; - @Autowired - private GetAccountByIdOnPBFTServlet getAccountByIdOnPBFTServlet; - @Autowired - private GetBlockByIdOnPBFTServlet getBlockByIdOnPBFTServlet; - @Autowired - private GetBlockByLimitNextOnPBFTServlet getBlockByLimitNextOnPBFTServlet; - @Autowired - private GetBlockByLatestNumOnPBFTServlet getBlockByLatestNumOnPBFTServlet; - @Autowired - private GetMerkleTreeVoucherInfoOnPBFTServlet getMerkleTreeVoucherInfoOnPBFTServlet; - @Autowired - private ScanNoteByIvkOnPBFTServlet scanNoteByIvkOnPBFTServlet; - @Autowired - private ScanAndMarkNoteByIvkOnPBFTServlet scanAndMarkNoteByIvkOnPBFTServlet; - @Autowired - private ScanNoteByOvkOnPBFTServlet scanNoteByOvkOnPBFTServlet; - @Autowired - private IsSpendOnPBFTServlet isSpendOnPBFTServlet; - @Autowired - private GetBrokerageOnPBFTServlet getBrokerageServlet; - @Autowired - private GetRewardOnPBFTServlet getRewardServlet; - @Autowired - private TriggerConstantContractOnPBFTServlet triggerConstantContractOnPBFTServlet; - @Autowired - private EstimateEnergyOnPBFTServlet estimateEnergyOnPBFTServlet; - @Autowired - private LiteFnQueryHttpFilter liteFnQueryHttpFilter; - @Autowired - private HttpApiAccessFilter httpApiAccessFilter; - - @Autowired - private GetMarketOrderByAccountOnPBFTServlet getMarketOrderByAccountOnPBFTServlet; - @Autowired - private GetMarketOrderByIdOnPBFTServlet getMarketOrderByIdOnPBFTServlet; - @Autowired - private GetMarketPriceByPairOnPBFTServlet getMarketPriceByPairOnPBFTServlet; - @Autowired - private GetMarketOrderListByPairOnPBFTServlet getMarketOrderListByPairOnPBFTServlet; - @Autowired - private GetMarketPairListOnPBFTServlet getMarketPairListOnPBFTServlet; - - @Autowired - private ScanShieldedTRC20NotesByIvkOnPBFTServlet scanShieldedTRC20NotesByIvkOnPBFTServlet; - @Autowired - private ScanShieldedTRC20NotesByOvkOnPBFTServlet scanShieldedTRC20NotesByOvkOnPBFTServlet; - @Autowired - private IsShieldedTRC20ContractNoteSpentOnPBFTServlet - isShieldedTRC20ContractNoteSpentOnPBFTServlet; - @Autowired - private GetBurnTrxOnPBFTServlet getBurnTrxOnPBFTServlet; - @Autowired - private GetBandwidthPricesOnPBFTServlet getBandwidthPricesOnPBFTServlet; - @Autowired - private GetEnergyPricesOnPBFTServlet getEnergyPricesOnPBFTServlet; - - @Autowired - private GetBlockOnPBFTServlet getBlockOnPBFTServlet; - - @Autowired - private GetAvailableUnfreezeCountOnPBFTServlet getAvailableUnfreezeCountOnPBFTServlet; - @Autowired - private GetCanDelegatedMaxSizeOnPBFTServlet getCanDelegatedMaxSizeOnPBFTServlet; - @Autowired - private GetCanWithdrawUnfreezeAmountOnPBFTServlet getCanWithdrawUnfreezeAmountOnPBFTServlet; - @Autowired - private GetDelegatedResourceAccountIndexV2OnPBFTServlet - getDelegatedResourceAccountIndexV2OnPBFTServlet; - @Autowired - private GetDelegatedResourceV2OnPBFTServlet getDelegatedResourceV2OnPBFTServlet; - - public HttpApiOnPBFTService() { - port = Args.getInstance().getPBFTHttpPort(); - enable = isFullNode() && Args.getInstance().isPBFTHttpEnable(); - contextPath = "/walletpbft"; - maxRequestSize = Args.getInstance().getHttpMaxMessageSize(); - } - - @Override - protected void addServlet(ServletContextHandler context) { - // same as FullNode - context.addServlet(new ServletHolder(accountOnPBFTServlet), "/getaccount"); - context.addServlet(new ServletHolder(listWitnessesOnPBFTServlet), "/listwitnesses"); - context.addServlet(new ServletHolder(getAssetIssueListOnPBFTServlet), "/getassetissuelist"); - context.addServlet(new ServletHolder(getPaginatedAssetIssueListOnPBFTServlet), - "/getpaginatedassetissuelist"); - context - .addServlet(new ServletHolder(getAssetIssueByNameOnPBFTServlet), "/getassetissuebyname"); - context.addServlet(new ServletHolder(getAssetIssueByIdOnPBFTServlet), "/getassetissuebyid"); - context.addServlet(new ServletHolder(getAssetIssueListByNameOnPBFTServlet), - "/getassetissuelistbyname"); - context.addServlet(new ServletHolder(getNowBlockOnPBFTServlet), "/getnowblock"); - context.addServlet(new ServletHolder(getBlockByNumOnPBFTServlet), "/getblockbynum"); - context.addServlet(new ServletHolder(getDelegatedResourceOnPBFTServlet), - "/getdelegatedresource"); - context.addServlet(new ServletHolder(getDelegatedResourceAccountIndexOnPBFTServlet), - "/getdelegatedresourceaccountindex"); - context.addServlet(new ServletHolder(getExchangeByIdOnPBFTServlet), "/getexchangebyid"); - context.addServlet(new ServletHolder(listExchangesOnPBFTServlet), "/listexchanges"); - context.addServlet(new ServletHolder(getAccountByIdOnPBFTServlet), "/getaccountbyid"); - context.addServlet(new ServletHolder(getBlockByIdOnPBFTServlet), "/getblockbyid"); - context - .addServlet(new ServletHolder(getBlockByLimitNextOnPBFTServlet), "/getblockbylimitnext"); - context - .addServlet(new ServletHolder(getBlockByLatestNumOnPBFTServlet), "/getblockbylatestnum"); - context.addServlet(new ServletHolder(getMerkleTreeVoucherInfoOnPBFTServlet), - "/getmerkletreevoucherinfo"); - context.addServlet(new ServletHolder(scanAndMarkNoteByIvkOnPBFTServlet), - "/scanandmarknotebyivk"); - context.addServlet(new ServletHolder(scanNoteByIvkOnPBFTServlet), "/scannotebyivk"); - context.addServlet(new ServletHolder(scanNoteByOvkOnPBFTServlet), "/scannotebyovk"); - context.addServlet(new ServletHolder(isSpendOnPBFTServlet), "/isspend"); - context.addServlet(new ServletHolder(triggerConstantContractOnPBFTServlet), - "/triggerconstantcontract"); - context.addServlet(new ServletHolder(estimateEnergyOnPBFTServlet), "/estimateenergy"); - - // only for PBFTNode - context.addServlet(new ServletHolder(getTransactionByIdOnPBFTServlet), "/gettransactionbyid"); - context.addServlet(new ServletHolder(getTransactionInfoByIdOnPBFTServlet), - "/gettransactioninfobyid"); - - context.addServlet(new ServletHolder(getTransactionCountByBlockNumOnPBFTServlet), - "/gettransactioncountbyblocknum"); - - context.addServlet(new ServletHolder(getNodeInfoOnPBFTServlet), "/getnodeinfo"); - context.addServlet(new ServletHolder(getBrokerageServlet), "/getBrokerage"); - context.addServlet(new ServletHolder(getRewardServlet), "/getReward"); - - context.addServlet(new ServletHolder(getMarketOrderByAccountOnPBFTServlet), - "/getmarketorderbyaccount"); - context.addServlet(new ServletHolder(getMarketOrderByIdOnPBFTServlet), - "/getmarketorderbyid"); - context.addServlet(new ServletHolder(getMarketPriceByPairOnPBFTServlet), - "/getmarketpricebypair"); - context.addServlet(new ServletHolder(getMarketOrderListByPairOnPBFTServlet), - "/getmarketorderlistbypair"); - context.addServlet(new ServletHolder(getMarketPairListOnPBFTServlet), - "/getmarketpairlist"); - - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByIvkOnPBFTServlet), - "/scanshieldedtrc20notesbyivk"); - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByOvkOnPBFTServlet), - "/scanshieldedtrc20notesbyovk"); - context.addServlet(new ServletHolder(isShieldedTRC20ContractNoteSpentOnPBFTServlet), - "/isshieldedtrc20contractnotespent"); - context.addServlet(new ServletHolder(getBurnTrxOnPBFTServlet), - "/getburntrx"); - context.addServlet(new ServletHolder(getBandwidthPricesOnPBFTServlet), - "/getbandwidthprices"); - context.addServlet(new ServletHolder(getEnergyPricesOnPBFTServlet), - "/getenergyprices"); - context.addServlet(new ServletHolder(getBlockOnPBFTServlet), - "/getblock"); - - context.addServlet(new ServletHolder(getAvailableUnfreezeCountOnPBFTServlet), - "/getavailableunfreezecount"); - context.addServlet(new ServletHolder(getCanDelegatedMaxSizeOnPBFTServlet), - "/getcandelegatedmaxsize"); - context.addServlet(new ServletHolder(getCanWithdrawUnfreezeAmountOnPBFTServlet), - "/getcanwithdrawunfreezeamount"); - context.addServlet(new ServletHolder(getDelegatedResourceAccountIndexV2OnPBFTServlet), - "/getdelegatedresourceaccountindexv2"); - context.addServlet(new ServletHolder(getDelegatedResourceV2OnPBFTServlet), - "/getdelegatedresourcev2"); - } - - @Override - protected void addFilter(ServletContextHandler context) { - // filters the specified APIs - // when node is lite fullnode and openHistoryQueryWhenLiteFN is false - context.addFilter(new FilterHolder(liteFnQueryHttpFilter), "/*", - EnumSet.allOf(DispatcherType.class)); - - // api access filter - context.addFilter(new FilterHolder(httpApiAccessFilter), "/*", - EnumSet.allOf(DispatcherType.class)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanAndMarkNoteByIvkOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanAndMarkNoteByIvkOnPBFTServlet.java deleted file mode 100644 index aa0d94796a0..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanAndMarkNoteByIvkOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanAndMarkNoteByIvkServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class ScanAndMarkNoteByIvkOnPBFTServlet extends ScanAndMarkNoteByIvkServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanNoteByIvkOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanNoteByIvkOnPBFTServlet.java deleted file mode 100644 index 6382c0f4cf6..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanNoteByIvkOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanNoteByIvkServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class ScanNoteByIvkOnPBFTServlet extends ScanNoteByIvkServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanNoteByOvkOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanNoteByOvkOnPBFTServlet.java deleted file mode 100644 index e05445c0c66..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanNoteByOvkOnPBFTServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanNoteByOvkServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class ScanNoteByOvkOnPBFTServlet extends ScanNoteByOvkServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanShieldedTRC20NotesByIvkOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanShieldedTRC20NotesByIvkOnPBFTServlet.java deleted file mode 100644 index bf0b70a3a9b..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanShieldedTRC20NotesByIvkOnPBFTServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanShieldedTRC20NotesByIvkServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class ScanShieldedTRC20NotesByIvkOnPBFTServlet extends ScanShieldedTRC20NotesByIvkServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanShieldedTRC20NotesByOvkOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanShieldedTRC20NotesByOvkOnPBFTServlet.java deleted file mode 100644 index 2bc65ef27c4..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/ScanShieldedTRC20NotesByOvkOnPBFTServlet.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanShieldedTRC20NotesByOvkServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - -@Component -@Slf4j(topic = "API") -public class ScanShieldedTRC20NotesByOvkOnPBFTServlet extends ScanShieldedTRC20NotesByOvkServlet { - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/TriggerConstantContractOnPBFTServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/TriggerConstantContractOnPBFTServlet.java deleted file mode 100644 index 2859326464d..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/TriggerConstantContractOnPBFTServlet.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.TriggerConstantContractServlet; -import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; - - -@Component -@Slf4j(topic = "API") -public class TriggerConstantContractOnPBFTServlet extends TriggerConstantContractServlet { - - @Autowired - private WalletOnPBFT walletOnPBFT; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnPBFT.futureGet(() -> { - try { - super.doPost(request, response); - } catch (IOException e) { - logger.error("TriggerConstantContractOnPBFTServlet Exception", e); - } - }); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/HttpApiOnSolidityService.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/HttpApiOnSolidityService.java new file mode 100644 index 00000000000..be19716b360 --- /dev/null +++ b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/HttpApiOnSolidityService.java @@ -0,0 +1,80 @@ +package org.tron.core.services.interfaceOnSolidity; + +import java.util.EnumSet; +import javax.servlet.DispatcherType; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.jetty.servlet.FilterHolder; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.tron.common.application.HttpService; +import org.tron.core.config.args.Args; +import org.tron.core.services.filter.HttpApiAccessFilter; +import org.tron.core.services.filter.LiteFnQueryHttpFilter; +import org.tron.core.services.filter.SolidityCursorFilter; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApiRegistry; +import org.tron.core.services.http.servlets.GetNodeInfoServlet; + +@Slf4j(topic = "API") +public class HttpApiOnSolidityService extends HttpService { + + @Autowired + private LiteFnQueryHttpFilter liteFnQueryHttpFilter; + + @Autowired + private HttpApiAccessFilter httpApiAccessFilter; + + @Autowired + private SolidityCursorFilter solidityCursorFilter; + + @Autowired + private ApplicationContext appContext; + + public HttpApiOnSolidityService() { + port = Args.getInstance().getSolidityHttpPort(); + enable = isFullNode() && Args.getInstance().isSolidityNodeHttpEnable(); + contextPath = "/"; + maxRequestSize = Args.getInstance().getHttpMaxMessageSize(); + } + + @Override + protected void addServlet(ServletContextHandler context) { + addServletsFromRegistry(context); + } + + /** + * Registry-driven registration: mounts every endpoint the registry declares for the SOLIDITY + * surface under the /walletsolidity prefix, resolving servlet beans from the application + * context; getnodeinfo is additionally reachable under the fullnode prefix on this port. + */ + protected void addServletsFromRegistry(ServletContextHandler context) { + for (HttpApiRegistry.Entry def : HttpApiRegistry.forSurface(HttpApi.Surface.SOLIDITY)) { + context.addServlet(new ServletHolder(appContext.getBean(def.getServlet())), + "/walletsolidity/" + def.getSuffix()); + } + // surface-specific alias kept for compatibility: /wallet/getnodeinfo answers on this port + context.addServlet(new ServletHolder(appContext.getBean(GetNodeInfoServlet.class)), + "/wallet/getnodeinfo"); + } + + @Override + protected void addFilter(ServletContextHandler context) { + // filters the specified APIs + // when node is lite fullnode and openHistoryQueryWhenLiteFN is false + context.addFilter(new FilterHolder(liteFnQueryHttpFilter), "/*", + EnumSet.allOf(DispatcherType.class)); + + // api access filter + context.addFilter(new FilterHolder(httpApiAccessFilter), "/walletsolidity/*", + EnumSet.allOf(DispatcherType.class)); + context.getServletHandler().getFilterMappings()[1] + .setPathSpecs(new String[] {"/walletsolidity/*", + "/wallet/getnodeinfo"}); + + // every request on this port reads the SOLIDITY state view + context.addFilter(new FilterHolder(solidityCursorFilter), "/*", + EnumSet.allOf(DispatcherType.class)); + } +} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/EstimateEnergyOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/EstimateEnergyOnSolidityServlet.java deleted file mode 100644 index e9e403c776b..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/EstimateEnergyOnSolidityServlet.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.EstimateEnergyServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class EstimateEnergyOnSolidityServlet extends EstimateEnergyServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> { - try { - super.doPost(request, response); - } catch (IOException e) { - logger.error("EstimateEnergyOnSolidityServlet Exception", e); - } - }); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAccountByIdOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAccountByIdOnSolidityServlet.java deleted file mode 100644 index ce47e679d0a..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAccountByIdOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAccountByIdServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetAccountByIdOnSolidityServlet extends GetAccountByIdServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAccountOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAccountOnSolidityServlet.java deleted file mode 100644 index 1cb02b77336..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAccountOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAccountServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetAccountOnSolidityServlet extends GetAccountServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueByIdOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueByIdOnSolidityServlet.java deleted file mode 100644 index f3173972407..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueByIdOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueByIdServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueByIdOnSolidityServlet extends GetAssetIssueByIdServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueByNameOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueByNameOnSolidityServlet.java deleted file mode 100644 index 101e0f1e4ae..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueByNameOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueByNameServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueByNameOnSolidityServlet extends GetAssetIssueByNameServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueListByNameOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueListByNameOnSolidityServlet.java deleted file mode 100644 index d21cc9c940d..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueListByNameOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueListByNameServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueListByNameOnSolidityServlet extends GetAssetIssueListByNameServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueListOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueListOnSolidityServlet.java deleted file mode 100644 index 76a2e70d70c..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAssetIssueListOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetAssetIssueListServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetAssetIssueListOnSolidityServlet extends GetAssetIssueListServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAvailableUnfreezeCountOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAvailableUnfreezeCountOnSolidityServlet.java deleted file mode 100644 index 218164fffb0..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetAvailableUnfreezeCountOnSolidityServlet.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.Wallet; -import org.tron.core.services.http.GetAvailableUnfreezeCountServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetAvailableUnfreezeCountOnSolidityServlet extends GetAvailableUnfreezeCountServlet { - - @Autowired - private Wallet wallet; - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServlet.java deleted file mode 100644 index bb2fca37a97..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBandwidthPricesServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetBandwidthPricesOnSolidityServlet extends GetBandwidthPricesServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} - diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByIdOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByIdOnSolidityServlet.java deleted file mode 100644 index 16192e2f484..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByIdOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByIdServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetBlockByIdOnSolidityServlet extends GetBlockByIdServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByLatestNumOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByLatestNumOnSolidityServlet.java deleted file mode 100644 index 34b5f37dcf5..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByLatestNumOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByLatestNumServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetBlockByLatestNumOnSolidityServlet extends GetBlockByLatestNumServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } - -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByLimitNextOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByLimitNextOnSolidityServlet.java deleted file mode 100644 index 36de59a9e7e..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByLimitNextOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByLimitNextServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetBlockByLimitNextOnSolidityServlet extends GetBlockByLimitNextServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByNumOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByNumOnSolidityServlet.java deleted file mode 100644 index e79da51ee7b..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockByNumOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockByNumServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetBlockByNumOnSolidityServlet extends GetBlockByNumServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockOnSolidityServlet.java deleted file mode 100644 index e00f8e91e62..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBlockOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBlockServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetBlockOnSolidityServlet extends GetBlockServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBrokerageOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBrokerageOnSolidityServlet.java deleted file mode 100644 index b6b6a9ca993..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBrokerageOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBrokerageServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetBrokerageOnSolidityServlet extends GetBrokerageServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBurnTrxOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBurnTrxOnSolidityServlet.java deleted file mode 100644 index 46435a92668..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetBurnTrxOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetBurnTrxServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetBurnTrxOnSolidityServlet extends GetBurnTrxServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetCanDelegatedMaxSizeOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetCanDelegatedMaxSizeOnSolidityServlet.java deleted file mode 100644 index f2a2fb394e4..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetCanDelegatedMaxSizeOnSolidityServlet.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.Wallet; -import org.tron.core.services.http.GetCanDelegatedMaxSizeServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetCanDelegatedMaxSizeOnSolidityServlet extends GetCanDelegatedMaxSizeServlet { - - @Autowired - private Wallet wallet; - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetCanWithdrawUnfreezeAmountOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetCanWithdrawUnfreezeAmountOnSolidityServlet.java deleted file mode 100644 index 3f0b487fbe6..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetCanWithdrawUnfreezeAmountOnSolidityServlet.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.Wallet; -import org.tron.core.services.http.GetCanWithdrawUnfreezeAmountServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetCanWithdrawUnfreezeAmountOnSolidityServlet - extends GetCanWithdrawUnfreezeAmountServlet { - - @Autowired - private Wallet wallet; - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceAccountIndexOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceAccountIndexOnSolidityServlet.java deleted file mode 100644 index 1ad23e35a2a..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceAccountIndexOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetDelegatedResourceAccountIndexServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceAccountIndexOnSolidityServlet extends - GetDelegatedResourceAccountIndexServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceAccountIndexV2OnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceAccountIndexV2OnSolidityServlet.java deleted file mode 100644 index edfaaf56c8b..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceAccountIndexV2OnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetDelegatedResourceAccountIndexV2Servlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceAccountIndexV2OnSolidityServlet extends - GetDelegatedResourceAccountIndexV2Servlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceOnSolidityServlet.java deleted file mode 100644 index c5a5cc9cb64..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceOnSolidityServlet.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.Wallet; -import org.tron.core.services.http.GetDelegatedResourceServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceOnSolidityServlet extends GetDelegatedResourceServlet { - - @Autowired - private Wallet wallet; - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceV2OnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceV2OnSolidityServlet.java deleted file mode 100644 index f481def86ea..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetDelegatedResourceV2OnSolidityServlet.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.Wallet; -import org.tron.core.services.http.GetDelegatedResourceV2Servlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetDelegatedResourceV2OnSolidityServlet extends GetDelegatedResourceV2Servlet { - - @Autowired - private Wallet wallet; - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServlet.java deleted file mode 100644 index a867fc3596a..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetEnergyPricesServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetEnergyPricesOnSolidityServlet extends GetEnergyPricesServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} - diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetExchangeByIdOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetExchangeByIdOnSolidityServlet.java deleted file mode 100644 index 1da31a0674b..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetExchangeByIdOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetExchangeByIdServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetExchangeByIdOnSolidityServlet extends GetExchangeByIdServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderByAccountOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderByAccountOnSolidityServlet.java deleted file mode 100644 index 0f77006c867..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderByAccountOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketOrderByAccountServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetMarketOrderByAccountOnSolidityServlet extends GetMarketOrderByAccountServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderByIdOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderByIdOnSolidityServlet.java deleted file mode 100644 index 5956a638573..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderByIdOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketOrderByIdServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetMarketOrderByIdOnSolidityServlet extends GetMarketOrderByIdServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderListByPairOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderListByPairOnSolidityServlet.java deleted file mode 100644 index 8452accc3d3..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketOrderListByPairOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketOrderListByPairServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetMarketOrderListByPairOnSolidityServlet extends GetMarketOrderListByPairServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketPairListOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketPairListOnSolidityServlet.java deleted file mode 100644 index b0ee51fec1e..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketPairListOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketPairListServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetMarketPairListOnSolidityServlet extends GetMarketPairListServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketPriceByPairOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketPriceByPairOnSolidityServlet.java deleted file mode 100644 index ceccf215b19..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMarketPriceByPairOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMarketPriceByPairServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetMarketPriceByPairOnSolidityServlet extends GetMarketPriceByPairServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMerkleTreeVoucherInfoOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMerkleTreeVoucherInfoOnSolidityServlet.java deleted file mode 100644 index 041a711da12..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetMerkleTreeVoucherInfoOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetMerkleTreeVoucherInfoServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetMerkleTreeVoucherInfoOnSolidityServlet extends GetMerkleTreeVoucherInfoServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetNodeInfoOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetNodeInfoOnSolidityServlet.java deleted file mode 100644 index ec16a010632..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetNodeInfoOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetNodeInfoServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetNodeInfoOnSolidityServlet extends GetNodeInfoServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetNowBlockOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetNowBlockOnSolidityServlet.java deleted file mode 100644 index e888e8a5101..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetNowBlockOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetNowBlockServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetNowBlockOnSolidityServlet extends GetNowBlockServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetPaginatedAssetIssueListOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetPaginatedAssetIssueListOnSolidityServlet.java deleted file mode 100644 index fcb5ff90842..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetPaginatedAssetIssueListOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetPaginatedAssetIssueListServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetPaginatedAssetIssueListOnSolidityServlet extends GetPaginatedAssetIssueListServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetPaginatedNowWitnessListOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetPaginatedNowWitnessListOnSolidityServlet.java deleted file mode 100644 index 4578393ec76..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetPaginatedNowWitnessListOnSolidityServlet.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetPaginatedNowWitnessListServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetPaginatedNowWitnessListOnSolidityServlet extends GetPaginatedNowWitnessListServlet { - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetRewardOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetRewardOnSolidityServlet.java deleted file mode 100644 index f125557d1bf..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetRewardOnSolidityServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetRewardServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetRewardOnSolidityServlet extends GetRewardServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> { - super.doPost(request, response); - }); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetTransactionCountByBlockNumOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetTransactionCountByBlockNumOnSolidityServlet.java deleted file mode 100644 index 10e5d5a9b29..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetTransactionCountByBlockNumOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetTransactionCountByBlockNumServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetTransactionCountByBlockNumOnSolidityServlet extends - GetTransactionCountByBlockNumServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetTransactionInfoByBlockNumOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetTransactionInfoByBlockNumOnSolidityServlet.java deleted file mode 100644 index 40e88afa1e0..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/GetTransactionInfoByBlockNumOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetTransactionInfoByBlockNumServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetTransactionInfoByBlockNumOnSolidityServlet extends - GetTransactionInfoByBlockNumServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/IsShieldedTRC20ContractNoteSpentOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/IsShieldedTRC20ContractNoteSpentOnSolidityServlet.java deleted file mode 100644 index 12055c2db8b..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/IsShieldedTRC20ContractNoteSpentOnSolidityServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.IsShieldedTRC20ContractNoteSpentServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class IsShieldedTRC20ContractNoteSpentOnSolidityServlet extends - IsShieldedTRC20ContractNoteSpentServlet { - - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/IsSpendOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/IsSpendOnSolidityServlet.java deleted file mode 100644 index 98cb96dd136..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/IsSpendOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.IsSpendServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class IsSpendOnSolidityServlet extends IsSpendServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ListExchangesOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ListExchangesOnSolidityServlet.java deleted file mode 100644 index 87fc546913d..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ListExchangesOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ListExchangesServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class ListExchangesOnSolidityServlet extends ListExchangesServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ListWitnessesOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ListWitnessesOnSolidityServlet.java deleted file mode 100644 index 9025b360d0d..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ListWitnessesOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ListWitnessesServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class ListWitnessesOnSolidityServlet extends ListWitnessesServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanAndMarkNoteByIvkOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanAndMarkNoteByIvkOnSolidityServlet.java deleted file mode 100644 index b661913b011..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanAndMarkNoteByIvkOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanAndMarkNoteByIvkServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class ScanAndMarkNoteByIvkOnSolidityServlet extends ScanAndMarkNoteByIvkServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanNoteByIvkOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanNoteByIvkOnSolidityServlet.java deleted file mode 100644 index b1719181673..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanNoteByIvkOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanNoteByIvkServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class ScanNoteByIvkOnSolidityServlet extends ScanNoteByIvkServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanNoteByOvkOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanNoteByOvkOnSolidityServlet.java deleted file mode 100644 index b1874203ca8..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanNoteByOvkOnSolidityServlet.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanNoteByOvkServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class ScanNoteByOvkOnSolidityServlet extends ScanNoteByOvkServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanShieldedTRC20NotesByIvkOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanShieldedTRC20NotesByIvkOnSolidityServlet.java deleted file mode 100644 index 19a8d545502..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanShieldedTRC20NotesByIvkOnSolidityServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanShieldedTRC20NotesByIvkServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class ScanShieldedTRC20NotesByIvkOnSolidityServlet extends - ScanShieldedTRC20NotesByIvkServlet { - - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanShieldedTRC20NotesByOvkOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanShieldedTRC20NotesByOvkOnSolidityServlet.java deleted file mode 100644 index 30055b41a90..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/ScanShieldedTRC20NotesByOvkOnSolidityServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.ScanShieldedTRC20NotesByOvkServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class ScanShieldedTRC20NotesByOvkOnSolidityServlet extends - ScanShieldedTRC20NotesByOvkServlet { - - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/TriggerConstantContractOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/TriggerConstantContractOnSolidityServlet.java deleted file mode 100644 index 75f602272b4..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/TriggerConstantContractOnSolidityServlet.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.TriggerConstantContractServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class TriggerConstantContractOnSolidityServlet extends TriggerConstantContractServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> { - try { - super.doPost(request, response); - } catch (IOException e) { - logger.error("TriggerConstantContractOnSolidityServlet Exception", e); - } - }); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/GetTransactionByIdOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/GetTransactionByIdOnSolidityServlet.java deleted file mode 100644 index db56a4cc1f1..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/GetTransactionByIdOnSolidityServlet.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http.solidity; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetTransactionByIdServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - -@Component -@Slf4j(topic = "API") -public class GetTransactionByIdOnSolidityServlet extends GetTransactionByIdServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} \ No newline at end of file diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/GetTransactionInfoByIdOnSolidityServlet.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/GetTransactionInfoByIdOnSolidityServlet.java deleted file mode 100644 index 96422e1b60f..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/GetTransactionInfoByIdOnSolidityServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http.solidity; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.tron.core.services.http.GetTransactionInfoByIdServlet; -import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; - - -@Component -@Slf4j(topic = "API") -public class GetTransactionInfoByIdOnSolidityServlet extends GetTransactionInfoByIdServlet { - - @Autowired - private WalletOnSolidity walletOnSolidity; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doGet(request, response)); - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) { - walletOnSolidity.futureGet(() -> super.doPost(request, response)); - } -} diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/HttpApiOnSolidityService.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/HttpApiOnSolidityService.java deleted file mode 100644 index 33e325bd578..00000000000 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/HttpApiOnSolidityService.java +++ /dev/null @@ -1,308 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http.solidity; - -import java.util.EnumSet; -import javax.servlet.DispatcherType; -import lombok.extern.slf4j.Slf4j; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.springframework.beans.factory.annotation.Autowired; -import org.tron.common.application.HttpService; -import org.tron.core.config.args.Args; -import org.tron.core.services.filter.HttpApiAccessFilter; -import org.tron.core.services.filter.LiteFnQueryHttpFilter; -import org.tron.core.services.interfaceOnSolidity.http.EstimateEnergyOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetAccountByIdOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetAccountOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetAssetIssueByIdOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetAssetIssueByNameOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetAssetIssueListByNameOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetAssetIssueListOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetAvailableUnfreezeCountOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBandwidthPricesOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBlockByIdOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBlockByLatestNumOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBlockByLimitNextOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBlockByNumOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBlockOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBrokerageOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetBurnTrxOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetCanDelegatedMaxSizeOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetCanWithdrawUnfreezeAmountOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetDelegatedResourceAccountIndexOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetDelegatedResourceAccountIndexV2OnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetDelegatedResourceOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetDelegatedResourceV2OnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetEnergyPricesOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetExchangeByIdOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetMarketOrderByAccountOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetMarketOrderByIdOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetMarketOrderListByPairOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetMarketPairListOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetMarketPriceByPairOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetMerkleTreeVoucherInfoOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetNodeInfoOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetNowBlockOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetPaginatedAssetIssueListOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetPaginatedNowWitnessListOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetRewardOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetTransactionCountByBlockNumOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.GetTransactionInfoByBlockNumOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.IsShieldedTRC20ContractNoteSpentOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.IsSpendOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.ListExchangesOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.ListWitnessesOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.ScanAndMarkNoteByIvkOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.ScanNoteByIvkOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.ScanNoteByOvkOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.ScanShieldedTRC20NotesByIvkOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.ScanShieldedTRC20NotesByOvkOnSolidityServlet; -import org.tron.core.services.interfaceOnSolidity.http.TriggerConstantContractOnSolidityServlet; - -@Slf4j(topic = "API") -public class HttpApiOnSolidityService extends HttpService { - - @Autowired - private GetAccountOnSolidityServlet accountOnSolidityServlet; - - @Autowired - private GetTransactionByIdOnSolidityServlet getTransactionByIdOnSolidityServlet; - @Autowired - private GetTransactionInfoByIdOnSolidityServlet getTransactionInfoByIdOnSolidityServlet; - @Autowired - private ListWitnessesOnSolidityServlet listWitnessesOnSolidityServlet; - @Autowired - private GetPaginatedNowWitnessListOnSolidityServlet getPaginatedNowWitnessListOnSolidityServlet; - @Autowired - private GetAssetIssueListOnSolidityServlet getAssetIssueListOnSolidityServlet; - @Autowired - private GetPaginatedAssetIssueListOnSolidityServlet getPaginatedAssetIssueListOnSolidityServlet; - @Autowired - private GetNowBlockOnSolidityServlet getNowBlockOnSolidityServlet; - @Autowired - private GetBlockByNumOnSolidityServlet getBlockByNumOnSolidityServlet; - - @Autowired - private GetNodeInfoOnSolidityServlet getNodeInfoOnSolidityServlet; - - @Autowired - private GetDelegatedResourceOnSolidityServlet getDelegatedResourceOnSolidityServlet; - @Autowired - private GetDelegatedResourceV2OnSolidityServlet getDelegatedResourceV2OnSolidityServlet; - @Autowired - private GetCanDelegatedMaxSizeOnSolidityServlet getCanDelegatedMaxSizeOnSolidityServlet; - @Autowired - private GetAvailableUnfreezeCountOnSolidityServlet getAvailableUnfreezeCountOnSolidityServlet; - @Autowired - private GetCanWithdrawUnfreezeAmountOnSolidityServlet - getCanWithdrawUnfreezeAmountOnSolidityServlet; - @Autowired - private GetDelegatedResourceAccountIndexOnSolidityServlet - getDelegatedResourceAccountIndexOnSolidityServlet; - @Autowired - private GetDelegatedResourceAccountIndexV2OnSolidityServlet - getDelegatedResourceAccountIndexV2OnSolidityServlet; - @Autowired - private GetExchangeByIdOnSolidityServlet getExchangeByIdOnSolidityServlet; - @Autowired - private ListExchangesOnSolidityServlet listExchangesOnSolidityServlet; - @Autowired - private GetTransactionCountByBlockNumOnSolidityServlet - getTransactionCountByBlockNumOnSolidityServlet; - @Autowired - private GetAssetIssueByNameOnSolidityServlet getAssetIssueByNameOnSolidityServlet; - @Autowired - private GetAssetIssueByIdOnSolidityServlet getAssetIssueByIdOnSolidityServlet; - @Autowired - private GetAssetIssueListByNameOnSolidityServlet getAssetIssueListByNameOnSolidityServlet; - @Autowired - private GetAccountByIdOnSolidityServlet getAccountByIdOnSolidityServlet; - @Autowired - private GetBlockByIdOnSolidityServlet getBlockByIdOnSolidityServlet; - @Autowired - private GetBlockByLimitNextOnSolidityServlet getBlockByLimitNextOnSolidityServlet; - @Autowired - private GetBlockByLatestNumOnSolidityServlet getBlockByLatestNumOnSolidityServlet; - @Autowired - private GetMerkleTreeVoucherInfoOnSolidityServlet getMerkleTreeVoucherInfoOnSolidityServlet; - @Autowired - private ScanNoteByIvkOnSolidityServlet scanNoteByIvkOnSolidityServlet; - @Autowired - private ScanAndMarkNoteByIvkOnSolidityServlet scanAndMarkNoteByIvkOnSolidityServlet; - @Autowired - private ScanNoteByOvkOnSolidityServlet scanNoteByOvkOnSolidityServlet; - @Autowired - private IsSpendOnSolidityServlet isSpendOnSolidityServlet; - @Autowired - private ScanShieldedTRC20NotesByIvkOnSolidityServlet scanShieldedTRC20NotesByIvkOnSolidityServlet; - @Autowired - private ScanShieldedTRC20NotesByOvkOnSolidityServlet scanShieldedTRC20NotesByOvkOnSolidityServlet; - @Autowired - private IsShieldedTRC20ContractNoteSpentOnSolidityServlet - isShieldedTRC20ContractNoteSpentOnSolidityServlet; - @Autowired - private GetBrokerageOnSolidityServlet getBrokerageServlet; - @Autowired - private GetRewardOnSolidityServlet getRewardServlet; - @Autowired - private GetBurnTrxOnSolidityServlet getBurnTrxOnSolidityServlet; - @Autowired - private TriggerConstantContractOnSolidityServlet triggerConstantContractOnSolidityServlet; - @Autowired - private EstimateEnergyOnSolidityServlet estimateEnergyOnSolidityServlet; - @Autowired - private GetTransactionInfoByBlockNumOnSolidityServlet - getTransactionInfoByBlockNumOnSolidityServlet; - @Autowired - private GetMarketOrderByAccountOnSolidityServlet getMarketOrderByAccountOnSolidityServlet; - @Autowired - private GetMarketOrderByIdOnSolidityServlet getMarketOrderByIdOnSolidityServlet; - @Autowired - private GetMarketPriceByPairOnSolidityServlet getMarketPriceByPairOnSolidityServlet; - @Autowired - private GetMarketOrderListByPairOnSolidityServlet getMarketOrderListByPairOnSolidityServlet; - @Autowired - private GetMarketPairListOnSolidityServlet getMarketPairListOnSolidityServlet; - @Autowired - private GetBandwidthPricesOnSolidityServlet getBandwidthPricesOnSolidityServlet; - @Autowired - private GetEnergyPricesOnSolidityServlet getEnergyPricesOnSolidityServlet; - - @Autowired - private LiteFnQueryHttpFilter liteFnQueryHttpFilter; - - @Autowired - private HttpApiAccessFilter httpApiAccessFilter; - - @Autowired - private GetBlockOnSolidityServlet getBlockOnSolidityServlet; - - public HttpApiOnSolidityService() { - port = Args.getInstance().getSolidityHttpPort(); - enable = isFullNode() && Args.getInstance().isSolidityNodeHttpEnable(); - contextPath = "/"; - maxRequestSize = Args.getInstance().getHttpMaxMessageSize(); - } - - @Override - protected void addServlet(ServletContextHandler context) { - // same as FullNode - context.addServlet(new ServletHolder(accountOnSolidityServlet), "/walletsolidity/getaccount"); - context.addServlet(new ServletHolder(listWitnessesOnSolidityServlet), - "/walletsolidity/listwitnesses"); - context.addServlet(new ServletHolder(getPaginatedNowWitnessListOnSolidityServlet), - "/walletsolidity/getpaginatednowwitnesslist"); - context.addServlet(new ServletHolder(getAssetIssueListOnSolidityServlet), - "/walletsolidity/getassetissuelist"); - context.addServlet(new ServletHolder(getPaginatedAssetIssueListOnSolidityServlet), - "/walletsolidity/getpaginatedassetissuelist"); - context.addServlet(new ServletHolder(getAssetIssueByNameOnSolidityServlet), - "/walletsolidity/getassetissuebyname"); - context.addServlet(new ServletHolder(getAssetIssueByIdOnSolidityServlet), - "/walletsolidity/getassetissuebyid"); - context.addServlet(new ServletHolder(getAssetIssueListByNameOnSolidityServlet), - "/walletsolidity/getassetissuelistbyname"); - context.addServlet(new ServletHolder(getNowBlockOnSolidityServlet), - "/walletsolidity/getnowblock"); - context.addServlet(new ServletHolder(getBlockByNumOnSolidityServlet), - "/walletsolidity/getblockbynum"); - context.addServlet(new ServletHolder(getDelegatedResourceOnSolidityServlet), - "/walletsolidity/getdelegatedresource"); - context.addServlet(new ServletHolder(getDelegatedResourceV2OnSolidityServlet), - "/walletsolidity/getdelegatedresourcev2"); - context.addServlet(new ServletHolder(getCanDelegatedMaxSizeOnSolidityServlet), - "/walletsolidity/getcandelegatedmaxsize"); - context.addServlet(new ServletHolder(getAvailableUnfreezeCountOnSolidityServlet), - "/walletsolidity/getavailableunfreezecount"); - context.addServlet(new ServletHolder(getCanWithdrawUnfreezeAmountOnSolidityServlet), - "/walletsolidity/getcanwithdrawunfreezeamount"); - context.addServlet(new ServletHolder(getDelegatedResourceAccountIndexOnSolidityServlet), - "/walletsolidity/getdelegatedresourceaccountindex"); - context.addServlet(new ServletHolder(getDelegatedResourceAccountIndexV2OnSolidityServlet), - "/walletsolidity/getdelegatedresourceaccountindexv2"); - context.addServlet(new ServletHolder(getExchangeByIdOnSolidityServlet), - "/walletsolidity/getexchangebyid"); - context.addServlet(new ServletHolder(listExchangesOnSolidityServlet), - "/walletsolidity/listexchanges"); - context.addServlet(new ServletHolder(getAccountByIdOnSolidityServlet), - "/walletsolidity/getaccountbyid"); - context.addServlet(new ServletHolder(getBlockByIdOnSolidityServlet), - "/walletsolidity/getblockbyid"); - context.addServlet(new ServletHolder(getBlockByLimitNextOnSolidityServlet), - "/walletsolidity/getblockbylimitnext"); - context.addServlet(new ServletHolder(getBlockByLatestNumOnSolidityServlet), - "/walletsolidity/getblockbylatestnum"); - // context.addServlet(new ServletHolder(getMerkleTreeVoucherInfoOnSolidityServlet), - // "/walletsolidity/getmerkletreevoucherinfo"); - // context.addServlet(new ServletHolder(scanAndMarkNoteByIvkOnSolidityServlet), - // "/walletsolidity/scanandmarknotebyivk"); - // context.addServlet(new ServletHolder(scanNoteByIvkOnSolidityServlet), - // "/walletsolidity/scannotebyivk"); - // context.addServlet(new ServletHolder(scanNoteByOvkOnSolidityServlet), - // "/walletsolidity/scannotebyovk"); - // context.addServlet(new ServletHolder(isSpendOnSolidityServlet), - // "/walletsolidity/isspend"); - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByIvkOnSolidityServlet), - "/walletsolidity/scanshieldedtrc20notesbyivk"); - context.addServlet(new ServletHolder(scanShieldedTRC20NotesByOvkOnSolidityServlet), - "/walletsolidity/scanshieldedtrc20notesbyovk"); - context.addServlet(new ServletHolder(isShieldedTRC20ContractNoteSpentOnSolidityServlet), - "/walletsolidity/isshieldedtrc20contractnotespent"); - context.addServlet(new ServletHolder(triggerConstantContractOnSolidityServlet), - "/walletsolidity/triggerconstantcontract"); - context.addServlet(new ServletHolder(estimateEnergyOnSolidityServlet), - "/walletsolidity/estimateenergy"); - context.addServlet(new ServletHolder(getTransactionInfoByBlockNumOnSolidityServlet), - "/walletsolidity/gettransactioninfobyblocknum"); - context.addServlet(new ServletHolder(getMarketOrderByAccountOnSolidityServlet), - "/walletsolidity/getmarketorderbyaccount"); - context.addServlet(new ServletHolder(getMarketOrderByIdOnSolidityServlet), - "/walletsolidity/getmarketorderbyid"); - context.addServlet(new ServletHolder(getMarketPriceByPairOnSolidityServlet), - "/walletsolidity/getmarketpricebypair"); - context.addServlet(new ServletHolder(getMarketOrderListByPairOnSolidityServlet), - "/walletsolidity/getmarketorderlistbypair"); - context.addServlet(new ServletHolder(getMarketPairListOnSolidityServlet), - "/walletsolidity/getmarketpairlist"); - - // only for SolidityNode - context.addServlet(new ServletHolder(getTransactionByIdOnSolidityServlet), - "/walletsolidity/gettransactionbyid"); - context.addServlet(new ServletHolder(getTransactionInfoByIdOnSolidityServlet), - "/walletsolidity/gettransactioninfobyid"); - - context.addServlet(new ServletHolder(getTransactionCountByBlockNumOnSolidityServlet), - "/walletsolidity/gettransactioncountbyblocknum"); - - context.addServlet(new ServletHolder(getNodeInfoOnSolidityServlet), "/wallet/getnodeinfo"); - context.addServlet(new ServletHolder(getNodeInfoOnSolidityServlet), - "/walletsolidity/getnodeinfo"); - context.addServlet(new ServletHolder(getBrokerageServlet), "/walletsolidity/getBrokerage"); - context.addServlet(new ServletHolder(getRewardServlet), "/walletsolidity/getReward"); - context - .addServlet(new ServletHolder(getBurnTrxOnSolidityServlet), "/walletsolidity/getburntrx"); - context.addServlet(new ServletHolder(getBandwidthPricesOnSolidityServlet), - "/walletsolidity/getbandwidthprices"); - context.addServlet(new ServletHolder(getEnergyPricesOnSolidityServlet), - "/walletsolidity/getenergyprices"); - - context.addServlet(new ServletHolder(getBlockOnSolidityServlet), - "/walletsolidity/getblock"); - - } - - @Override - protected void addFilter(ServletContextHandler context) { - // filters the specified APIs - // when node is lite fullnode and openHistoryQueryWhenLiteFN is false - context.addFilter(new FilterHolder(liteFnQueryHttpFilter), "/*", - EnumSet.allOf(DispatcherType.class)); - - // api access filter - context.addFilter(new FilterHolder(httpApiAccessFilter), "/walletsolidity/*", - EnumSet.allOf(DispatcherType.class)); - context.getServletHandler().getFilterMappings()[1] - .setPathSpecs(new String[] {"/walletsolidity/*", - "/wallet/getnodeinfo"}); - } -} diff --git a/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcServlet.java b/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcServlet.java index ca249da4e5d..c6f14797c46 100644 --- a/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcServlet.java +++ b/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcServlet.java @@ -28,7 +28,7 @@ import org.tron.core.Constant; import org.tron.core.services.filter.BufferedResponseWrapper; import org.tron.core.services.filter.CachedBodyRequestWrapper; -import org.tron.core.services.http.RateLimiterServlet; +import org.tron.core.services.http.servlets.RateLimiterServlet; @Component @Slf4j(topic = "API") diff --git a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java index 6be47886117..f5ad4ab23d2 100644 --- a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java +++ b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java @@ -1,8 +1,8 @@ package org.tron.core.services.jsonrpc; import static org.tron.core.Wallet.CONTRACT_VALIDATE_ERROR; -import static org.tron.core.services.http.Util.setTransactionExtraData; -import static org.tron.core.services.http.Util.setTransactionPermissionId; +import static org.tron.core.services.http.servlets.Util.setTransactionExtraData; +import static org.tron.core.services.http.servlets.Util.setTransactionPermissionId; import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.FINALIZED_STR; import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.HASH_REGEX; import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.LATEST_STR; @@ -77,8 +77,8 @@ import org.tron.core.exception.jsonrpc.JsonRpcMethodNotFoundException; import org.tron.core.exception.jsonrpc.JsonRpcTooManyResultException; import org.tron.core.services.NodeInfoService; -import org.tron.core.services.http.JsonFormat; -import org.tron.core.services.http.Util; +import org.tron.core.services.http.servlets.JsonFormat; +import org.tron.core.services.http.servlets.Util; import org.tron.core.services.jsonrpc.filters.BlockFilterAndResult; import org.tron.core.services.jsonrpc.filters.LogBlockQuery; import org.tron.core.services.jsonrpc.filters.LogFilter; diff --git a/framework/src/main/java/org/tron/program/Version.java b/framework/src/main/java/org/tron/program/Version.java index f34d440702e..64f2befa2ef 100644 --- a/framework/src/main/java/org/tron/program/Version.java +++ b/framework/src/main/java/org/tron/program/Version.java @@ -2,9 +2,9 @@ public class Version { - public static final String VERSION_NAME = "GreatVoyage-v4.8.2-6-g348db25bfd"; - public static final String VERSION_CODE = "18825"; - private static final String VERSION = "4.8.2.1"; + public static final String VERSION_NAME = "GreatVoyage-v4.8.2.1-1-gbd2450fe06"; + public static final String VERSION_CODE = "18828"; + private static final String VERSION = "4.8.2.2"; public static String getVersion() { return VERSION; diff --git a/framework/src/main/resources/logback.xml b/framework/src/main/resources/logback.xml index 1b0955df2fd..1c50b65e518 100644 --- a/framework/src/main/resources/logback.xml +++ b/framework/src/main/resources/logback.xml @@ -31,7 +31,7 @@ class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> ./logs/tron-%d{yyyy-MM-dd}.%i.log.gz - + 500MB 7 50GB diff --git a/framework/src/test/java/org/tron/common/application/GrpcNettyMaxConcurrentStreamsLimiterTest.java b/framework/src/test/java/org/tron/common/application/GrpcNettyMaxConcurrentStreamsLimiterTest.java deleted file mode 100644 index fc578ca7947..00000000000 --- a/framework/src/test/java/org/tron/common/application/GrpcNettyMaxConcurrentStreamsLimiterTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * java-tron is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * java-tron is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with java-tron. If not, see . - */ - -package org.tron.common.application; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThrows; - -import io.grpc.ChannelLogger; -import io.grpc.ChannelLogger.ChannelLogLevel; -import io.grpc.netty.GrpcHttp2ConnectionHandler; -import io.grpc.netty.InternalProtocolNegotiator; -import io.netty.channel.ChannelHandler; -import io.netty.handler.codec.http2.DefaultHttp2Connection; -import io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder; -import io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder; -import io.netty.handler.codec.http2.DefaultHttp2FrameReader; -import io.netty.handler.codec.http2.DefaultHttp2FrameWriter; -import io.netty.handler.codec.http2.Http2Connection; -import io.netty.handler.codec.http2.Http2ConnectionDecoder; -import io.netty.handler.codec.http2.Http2ConnectionEncoder; -import io.netty.handler.codec.http2.Http2Error; -import io.netty.handler.codec.http2.Http2Exception; -import io.netty.handler.codec.http2.Http2FrameWriter; -import io.netty.handler.codec.http2.Http2Settings; -import org.junit.Test; - -public class GrpcNettyMaxConcurrentStreamsLimiterTest { - - private static final ChannelLogger NOOP_LOGGER = new ChannelLogger() { - @Override - public void log(ChannelLogLevel level, String message) { - } - - @Override - public void log(ChannelLogLevel level, String messageFormat, Object... args) { - } - }; - - @Test - public void shouldEnforceMaxStreamsBeforeSettingsAck() throws Exception { - Http2Connection connection = new DefaultHttp2Connection(true); - GrpcHttp2ConnectionHandler grpcHandler = newGrpcHandler(connection); - InternalProtocolNegotiator.ProtocolNegotiator negotiator = - GrpcNettyMaxConcurrentStreamsLimiter.newPlaintextNegotiator(2); - - ChannelHandler negotiationHandler = negotiator.newHandler(grpcHandler); - - assertNotNull(negotiationHandler); - assertEquals(2, connection.remote().maxActiveStreams()); - connection.remote().createStream(1, true); - connection.remote().createStream(3, true); - Http2Exception exception = assertThrows( - Http2Exception.class, () -> connection.remote().createStream(5, true)); - assertEquals(Http2Error.REFUSED_STREAM, exception.error()); - negotiator.close(); - } - - @Test - public void shouldIgnoreClientMaxHeaderListSizeOnServer() throws Exception { - Http2Connection connection = new DefaultHttp2Connection(true); - Http2FrameWriter frameWriter = new DefaultHttp2FrameWriter(); - Http2ConnectionEncoder encoder = - new DefaultHttp2ConnectionEncoder(connection, frameWriter); - long originalMaxHeaderListSize = - encoder.configuration().headersConfiguration().maxHeaderListSize(); - - encoder.remoteSettings(new Http2Settings().maxHeaderListSize(1)); - - assertEquals(originalMaxHeaderListSize, - encoder.configuration().headersConfiguration().maxHeaderListSize()); - encoder.close(); - } - - @Test - public void shouldRejectNonPositiveStreamLimit() { - IllegalArgumentException zeroLimitException = assertThrows(IllegalArgumentException.class, - () -> GrpcNettyMaxConcurrentStreamsLimiter.newPlaintextNegotiator(0)); - assertEquals("maxConcurrentStreams must be positive", zeroLimitException.getMessage()); - IllegalArgumentException negativeLimitException = assertThrows(IllegalArgumentException.class, - () -> GrpcNettyMaxConcurrentStreamsLimiter.newPlaintextNegotiator(-1)); - assertEquals("maxConcurrentStreams must be positive", negativeLimitException.getMessage()); - } - - private static GrpcHttp2ConnectionHandler newGrpcHandler(Http2Connection connection) { - Http2FrameWriter frameWriter = new DefaultHttp2FrameWriter(); - Http2ConnectionEncoder encoder = - new DefaultHttp2ConnectionEncoder(connection, frameWriter); - Http2ConnectionDecoder decoder = new DefaultHttp2ConnectionDecoder( - connection, encoder, new DefaultHttp2FrameReader()); - return new GrpcHttp2ConnectionHandler( - null, decoder, encoder, new Http2Settings(), NOOP_LOGGER) { - }; - } -} diff --git a/framework/src/test/java/org/tron/common/application/NettyHttp2HeaderSecurityTest.java b/framework/src/test/java/org/tron/common/application/NettyHttp2HeaderSecurityTest.java new file mode 100644 index 00000000000..6a4f4330f04 --- /dev/null +++ b/framework/src/test/java/org/tron/common/application/NettyHttp2HeaderSecurityTest.java @@ -0,0 +1,53 @@ +/* + * java-tron is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * java-tron is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with java-tron. If not, see . + */ + +package org.tron.common.application; + +import static org.junit.Assert.assertEquals; + +import io.netty.handler.codec.http2.DefaultHttp2Connection; +import io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder; +import io.netty.handler.codec.http2.DefaultHttp2FrameWriter; +import io.netty.handler.codec.http2.Http2Connection; +import io.netty.handler.codec.http2.Http2ConnectionEncoder; +import io.netty.handler.codec.http2.Http2FrameWriter; +import io.netty.handler.codec.http2.Http2Settings; +import org.junit.Test; + +/** Guards the netty HTTP/2 header-size behaviour the gRPC server relies on. */ +public class NettyHttp2HeaderSecurityTest { + + /** + * CVE-2026-50560: SETTINGS_MAX_HEADER_LIST_SIZE tells the server what the client is willing to + * receive, so it must not shrink the server encoder's own limit. Otherwise a hostile client can + * advertise a tiny value and make every response-header write throw, which is a Rapid-Reset-like + * denial of service. Netty enforced the client value before 4.1.135.Final / 4.2.15.Final. + */ + @Test + public void shouldIgnoreClientMaxHeaderListSizeOnServer() throws Exception { + Http2Connection connection = new DefaultHttp2Connection(true); + Http2FrameWriter frameWriter = new DefaultHttp2FrameWriter(); + Http2ConnectionEncoder encoder = + new DefaultHttp2ConnectionEncoder(connection, frameWriter); + long originalMaxHeaderListSize = + encoder.configuration().headersConfiguration().maxHeaderListSize(); + + encoder.remoteSettings(new Http2Settings().maxHeaderListSize(1)); + + assertEquals(originalMaxHeaderListSize, + encoder.configuration().headersConfiguration().maxHeaderListSize()); + encoder.close(); + } +} diff --git a/framework/src/test/java/org/tron/common/runtime/VMActuatorMockTest.java b/framework/src/test/java/org/tron/common/runtime/VMActuatorMockTest.java index ab147f57a79..013ba606e9a 100644 --- a/framework/src/test/java/org/tron/common/runtime/VMActuatorMockTest.java +++ b/framework/src/test/java/org/tron/common/runtime/VMActuatorMockTest.java @@ -1,6 +1,8 @@ package org.tron.common.runtime; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.same; import java.lang.reflect.Field; import java.util.Collections; @@ -13,19 +15,70 @@ import org.tron.common.runtime.vm.LogInfo; import org.tron.core.actuator.VMActuator; import org.tron.core.db.TransactionContext; +import org.tron.core.vm.JumpTable; import org.tron.core.vm.OperationRegistry; import org.tron.core.vm.VM; import org.tron.core.vm.config.VMConfig; import org.tron.core.vm.program.Program; +import org.tron.core.vm.repository.Repository; public class VMActuatorMockTest { @BeforeClass public static void init() { - // warm up the registry so VM.play(..., OperationRegistry.getTable()) arg eval is safe + // Warm up the registry before VM execution timing starts. OperationRegistry.init(); } + @Test + public void constantCallUsesDedicatedJumpTable() throws Exception { + try (MockedStatic vmMock = Mockito.mockStatic(VM.class)) { + Program program = Mockito.mock(Program.class); + Mockito.when(program.getResult()).thenReturn(new ProgramResult()); + + VMActuator actuator = new VMActuator(true); + Field f = VMActuator.class.getDeclaredField("program"); + f.setAccessible(true); + f.set(actuator, program); + + TransactionContext context = Mockito.mock(TransactionContext.class); + Mockito.when(context.getProgramResult()).thenReturn(new ProgramResult()); + + actuator.execute(context); + + JumpTable transactionTable = OperationRegistry.getTable(false); + JumpTable constantCallTable = OperationRegistry.getTable(true); + vmMock.verify(() -> VM.play(any(), same(constantCallTable))); + vmMock.verify(() -> VM.play(any(), argThat(table -> table != transactionTable))); + } + } + + @Test + public void nonConstantCallUsesSharedJumpTable() throws Exception { + try (MockedStatic vmMock = Mockito.mockStatic(VM.class)) { + Program program = Mockito.mock(Program.class); + Mockito.when(program.getResult()).thenReturn(new ProgramResult()); + + VMActuator actuator = new VMActuator(false); + Field f = VMActuator.class.getDeclaredField("program"); + f.setAccessible(true); + f.set(actuator, program); + + Field repositoryField = VMActuator.class.getDeclaredField("rootRepository"); + repositoryField.setAccessible(true); + repositoryField.set(actuator, Mockito.mock(Repository.class)); + + TransactionContext context = Mockito.mock(TransactionContext.class); + Mockito.when(context.getProgramResult()).thenReturn(new ProgramResult()); + + actuator.execute(context); + + // The non-constant call must receive the shared consensus table itself. + JumpTable shared = OperationRegistry.getTable(false); + vmMock.verify(() -> VM.play(any(), same(shared))); + } + } + private void runCatchPathTest(Throwable thrownByVm, boolean osakaOn, int expectedSize) throws Exception { boolean prevOsaka = VMConfig.allowTvmOsaka(); diff --git a/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java b/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java index a1627f4f2e2..d6c344263dd 100644 --- a/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java +++ b/framework/src/test/java/org/tron/common/runtime/vm/OperationsTest.java @@ -3,6 +3,7 @@ import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.tron.core.config.Parameter.ChainConstant.FROZEN_PERIOD; +import static org.tron.core.config.Parameter.ForkBlockVersionEnum.VERSION_4_8_2_2; import java.util.List; import java.util.Locale; @@ -16,6 +17,7 @@ import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; +import org.mockito.MockedStatic; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; @@ -24,6 +26,7 @@ import org.tron.common.parameter.CommonParameter; import org.tron.common.runtime.InternalTransaction; import org.tron.common.utils.DecodeUtil; +import org.tron.common.utils.ForkController; import org.tron.core.Constant; import org.tron.core.Wallet; import org.tron.core.capsule.AccountCapsule; @@ -42,6 +45,7 @@ import org.tron.core.vm.config.ConfigLoader; import org.tron.core.vm.config.VMConfig; import org.tron.core.vm.program.Program; +import org.tron.core.vm.program.Program.OutOfTimeException; import org.tron.core.vm.program.invoke.ProgramInvokeMockImpl; import org.tron.core.vm.repository.Repository; import org.tron.protos.Protocol; @@ -51,7 +55,7 @@ public class OperationsTest extends BaseTest { private ProgramInvokeMockImpl invoke; private Program program; - private final JumpTable jumpTable = OperationRegistry.getTable(); + private final JumpTable jumpTable = OperationRegistry.prepareAndGetTable(false); @Autowired private Wallet wallet; @@ -1182,6 +1186,7 @@ public void testSuicideAction() throws ContractValidateException { program.suicide(new DataWord( dbManager.getAccountStore().getBlackhole().getAddress().toByteArray())); + Assert.assertTrue(program.getContractState().isSelfDestructed(program.getContextAddress())); DecodeUtil.addressPreFixByte = prePrefixByte; VMConfig.initAllowEnergyAdjustment(0); @@ -1240,6 +1245,7 @@ public void testSuicideAction2() throws ContractValidateException { OperationActions.suicideAction2(program); Assert.assertEquals(1, program.getResult().getDeleteAccounts().size()); + Assert.assertTrue(program.getContractState().isSelfDestructed(contractAddr)); invoke = new ProgramInvokeMockImpl(StoreFactory.getInstance(), new byte[0], contractAddr); @@ -1256,6 +1262,7 @@ public void testSuicideAction2() throws ContractValidateException { dbManager.getAccountStore().getBlackhole().getAddress().toByteArray())); Assert.assertEquals(0, spyProgram.getResult().getDeleteAccounts().size()); + Assert.assertTrue(spyProgram.getContractState().isSelfDestructed(contractAddr)); DecodeUtil.addressPreFixByte = prePrefixByte; VMConfig.initAllowEnergyAdjustment(0); @@ -1266,6 +1273,31 @@ public void testSuicideAction2() throws ContractValidateException { VMConfig.initAllowTvmVote(0); } + @Test + public void testSuicide2RejectsSelfDestructedBeneficiaryAfterFork() + throws ContractValidateException { + byte[] contractAddr = Hex.decode("41471fd3ad3e9eeadeec4608b92d16ce6b500704cc"); + byte[] beneficiary = Hex.decode("411111111111111111111111111111111111111111"); + invoke = new ProgramInvokeMockImpl(StoreFactory.getInstance(), new byte[0], contractAddr); + program = new Program(null, null, invoke, + new InternalTransaction( + Protocol.Transaction.getDefaultInstance(), + InternalTransaction.TrxType.TRX_UNKNOWN_TYPE)); + program.getContractState().markSelfDestruct(beneficiary); + + ForkController forkController = Mockito.mock(ForkController.class); + try (MockedStatic fork = Mockito.mockStatic(ForkController.class)) { + fork.when(ForkController::instance).thenReturn(forkController); + Mockito.when(forkController.pass(VERSION_4_8_2_2)).thenReturn(true); + + OutOfTimeException exception = Assert.assertThrows(OutOfTimeException.class, + () -> program.suicide2(new DataWord(beneficiary))); + Assert.assertEquals( + "CPU timeout for SELFDESTRUCT with selfdestructed beneficiary", + exception.getMessage()); + } + } + @Test public void testVoteWitnessCost() throws ContractValidateException { // Build stack environment, the stack from top to bottom is 0x00, 0x80, 0x00, 0x80 diff --git a/framework/src/test/java/org/tron/common/runtime/vm/VoteWitnessCost3Test.java b/framework/src/test/java/org/tron/common/runtime/vm/VoteWitnessCost3Test.java index 2c7aa238033..b949cbd8dc8 100644 --- a/framework/src/test/java/org/tron/common/runtime/vm/VoteWitnessCost3Test.java +++ b/framework/src/test/java/org/tron/common/runtime/vm/VoteWitnessCost3Test.java @@ -217,7 +217,7 @@ public void testWitnessArrayLargerThanAmountArray() { @Test public void testOperationRegistryWithoutOsaka() { VMConfig.initAllowTvmOsaka(0); - JumpTable table = OperationRegistry.getTable(); + JumpTable table = OperationRegistry.prepareAndGetTable(false); Operation voteOp = table.get(Op.VOTEWITNESS); assertTrue(voteOp.isEnabled()); @@ -233,7 +233,7 @@ public void testOperationRegistryWithoutOsaka() { public void testOperationRegistryWithOsaka() { VMConfig.initAllowTvmOsaka(1); try { - JumpTable table = OperationRegistry.getTable(); + JumpTable table = OperationRegistry.prepareAndGetTable(false); Operation voteOp = table.get(Op.VOTEWITNESS); assertTrue(voteOp.isEnabled()); diff --git a/framework/src/test/java/org/tron/common/utils/RandomGeneratorTest.java b/framework/src/test/java/org/tron/common/utils/RandomGeneratorTest.java index 4de441d940d..34c7536ebd0 100644 --- a/framework/src/test/java/org/tron/common/utils/RandomGeneratorTest.java +++ b/framework/src/test/java/org/tron/common/utils/RandomGeneratorTest.java @@ -9,7 +9,6 @@ import java.util.List; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; -import org.joda.time.DateTime; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -42,7 +41,7 @@ public void shuffle() { final List witnessCapsuleListBefore = this.getWitnessList(); logger.info("updateWitnessSchedule,before: " + getWitnessStringList(witnessCapsuleListBefore)); final List witnessCapsuleListAfter = new RandomGenerator() - .shuffle(witnessCapsuleListBefore, DateTime.now().getMillis()); + .shuffle(witnessCapsuleListBefore, System.currentTimeMillis()); logger.info("updateWitnessSchedule,after: " + getWitnessStringList(witnessCapsuleListAfter)); } diff --git a/framework/src/test/java/org/tron/common/utils/client/utils/TransactionUtils.java b/framework/src/test/java/org/tron/common/utils/client/utils/TransactionUtils.java index 63ffe1b58ff..7fa9fa71fa0 100644 --- a/framework/src/test/java/org/tron/common/utils/client/utils/TransactionUtils.java +++ b/framework/src/test/java/org/tron/common/utils/client/utils/TransactionUtils.java @@ -30,7 +30,7 @@ import org.tron.core.capsule.TransactionCapsule; import org.tron.core.exception.PermissionException; import org.tron.core.exception.SignatureFormatException; -import org.tron.core.services.http.JsonFormat; +import org.tron.core.services.http.servlets.JsonFormat; import org.tron.core.store.AccountStore; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract; diff --git a/framework/src/test/java/org/tron/core/BandwidthProcessorTest.java b/framework/src/test/java/org/tron/core/BandwidthProcessorTest.java index cf652af3650..622d20ae7d2 100755 --- a/framework/src/test/java/org/tron/core/BandwidthProcessorTest.java +++ b/framework/src/test/java/org/tron/core/BandwidthProcessorTest.java @@ -5,8 +5,8 @@ import com.google.protobuf.Any; import com.google.protobuf.ByteString; import java.nio.charset.StandardCharsets; +import java.time.ZonedDateTime; import lombok.extern.slf4j.Slf4j; -import org.joda.time.DateTime; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -64,8 +64,8 @@ public class BandwidthProcessorTest extends BaseTest { TO_ADDRESS = Wallet.getAddressPreFixString() + "abd4b9367799eaa3197fecb144eb71de1e049abc"; ASSET_ADDRESS = Wallet.getAddressPreFixString() + "548794500882809695a8a687866e76d4271a3456"; ASSET_ADDRESS_V2 = Wallet.getAddressPreFixString() + "548794500882809695a8a687866e76d4271a7890"; - START_TIME = DateTime.now().minusDays(1).getMillis(); - END_TIME = DateTime.now().getMillis(); + START_TIME = ZonedDateTime.now().minusDays(1).toInstant().toEpochMilli(); + END_TIME = System.currentTimeMillis(); } /** @@ -616,7 +616,7 @@ public void sameTokenNameCloseConsumeSuccess() { AccountType.Normal, chainBaseManager.getDynamicPropertiesStore().getAssetIssueFee()); ownerCapsule.setBalance(10_000_000L); - long expireTime = DateTime.now().getMillis() + 6 * 86_400_000; + long expireTime = System.currentTimeMillis() + 6 * 86_400_000; ownerCapsule.setFrozenForBandwidth(2_000_000L, expireTime); chainBaseManager.getAccountStore().put(ownerCapsule.getAddress().toByteArray(), ownerCapsule); @@ -627,7 +627,7 @@ public void sameTokenNameCloseConsumeSuccess() { AccountType.Normal, chainBaseManager.getDynamicPropertiesStore().getAssetIssueFee()); toAddressCapsule.setBalance(10_000_000L); - long expireTime2 = DateTime.now().getMillis() + 6 * 86_400_000; + long expireTime2 = System.currentTimeMillis() + 6 * 86_400_000; toAddressCapsule.setFrozenForBandwidth(2_000_000L, expireTime2); chainBaseManager.getAccountStore().put(toAddressCapsule.getAddress().toByteArray(), toAddressCapsule); @@ -731,7 +731,7 @@ public void sameTokenNameOpenConsumeSuccess() { AccountType.Normal, chainBaseManager.getDynamicPropertiesStore().getAssetIssueFee()); ownerCapsule.setBalance(10_000_000L); - long expireTime = DateTime.now().getMillis() + 6 * 86_400_000; + long expireTime = System.currentTimeMillis() + 6 * 86_400_000; ownerCapsule.setFrozenForBandwidth(2_000_000L, expireTime); chainBaseManager.getAccountStore().put(ownerCapsule.getAddress().toByteArray(), ownerCapsule); @@ -742,7 +742,7 @@ public void sameTokenNameOpenConsumeSuccess() { AccountType.Normal, chainBaseManager.getDynamicPropertiesStore().getAssetIssueFee()); toAddressCapsule.setBalance(10_000_000L); - long expireTime2 = DateTime.now().getMillis() + 6 * 86_400_000; + long expireTime2 = System.currentTimeMillis() + 6 * 86_400_000; toAddressCapsule.setFrozenForBandwidth(2_000_000L, expireTime2); chainBaseManager.getAccountStore().put(toAddressCapsule.getAddress().toByteArray(), toAddressCapsule); @@ -816,7 +816,7 @@ public void sameTokenNameCloseTransferToAccountNotExist() { AccountType.Normal, chainBaseManager.getDynamicPropertiesStore().getAssetIssueFee()); ownerCapsule.setBalance(10_000_000L); - long expireTime = DateTime.now().getMillis() + 6 * 86_400_000; + long expireTime = System.currentTimeMillis() + 6 * 86_400_000; ownerCapsule.setFrozenForBandwidth(2_000_000L, expireTime); chainBaseManager.getAccountStore().put(ownerCapsule.getAddress().toByteArray(), ownerCapsule); @@ -827,7 +827,7 @@ public void sameTokenNameCloseTransferToAccountNotExist() { AccountType.Normal, chainBaseManager.getDynamicPropertiesStore().getAssetIssueFee()); toAddressCapsule.setBalance(10_000_000L); - long expireTime2 = DateTime.now().getMillis() + 6 * 86_400_000; + long expireTime2 = System.currentTimeMillis() + 6 * 86_400_000; toAddressCapsule.setFrozenForBandwidth(2_000_000L, expireTime2); chainBaseManager.getAccountStore().delete(toAddressCapsule.getAddress().toByteArray()); diff --git a/framework/src/test/java/org/tron/core/ShieldWalletTest.java b/framework/src/test/java/org/tron/core/ShieldWalletTest.java index 0353d260eff..988364bb3c4 100644 --- a/framework/src/test/java/org/tron/core/ShieldWalletTest.java +++ b/framework/src/test/java/org/tron/core/ShieldWalletTest.java @@ -26,8 +26,8 @@ import org.tron.core.exception.ContractExeException; import org.tron.core.exception.ContractValidateException; import org.tron.core.exception.ZksnarkException; -import org.tron.core.services.http.JsonFormat; -import org.tron.core.services.http.JsonFormat.ParseException; +import org.tron.core.services.http.servlets.JsonFormat; +import org.tron.core.services.http.servlets.JsonFormat.ParseException; public class ShieldWalletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/WalletTest.java b/framework/src/test/java/org/tron/core/WalletTest.java index 9dbab338b67..7215a287912 100644 --- a/framework/src/test/java/org/tron/core/WalletTest.java +++ b/framework/src/test/java/org/tron/core/WalletTest.java @@ -30,12 +30,12 @@ import com.google.protobuf.Any; import com.google.protobuf.ByteString; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import javax.annotation.Resource; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.joda.time.DateTime; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; @@ -113,21 +113,29 @@ public class WalletTest extends BaseTest { public static final long BLOCK_NUM_THREE = 3; public static final long BLOCK_NUM_FOUR = 4; public static final long BLOCK_NUM_FIVE = 5; - public static final long BLOCK_TIMESTAMP_ONE = DateTime.now().minusDays(4).getMillis(); - public static final long BLOCK_TIMESTAMP_TWO = DateTime.now().minusDays(3).getMillis(); - public static final long BLOCK_TIMESTAMP_THREE = DateTime.now().minusDays(2).getMillis(); - public static final long BLOCK_TIMESTAMP_FOUR = DateTime.now().minusDays(1).getMillis(); - public static final long BLOCK_TIMESTAMP_FIVE = DateTime.now().getMillis(); + public static final long BLOCK_TIMESTAMP_ONE = + ZonedDateTime.now().minusDays(4).toInstant().toEpochMilli(); + public static final long BLOCK_TIMESTAMP_TWO = + ZonedDateTime.now().minusDays(3).toInstant().toEpochMilli(); + public static final long BLOCK_TIMESTAMP_THREE = + ZonedDateTime.now().minusDays(2).toInstant().toEpochMilli(); + public static final long BLOCK_TIMESTAMP_FOUR = + ZonedDateTime.now().minusDays(1).toInstant().toEpochMilli(); + public static final long BLOCK_TIMESTAMP_FIVE = System.currentTimeMillis(); public static final long BLOCK_WITNESS_ONE = 12; public static final long BLOCK_WITNESS_TWO = 13; public static final long BLOCK_WITNESS_THREE = 14; public static final long BLOCK_WITNESS_FOUR = 15; public static final long BLOCK_WITNESS_FIVE = 16; - public static final long TRANSACTION_TIMESTAMP_ONE = DateTime.now().minusDays(4).getMillis(); - public static final long TRANSACTION_TIMESTAMP_TWO = DateTime.now().minusDays(3).getMillis(); - public static final long TRANSACTION_TIMESTAMP_THREE = DateTime.now().minusDays(2).getMillis(); - public static final long TRANSACTION_TIMESTAMP_FOUR = DateTime.now().minusDays(1).getMillis(); - public static final long TRANSACTION_TIMESTAMP_FIVE = DateTime.now().getMillis(); + public static final long TRANSACTION_TIMESTAMP_ONE = + ZonedDateTime.now().minusDays(4).toInstant().toEpochMilli(); + public static final long TRANSACTION_TIMESTAMP_TWO = + ZonedDateTime.now().minusDays(3).toInstant().toEpochMilli(); + public static final long TRANSACTION_TIMESTAMP_THREE = + ZonedDateTime.now().minusDays(2).toInstant().toEpochMilli(); + public static final long TRANSACTION_TIMESTAMP_FOUR = + ZonedDateTime.now().minusDays(1).toInstant().toEpochMilli(); + public static final long TRANSACTION_TIMESTAMP_FIVE = System.currentTimeMillis(); @Resource private Wallet wallet; private static Block block1; diff --git a/framework/src/test/java/org/tron/core/actuator/ContractHashValidationTest.java b/framework/src/test/java/org/tron/core/actuator/ContractHashValidationTest.java new file mode 100644 index 00000000000..a2dd0a51e4e --- /dev/null +++ b/framework/src/test/java/org/tron/core/actuator/ContractHashValidationTest.java @@ -0,0 +1,67 @@ +package org.tron.core.actuator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.google.protobuf.ByteString; +import org.junit.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.tron.common.utils.ForkController; +import org.tron.core.config.Parameter.ForkBlockVersionEnum; +import org.tron.core.vm.program.Program.OutOfTimeException; +import org.tron.protos.contract.SmartContractOuterClass.SmartContract; + +public class ContractHashValidationTest { + + @Test + public void acceptsHashFieldsBeforeActivation() { + SmartContract contract = SmartContract.newBuilder() + .setCodeHash(ByteString.copyFromUtf8("code")) + .setTrxHash(ByteString.copyFromUtf8("transaction")) + .build(); + + runWithActivation(false, () -> VMActuator.checkContractHashFields(contract)); + } + + @Test + public void rejectsCodeHashAfterActivation() { + SmartContract contract = SmartContract.newBuilder() + .setCodeHash(ByteString.copyFromUtf8("code")) + .build(); + + OutOfTimeException exception = assertThrows(OutOfTimeException.class, + () -> runWithActivation(true, () -> VMActuator.checkContractHashFields(contract))); + + assertEquals("CPU timeout for contract hash fields", exception.getMessage()); + } + + @Test + public void rejectsTransactionHashAfterActivation() { + SmartContract contract = SmartContract.newBuilder() + .setTrxHash(ByteString.copyFromUtf8("transaction")) + .build(); + + OutOfTimeException exception = assertThrows(OutOfTimeException.class, + () -> runWithActivation(true, () -> VMActuator.checkContractHashFields(contract))); + + assertEquals("CPU timeout for contract hash fields", exception.getMessage()); + } + + @Test + public void acceptsEmptyHashFieldsAfterActivation() { + runWithActivation(true, + () -> VMActuator.checkContractHashFields(SmartContract.getDefaultInstance())); + } + + private void runWithActivation(boolean activated, Runnable action) { + ForkController controller = mock(ForkController.class); + when(controller.pass(ForkBlockVersionEnum.VERSION_4_8_2_2)).thenReturn(activated); + try (MockedStatic controllerMock = Mockito.mockStatic(ForkController.class)) { + controllerMock.when(ForkController::instance).thenReturn(controller); + action.run(); + } + } +} diff --git a/framework/src/test/java/org/tron/core/actuator/ContractNameValidationTest.java b/framework/src/test/java/org/tron/core/actuator/ContractNameValidationTest.java new file mode 100644 index 00000000000..e172829e7d6 --- /dev/null +++ b/framework/src/test/java/org/tron/core/actuator/ContractNameValidationTest.java @@ -0,0 +1,65 @@ +package org.tron.core.actuator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.junit.Test; +import org.junit.function.ThrowingRunnable; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.tron.common.utils.ForkController; +import org.tron.core.config.Parameter.ForkBlockVersionEnum; +import org.tron.core.exception.ContractValidateException; +import org.tron.protos.contract.SmartContractOuterClass.SmartContract; + +public class ContractNameValidationTest { + + @Test + public void acceptsThirtyTwoByteNameAfterActivation() throws Throwable { + SmartContract contract = contractWithName("12345678901234567890123456789012"); + + runWithActivation(true, () -> VMActuator.checkContractNameLength(contract)); + } + + @Test + public void rejectsThirtyThreeByteNameAfterActivation() { + SmartContract contract = contractWithName("123456789012345678901234567890123"); + + ContractValidateException exception = assertThrows(ContractValidateException.class, + () -> runWithActivation(true, () -> VMActuator.checkContractNameLength(contract))); + + assertEquals("contractName's length cannot be greater than 32", exception.getMessage()); + } + + @Test + public void countsMultibyteNameUsingProtobufBytesAfterActivation() { + SmartContract contract = contractWithName("合合合合合合合合合合合"); + assertEquals(33, contract.getNameBytes().size()); + + assertThrows(ContractValidateException.class, + () -> runWithActivation(true, () -> VMActuator.checkContractNameLength(contract))); + } + + @Test + public void preservesNameValidationBeforeActivation() { + SmartContract contract = contractWithName("123456789012345678901234567890123"); + + assertThrows(ContractValidateException.class, + () -> runWithActivation(false, () -> VMActuator.checkContractNameLength(contract))); + } + + private SmartContract contractWithName(String name) { + return SmartContract.newBuilder().setName(name).build(); + } + + private void runWithActivation(boolean activated, ThrowingRunnable action) throws Throwable { + ForkController controller = mock(ForkController.class); + when(controller.pass(ForkBlockVersionEnum.VERSION_4_8_2_2)).thenReturn(activated); + try (MockedStatic controllerMock = Mockito.mockStatic(ForkController.class)) { + controllerMock.when(ForkController::instance).thenReturn(controller); + action.run(); + } + } +} diff --git a/framework/src/test/java/org/tron/core/actuator/ParticipateAssetIssueActuatorTest.java b/framework/src/test/java/org/tron/core/actuator/ParticipateAssetIssueActuatorTest.java index 5c168f51bee..4af63285b1e 100755 --- a/framework/src/test/java/org/tron/core/actuator/ParticipateAssetIssueActuatorTest.java +++ b/framework/src/test/java/org/tron/core/actuator/ParticipateAssetIssueActuatorTest.java @@ -2,7 +2,7 @@ import com.google.protobuf.Any; import com.google.protobuf.ByteString; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -403,8 +403,8 @@ public void sameTokenNameOpenRightAssetIssue() { */ @Test public void sameTokenNameCloseAssetIssueTimeRight() { - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), now.toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(1000L)); @@ -436,8 +436,8 @@ public void sameTokenNameCloseAssetIssueTimeRight() { @Test public void sameTokenNameOpenAssetIssueTimeRight() { chainBaseManager.getDynamicPropertiesStore().saveAllowSameTokenName(1); - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), now.toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(1000L)); @@ -470,8 +470,8 @@ public void sameTokenNameOpenAssetIssueTimeRight() { */ @Test public void sameTokenNameCloseAssetIssueTimeLeft() { - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), now.toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(1000L)); @@ -504,8 +504,8 @@ public void sameTokenNameCloseAssetIssueTimeLeft() { @Test public void sameTokenNameOpenAssetIssueTimeLeft() { chainBaseManager.getDynamicPropertiesStore().saveAllowSameTokenName(1); - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), now.toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(1000L)); @@ -605,8 +605,9 @@ public void sameTokenNameOpenExchangeDevisibleTest() { */ @Test public void sameTokenNameCloseNegativeAmountTest() { - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(-999L)); @@ -639,8 +640,9 @@ public void sameTokenNameCloseNegativeAmountTest() { @Test public void sameTokenNameOpenNegativeAmountTest() { chainBaseManager.getDynamicPropertiesStore().saveAllowSameTokenName(1); - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(-999L)); @@ -675,8 +677,9 @@ public void sameTokenNameOpenNegativeAmountTest() { */ @Test public void sameTokenNameCloseZeroAmountTest() { - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(0)); @@ -709,8 +712,9 @@ public void sameTokenNameCloseZeroAmountTest() { @Test public void sameTokenNameOpenZeroAmountTest() { chainBaseManager.getDynamicPropertiesStore().saveAllowSameTokenName(1); - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager).setAny(getContract(0)); @@ -746,8 +750,9 @@ public void sameTokenNameOpenZeroAmountTest() { */ @Test public void sameTokenNameCloseNoExitOwnerTest() { - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager) .setAny(getContractWithOwner(101, NOT_EXIT_ADDRESS)); @@ -782,8 +787,9 @@ public void sameTokenNameCloseNoExitOwnerTest() { @Test public void sameTokenNameOpenNoExitOwnerTest() { chainBaseManager.getDynamicPropertiesStore().saveAllowSameTokenName(1); - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager) .setAny(getContractWithOwner(101, NOT_EXIT_ADDRESS)); @@ -1310,8 +1316,9 @@ public void sameTokenNameOpenNotEnoughAssetTest() { */ @Test public void sameTokenNameCloseNoneExistAssetTest() { - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager) .setAny(getContract(1, "TTTTTTTTTTTT")); @@ -1346,8 +1353,9 @@ public void sameTokenNameCloseNoneExistAssetTest() { @Test public void sameTokenNameOpenNoneExistAssetTest() { chainBaseManager.getDynamicPropertiesStore().saveAllowSameTokenName(1); - DateTime now = DateTime.now(); - initAssetIssue(now.minusDays(1).getMillis(), now.plusDays(1).getMillis()); + ZonedDateTime now = ZonedDateTime.now(); + initAssetIssue(now.minusDays(1).toInstant().toEpochMilli(), + now.plusDays(1).toInstant().toEpochMilli()); ParticipateAssetIssueActuator actuator = new ParticipateAssetIssueActuator(); actuator.setChainBaseManager(chainBaseManager) .setAny(getContract(1, "TTTTTTTTTTTT")); diff --git a/framework/src/test/java/org/tron/core/exception/TronErrorTest.java b/framework/src/test/java/org/tron/core/exception/TronErrorTest.java index 91559d86362..647df1f7db1 100644 --- a/framework/src/test/java/org/tron/core/exception/TronErrorTest.java +++ b/framework/src/test/java/org/tron/core/exception/TronErrorTest.java @@ -38,11 +38,10 @@ import org.tron.common.utils.ReflectUtils; import org.tron.common.zksnark.JLibrustzcash; import org.tron.core.config.args.Args; -import org.tron.core.services.http.GetBlockServlet; -import org.tron.core.services.http.RateLimiterServlet; +import org.tron.core.services.http.servlets.GetBlockServlet; +import org.tron.core.services.http.servlets.RateLimiterServlet; import org.tron.core.zen.ZksnarkInitService; - @RunWith(MockitoJUnitRunner.class) public class TronErrorTest { diff --git a/framework/src/test/java/org/tron/core/metrics/MetricsApiServiceTest.java b/framework/src/test/java/org/tron/core/metrics/MetricsApiServiceTest.java index f96a03d92e3..07f7bcfc6e8 100644 --- a/framework/src/test/java/org/tron/core/metrics/MetricsApiServiceTest.java +++ b/framework/src/test/java/org/tron/core/metrics/MetricsApiServiceTest.java @@ -38,6 +38,10 @@ protected void afterInit() { @Test public void testProcessMessage() { + MetricsUtil.getMeter(MetricsKey.NET_TCP_IN_TRAFFIC).mark(1000); + MetricsUtil.getMeter(MetricsKey.NET_TCP_OUT_TRAFFIC).mark(2000); + MetricsUtil.getMeter(MetricsKey.NET_UDP_IN_TRAFFIC).mark(4000); + MetricsUtil.getMeter(MetricsKey.NET_UDP_OUT_TRAFFIC).mark(8000); MetricsInfo m1 = metricsApiService.getMetricsInfo(); @@ -79,6 +83,20 @@ public void testProcessMessage() { Assert.assertEquals(m1.getNet().getErrorProtoCount(), m2.getNet().getErrorProtoCount()); Assert .assertEquals(m1.getNet().getValidConnectionCount(), m2.getNet().getValidConnectionCount()); + + long tcpIn = m1.getNet().getTcpInTraffic().getCount(); + long tcpOut = m1.getNet().getTcpOutTraffic().getCount(); + long udpIn = m1.getNet().getUdpInTraffic().getCount(); + long udpOut = m1.getNet().getUdpOutTraffic().getCount(); + + Assert.assertNotEquals(tcpOut, udpIn); + Assert.assertNotEquals(tcpIn, tcpOut); + Assert.assertNotEquals(udpIn, udpOut); + + Assert.assertEquals(tcpIn, m2.getNet().getTcpInTraffic().getCount()); + Assert.assertEquals(tcpOut, m2.getNet().getTcpOutTraffic().getCount()); + Assert.assertEquals(udpIn, m2.getNet().getUdpInTraffic().getCount()); + Assert.assertEquals(udpOut, m2.getNet().getUdpOutTraffic().getCount()); } } diff --git a/framework/src/test/java/org/tron/core/net/messagehandler/TransactionsMsgHandlerTest.java b/framework/src/test/java/org/tron/core/net/messagehandler/TransactionsMsgHandlerTest.java index ed2121d360f..78af06e64bc 100644 --- a/framework/src/test/java/org/tron/core/net/messagehandler/TransactionsMsgHandlerTest.java +++ b/framework/src/test/java/org/tron/core/net/messagehandler/TransactionsMsgHandlerTest.java @@ -4,6 +4,7 @@ import com.google.protobuf.ByteString; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -14,7 +15,6 @@ import java.util.concurrent.RejectedExecutionException; import lombok.Getter; -import org.joda.time.DateTime; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -67,7 +67,7 @@ public void testProcessMessage() { .setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString("121212a9cf"))) .setToAddress(ByteString.copyFrom(ByteArray.fromHexString("232323a9cf"))).build(); - long transactionTimestamp = DateTime.now().minusDays(4).getMillis(); + long transactionTimestamp = ZonedDateTime.now().minusDays(4).toInstant().toEpochMilli(); Protocol.Transaction trx = Protocol.Transaction.newBuilder().setRawData( Protocol.Transaction.raw.newBuilder().setTimestamp(transactionTimestamp) .setRefBlockNum(1) diff --git a/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java b/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java index 36253333a4e..f3d5636a207 100755 --- a/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java +++ b/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java @@ -25,7 +25,7 @@ import org.tron.core.config.args.Args; import org.tron.core.db.CommonDataBase; import org.tron.core.db2.ISession; -import org.tron.core.services.interfaceOnPBFT.http.PBFT.HttpApiOnPBFTService; +import org.tron.core.services.interfaceOnPBFT.HttpApiOnPBFTService; import org.tron.core.store.DynamicPropertiesStore; import org.tron.json.JSON; import org.tron.json.JSONObject; diff --git a/framework/src/test/java/org/tron/core/services/filter/HttpApiAccessFilterTest.java b/framework/src/test/java/org/tron/core/services/filter/HttpApiAccessFilterTest.java index c99b6064d15..bcd8cda6441 100644 --- a/framework/src/test/java/org/tron/core/services/filter/HttpApiAccessFilterTest.java +++ b/framework/src/test/java/org/tron/core/services/filter/HttpApiAccessFilterTest.java @@ -21,8 +21,8 @@ import org.tron.common.utils.PublicMethod; import org.tron.core.config.args.Args; import org.tron.core.services.http.FullNodeHttpApiService; -import org.tron.core.services.interfaceOnPBFT.http.PBFT.HttpApiOnPBFTService; -import org.tron.core.services.interfaceOnSolidity.http.solidity.HttpApiOnSolidityService; +import org.tron.core.services.interfaceOnPBFT.HttpApiOnPBFTService; +import org.tron.core.services.interfaceOnSolidity.HttpApiOnSolidityService; public class HttpApiAccessFilterTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/filter/WalletCursorFilterTest.java b/framework/src/test/java/org/tron/core/services/filter/WalletCursorFilterTest.java new file mode 100644 index 00000000000..22e56633489 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/filter/WalletCursorFilterTest.java @@ -0,0 +1,74 @@ +package org.tron.core.services.filter; + +import static org.junit.Assert.fail; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import org.junit.Test; +import org.mockito.InOrder; +import org.tron.core.db.Manager; +import org.tron.core.db2.core.Chainbase; + +/** + * Behaviour of the cursor filters that replaced the per-servlet OnSolidity / OnPBFT wrappers. + * The route tests only prove which paths are mounted; these prove the cursor is actually switched + * for the request and always reset, so a solidity/pbft read cannot silently serve HEAD state and a + * cursor cannot leak onto a pooled jetty thread. + */ +public class WalletCursorFilterTest { + + @Test + public void testSolidityFilterSetsCursorBeforeChainAndResetsAfter() throws Exception { + Manager manager = mock(Manager.class); + FilterChain chain = mock(FilterChain.class); + ServletRequest req = mock(ServletRequest.class); + ServletResponse resp = mock(ServletResponse.class); + + new SolidityCursorFilter(manager).doFilter(req, resp, chain); + + // cursor is set to SOLIDITY before the servlet runs and reset only after it returns + InOrder order = inOrder(manager, chain); + order.verify(manager).setCursor(Chainbase.Cursor.SOLIDITY); + order.verify(chain).doFilter(req, resp); + order.verify(manager).resetCursor(); + } + + @Test + public void testPbftFilterSetsCursorBeforeChainAndResetsAfter() throws Exception { + Manager manager = mock(Manager.class); + FilterChain chain = mock(FilterChain.class); + ServletRequest req = mock(ServletRequest.class); + ServletResponse resp = mock(ServletResponse.class); + + new PbftCursorFilter(manager).doFilter(req, resp, chain); + + InOrder order = inOrder(manager, chain); + order.verify(manager).setCursor(Chainbase.Cursor.PBFT); + order.verify(chain).doFilter(req, resp); + order.verify(manager).resetCursor(); + } + + @Test + public void testCursorIsResetWhenChainThrows() throws Exception { + Manager manager = mock(Manager.class); + FilterChain chain = mock(FilterChain.class); + ServletRequest req = mock(ServletRequest.class); + ServletResponse resp = mock(ServletResponse.class); + doThrow(new ServletException("boom")).when(chain).doFilter(req, resp); + + try { + new SolidityCursorFilter(manager).doFilter(req, resp, chain); + fail("expected the chain exception to propagate"); + } catch (ServletException expected) { + // expected + } + // the finally block must still restore HEAD, or the next request on this thread reads SOLIDITY + verify(manager).resetCursor(); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/CursorFilterInstallationTest.java b/framework/src/test/java/org/tron/core/services/http/CursorFilterInstallationTest.java new file mode 100644 index 00000000000..7af802617e3 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/CursorFilterInstallationTest.java @@ -0,0 +1,109 @@ +package org.tron.core.services.http; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.withSettings; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import javax.servlet.Filter; +import org.eclipse.jetty.servlet.FilterHolder; +import org.eclipse.jetty.servlet.FilterMapping; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.junit.Assert; +import org.junit.Test; +import org.mockito.Answers; +import org.tron.core.db.Manager; +import org.tron.core.services.filter.PbftCursorFilter; +import org.tron.core.services.filter.SolidityCursorFilter; +import org.tron.core.services.http.solidity.SolidityNodeHttpApiService; +import org.tron.core.services.interfaceOnPBFT.HttpApiOnPBFTService; +import org.tron.core.services.interfaceOnSolidity.HttpApiOnSolidityService; + +/** + * Guards that each http service installs (or omits) its read-cursor filter. The route tests cannot + * catch a dropped cursor filter — the paths would still mount, but a solidity/pbft read would + * silently serve HEAD state. This pins the filter to its port so that regression fails a test. + */ +public class CursorFilterInstallationTest { + + @Test + public void testSolidityServiceInstallsSolidityCursorFilterOnAllPaths() throws Exception { + Map> cursor = cursorFilterMappings(HttpApiOnSolidityService.class); + Assert.assertEquals(Collections.singleton("/*"), cursor.get("SolidityCursorFilter")); + Assert.assertEquals(1, cursor.size()); + } + + @Test + public void testPbftServiceInstallsPbftCursorFilterOnAllPaths() throws Exception { + Map> cursor = cursorFilterMappings(HttpApiOnPBFTService.class); + Assert.assertEquals(Collections.singleton("/*"), cursor.get("PbftCursorFilter")); + Assert.assertEquals(1, cursor.size()); + } + + @Test + public void testFullNodeServiceInstallsNoCursorFilter() throws Exception { + // the fullnode port reads HEAD; a cursor filter here would switch it off HEAD + Assert.assertTrue(cursorFilterMappings(FullNodeHttpApiService.class).isEmpty()); + } + + @Test + public void testSolidityNodeServiceInstallsNoCursorFilter() throws Exception { + // the standalone solidity node's db head already is the solidified view + Assert.assertTrue(cursorFilterMappings(SolidityNodeHttpApiService.class).isEmpty()); + } + + /** + * Runs a service's real addFilter against a jetty context with its filter fields injected, and + * returns each installed cursor filter's simple class name mapped to its path specs. + */ + private static Map> cursorFilterMappings(Class serviceClass) + throws Exception { + Manager manager = mock(Manager.class); + Object service = mock(serviceClass, withSettings().defaultAnswer(Answers.CALLS_REAL_METHODS)); + for (Field field : serviceClass.getDeclaredFields()) { + if (!Filter.class.isAssignableFrom(field.getType())) { + continue; + } + field.setAccessible(true); + if (field.getType() == SolidityCursorFilter.class) { + field.set(service, new SolidityCursorFilter(manager)); + } else if (field.getType() == PbftCursorFilter.class) { + field.set(service, new PbftCursorFilter(manager)); + } else { + field.set(service, mock(field.getType())); + } + } + + ServletContextHandler context = new ServletContextHandler(); + Method addFilter = serviceClass.getDeclaredMethod("addFilter", ServletContextHandler.class); + addFilter.setAccessible(true); + addFilter.invoke(service, context); + + // identify cursor filters by held class name (an instance holder's getFilter() is null before + // start, but its class name is set in the constructor) + Map cursorFilterNames = new HashMap<>(); + for (FilterHolder holder : context.getServletHandler().getFilters()) { + String className = holder.getClassName(); + if (SolidityCursorFilter.class.getName().equals(className) + || PbftCursorFilter.class.getName().equals(className)) { + cursorFilterNames.put(holder.getName(), + className.substring(className.lastIndexOf('.') + 1)); + } + } + Map> result = new HashMap<>(); + for (FilterMapping mapping : context.getServletHandler().getFilterMappings()) { + String simpleName = cursorFilterNames.get(mapping.getFilterName()); + if (simpleName != null) { + result.computeIfAbsent(simpleName, k -> new HashSet<>()) + .addAll(Arrays.asList(mapping.getPathSpecs())); + } + } + return result; + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/HttpApiRegistryTest.java b/framework/src/test/java/org/tron/core/services/http/HttpApiRegistryTest.java new file mode 100644 index 00000000000..a235c38dd8b --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/HttpApiRegistryTest.java @@ -0,0 +1,184 @@ +package org.tron.core.services.http; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.withSettings; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletMapping; +import org.junit.Assert; +import org.junit.Test; +import org.mockito.Answers; +import org.springframework.context.ApplicationContext; +import org.tron.core.services.http.HttpApi.Surface; +import org.tron.core.services.http.solidity.SolidityNodeHttpApiService; +import org.tron.core.services.interfaceOnPBFT.HttpApiOnPBFTService; +import org.tron.core.services.interfaceOnSolidity.HttpApiOnSolidityService; + +public class HttpApiRegistryTest { + + private static final String REGTEST = "org.tron.core.services.http.regtest."; + + @Test + public void testValidFixturePackageBuilds() { + List entries = + HttpApiRegistry.buildFromPackage(REGTEST + "valid"); + Set suffixes = new TreeSet<>(); + for (HttpApiRegistry.Entry entry : entries) { + suffixes.add(entry.getSuffix()); + } + Assert.assertEquals(new TreeSet<>(Arrays.asList("validread", "validwrite")), suffixes); + } + + @Test + public void testUnannotatedServletRejected() { + assertBuildFails(REGTEST + "noanno", "must declare exactly one"); + } + + @Test + public void testBothAnnotationsRejected() { + assertBuildFails(REGTEST + "both", "must declare exactly one"); + } + + @Test + public void testWriteOnCursorSurfaceRejected() { + assertBuildFails(REGTEST + "writecursor", "may only be exposed on the FULL surface"); + } + + @Test + public void testBuildOnCursorSurfaceRejected() { + assertBuildFails(REGTEST + "buildcursor", "may only be exposed on the FULL surface"); + } + + @Test + public void testDuplicateSuffixRejected() { + assertBuildFails(REGTEST + "dupsuffix", "duplicate endpoint"); + } + + @Test + public void testSlashInSuffixRejected() { + assertBuildFails(REGTEST + "slash", "must not contain '/'"); + } + + @Test + public void testBlankSuffixRejected() { + assertBuildFails(REGTEST + "blank", "blank"); + } + + @Test + public void testMissingComponentRejected() { + assertBuildFails(REGTEST + "notcomponent", "must be a @Component"); + } + + @Test + public void testEmptySurfacesRejected() { + assertBuildFails(REGTEST + "emptysurface", "at least one surface"); + } + + /** + * A suffix is concatenated into a jetty path spec, so {@code *} would mount the servlet as a + * prefix wildcard swallowing every sibling endpoint under the same prefix. + */ + @Test + public void testWildcardSuffixRejected() { + assertBuildFails(REGTEST + "wildcard", "single path token"); + } + + /** A suffix carrying whitespace mounts an endpoint at a path no client can request. */ + @Test + public void testWhitespaceInSuffixRejected() { + assertBuildFails(REGTEST + "whitespace", "single path token"); + } + + /** + * A nested class can never be mounted, so declaring an endpoint on one must fail loudly rather + * than drop the endpoint silently — the omission this registry exists to prevent. + */ + @Test + public void testNestedEndpointDeclarationRejected() { + assertBuildFails(REGTEST + "nested", "must be a concrete top-level class"); + } + + private void assertBuildFails(String pkg, String fragment) { + try { + HttpApiRegistry.buildFromPackage(pkg); + Assert.fail("expected build to fail for " + pkg); + } catch (IllegalStateException e) { + Assert.assertTrue("message '" + e.getMessage() + "' should contain '" + fragment + "'", + e.getMessage() != null && e.getMessage().contains(fragment)); + } + } + + @Test + public void testFullNodeServiceMountsExactlyTheRegistry() throws Exception { + Set expected = pathsOf(Surface.FULL, "/wallet/"); + expected.add("/net/listnodes"); + expected.add("/monitor/getstatsinfo"); + expected.add("/monitor/getnodeinfo"); + Assert.assertEquals(expected, mountedPaths(FullNodeHttpApiService.class)); + } + + @Test + public void testSolidityServiceMountsExactlyTheRegistry() throws Exception { + Set expected = pathsOf(Surface.SOLIDITY, "/walletsolidity/"); + expected.add("/wallet/getnodeinfo"); + Assert.assertEquals(expected, mountedPaths(HttpApiOnSolidityService.class)); + } + + @Test + public void testPbftServiceMountsExactlyTheRegistry() throws Exception { + Set expected = pathsOf(Surface.PBFT, "/"); + Assert.assertEquals(expected, mountedPaths(HttpApiOnPBFTService.class)); + } + + @Test + public void testSolidityNodeServiceMountsExactlyTheRegistry() throws Exception { + Set expected = pathsOf(Surface.SOLIDITY_NODE, "/walletsolidity/"); + expected.add("/wallet/getnodeinfo"); + Assert.assertEquals(expected, mountedPaths(SolidityNodeHttpApiService.class)); + } + + private static Set pathsOf(Surface surface, String prefix) { + Set paths = new HashSet<>(); + for (HttpApiRegistry.Entry entry : HttpApiRegistry.forSurface(surface)) { + paths.add(prefix + entry.getSuffix()); + } + return paths; + } + + /** + * Instantiates the service without running its constructor, injects a mock application + * context whose beans are mocks, runs the registry-driven registration against a real + * jetty context and returns every mounted path spec. + */ + private static Set mountedPaths(Class serviceClass) throws Exception { + ApplicationContext ctx = mock(ApplicationContext.class); + given(ctx.getBean(any(Class.class))).willAnswer(inv -> mock((Class) inv.getArgument(0))); + + Object service = mock(serviceClass, + withSettings().defaultAnswer(Answers.CALLS_REAL_METHODS)); + Field appContext = serviceClass.getDeclaredField("appContext"); + appContext.setAccessible(true); + appContext.set(service, ctx); + + ServletContextHandler context = new ServletContextHandler(); + Method register = serviceClass + .getDeclaredMethod("addServletsFromRegistry", ServletContextHandler.class); + register.setAccessible(true); + register.invoke(service, context); + + Set mounted = new HashSet<>(); + for (ServletMapping mapping : context.getServletHandler().getServletMappings()) { + mounted.addAll(Arrays.asList(mapping.getPathSpecs())); + } + return mounted; + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/JsonRpcRateLimiterServletTest.java b/framework/src/test/java/org/tron/core/services/http/JsonRpcRateLimiterServletTest.java new file mode 100644 index 00000000000..d94f372ce97 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/JsonRpcRateLimiterServletTest.java @@ -0,0 +1,130 @@ +package org.tron.core.services.http; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import com.googlecode.jsonrpc4j.JsonRpcServer; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Collection; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.mockito.MockedStatic; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.util.ReflectionTestUtils; +import org.tron.common.TestConstants; +import org.tron.core.config.args.Args; +import org.tron.core.services.http.servlets.RateLimiterServlet; +import org.tron.core.services.interfaceJsonRpcOnPBFT.JsonRpcOnPBFTServlet; +import org.tron.core.services.interfaceJsonRpcOnSolidity.JsonRpcOnSolidityServlet; +import org.tron.core.services.interfaceOnPBFT.WalletOnPBFT; +import org.tron.core.services.interfaceOnSolidity.WalletOnSolidity; +import org.tron.core.services.jsonrpc.JsonRpcServlet; +import org.tron.core.services.ratelimiter.GlobalRateLimiter; +import org.tron.core.services.ratelimiter.RateLimiterContainer; +import org.tron.core.services.ratelimiter.RuntimeData; +import org.tron.core.services.ratelimiter.adapter.IRateLimiter; + +@RunWith(Parameterized.class) +public class JsonRpcRateLimiterServletTest { + + private final Class servletClass; + private RateLimiterServlet servlet; + private IRateLimiter perEndpoint; + private Object dispatcher; + private MockHttpServletRequest request; + private MockHttpServletResponse response; + + public JsonRpcRateLimiterServletTest(Class servletClass) { + this.servletClass = servletClass; + } + + @Parameterized.Parameters(name = "{0}") + public static Collection servlets() { + return Arrays.asList(new Object[][] { + {JsonRpcServlet.class}, + {JsonRpcOnSolidityServlet.class}, + {JsonRpcOnPBFTServlet.class} + }); + } + + @Before + public void setUp() throws Exception { + // Initialize Args before GlobalRateLimiter's static QPS limiters are loaded. + Args.setParam(new String[0], TestConstants.TEST_CONF); + servlet = servletClass.getDeclaredConstructor().newInstance(); + RateLimiterContainer container = new RateLimiterContainer(); + perEndpoint = mock(IRateLimiter.class); + container.add("http_", servletClass.getSimpleName(), perEndpoint); + ReflectionTestUtils.setField(servlet, "container", container); + + if (servlet instanceof JsonRpcOnSolidityServlet) { + dispatcher = mock(WalletOnSolidity.class); + ReflectionTestUtils.setField(servlet, "walletOnSolidity", dispatcher); + } else if (servlet instanceof JsonRpcOnPBFTServlet) { + dispatcher = mock(WalletOnPBFT.class); + ReflectionTestUtils.setField(servlet, "walletOnPBFT", dispatcher); + } else { + dispatcher = mock(JsonRpcServer.class); + ReflectionTestUtils.setField(servlet, "rpcServer", dispatcher); + } + + request = new MockHttpServletRequest("POST", "/jsonrpc"); + request.setServletPath("/jsonrpc"); + request.setRemoteAddr("10.0.0.1"); + request.setContentType("application/json"); + request.setContent("{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"id\":1}" + .getBytes(StandardCharsets.UTF_8)); + response = new MockHttpServletResponse(); + } + + @After + public void tearDown() { + Args.clearParam(); + } + + @Test + public void testPerEndpointRejectionReturnsSanitizedHttpError() throws Exception { + when(perEndpoint.acquirePermit(any(RuntimeData.class))).thenReturn(false); + + try (MockedStatic global = mockStatic(GlobalRateLimiter.class)) { + servlet.service(request, response); + + global.verify(() -> GlobalRateLimiter.acquirePermit(any()), never()); + assertRateLimitResponse(); + } + } + + @Test + public void testGlobalRejectionReturnsSanitizedHttpError() throws Exception { + when(perEndpoint.acquirePermit(any(RuntimeData.class))).thenReturn(true); + + try (MockedStatic global = mockStatic(GlobalRateLimiter.class)) { + global.when(() -> GlobalRateLimiter.acquirePermit(any())).thenReturn(false); + + servlet.service(request, response); + + global.verify(() -> GlobalRateLimiter.acquirePermit(any())); + assertRateLimitResponse(); + } + } + + private void assertRateLimitResponse() throws Exception { + assertEquals(200, response.getStatus()); + assertEquals("application/json; charset=utf-8", response.getContentType()); + assertEquals("{\"Error\":\"lack of computing resources\"}", + response.getContentAsString().trim()); + verify(perEndpoint).acquirePermit(any(RuntimeData.class)); + verifyNoInteractions(dispatcher); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/RateLimiterServletInt64Test.java b/framework/src/test/java/org/tron/core/services/http/RateLimiterServletInt64Test.java index 882c5f99833..62266051aa9 100644 --- a/framework/src/test/java/org/tron/core/services/http/RateLimiterServletInt64Test.java +++ b/framework/src/test/java/org/tron/core/services/http/RateLimiterServletInt64Test.java @@ -13,6 +13,9 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.core.services.http.servlets.GetBurnTrxServlet; +import org.tron.core.services.http.servlets.GetNowBlockServlet; +import org.tron.core.services.http.servlets.JsonFormat; /** * End-to-end integration tests for {@link RateLimiterServlet#service} wiring of the diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/blank/BlankServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/blank/BlankServlet.java new file mode 100644 index 00000000000..bb226bb0a4b --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/blank/BlankServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.blank; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Blank suffix. */ +@Component +@HttpApi(value = "", access = Access.READ, surfaces = {Surface.FULL}) +public class BlankServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/both/BothServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/both/BothServlet.java new file mode 100644 index 00000000000..1ecb2906c4d --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/both/BothServlet.java @@ -0,0 +1,15 @@ +package org.tron.core.services.http.regtest.both; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; +import org.tron.core.services.http.HttpApiExcluded; + +/** Declares both annotations. */ +@Component +@HttpApiExcluded("conflicting") +@HttpApi(value = "both", access = Access.READ, surfaces = {Surface.FULL}) +public class BothServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/buildcursor/BuildOnPbftServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/buildcursor/BuildOnPbftServlet.java new file mode 100644 index 00000000000..ce63244a91c --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/buildcursor/BuildOnPbftServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.buildcursor; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** BUILD on a cursor surface. */ +@Component +@HttpApi(value = "buildcursor", access = Access.BUILD, surfaces = {Surface.PBFT}) +public class BuildOnPbftServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/dupsuffix/DupOneServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/dupsuffix/DupOneServlet.java new file mode 100644 index 00000000000..b5126f5ec28 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/dupsuffix/DupOneServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.dupsuffix; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Duplicate suffix, one. */ +@Component +@HttpApi(value = "dup", access = Access.READ, surfaces = {Surface.FULL}) +public class DupOneServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/dupsuffix/DupTwoServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/dupsuffix/DupTwoServlet.java new file mode 100644 index 00000000000..96061b55133 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/dupsuffix/DupTwoServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.dupsuffix; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Duplicate suffix, two. */ +@Component +@HttpApi(value = "dup", access = Access.READ, surfaces = {Surface.FULL}) +public class DupTwoServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/emptysurface/EmptySurfaceServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/emptysurface/EmptySurfaceServlet.java new file mode 100644 index 00000000000..2cfbdd0da60 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/emptysurface/EmptySurfaceServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.emptysurface; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** No surfaces. */ +@Component +@HttpApi(value = "empty", access = Access.READ, surfaces = {}) +public class EmptySurfaceServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/nested/NestedHolder.java b/framework/src/test/java/org/tron/core/services/http/regtest/nested/NestedHolder.java new file mode 100644 index 00000000000..c6332f3b2dd --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/nested/NestedHolder.java @@ -0,0 +1,16 @@ +package org.tron.core.services.http.regtest.nested; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Probe: a NESTED servlet that declares @HttpApi — is it silently dropped? */ +public class NestedHolder { + + @Component + @HttpApi(value = "nestedendpoint", access = Access.READ, surfaces = {Surface.FULL}) + public static class NestedEndpointServlet extends HttpServlet { + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/noanno/NoAnnoServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/noanno/NoAnnoServlet.java new file mode 100644 index 00000000000..53093610e99 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/noanno/NoAnnoServlet.java @@ -0,0 +1,8 @@ +package org.tron.core.services.http.regtest.noanno; + +import javax.servlet.http.HttpServlet; + +/** Servlet with no registry annotation. */ + +public class NoAnnoServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/notcomponent/NotComponentServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/notcomponent/NotComponentServlet.java new file mode 100644 index 00000000000..e4ac3eb7a68 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/notcomponent/NotComponentServlet.java @@ -0,0 +1,11 @@ +package org.tron.core.services.http.regtest.notcomponent; + +import javax.servlet.http.HttpServlet; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** @HttpApi without @Component. */ +@HttpApi(value = "notcomp", access = Access.READ, surfaces = {Surface.FULL}) +public class NotComponentServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/slash/SlashServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/slash/SlashServlet.java new file mode 100644 index 00000000000..47481168fb0 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/slash/SlashServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.slash; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Suffix with a slash. */ +@Component +@HttpApi(value = "a/b", access = Access.READ, surfaces = {Surface.FULL}) +public class SlashServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidExcludedServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidExcludedServlet.java new file mode 100644 index 00000000000..9db7a4b52a5 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidExcludedServlet.java @@ -0,0 +1,9 @@ +package org.tron.core.services.http.regtest.valid; + +import javax.servlet.http.HttpServlet; +import org.tron.core.services.http.HttpApiExcluded; + +/** Excluded fixture, skipped by the registry. */ +@HttpApiExcluded("excluded fixture") +public class ValidExcludedServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidReadServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidReadServlet.java new file mode 100644 index 00000000000..2dc5b0065b0 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidReadServlet.java @@ -0,0 +1,14 @@ +package org.tron.core.services.http.regtest.valid; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Valid READ fixture. */ +@Component +@HttpApi(value = "validread", access = Access.READ, + surfaces = {Surface.FULL, Surface.SOLIDITY}) +public class ValidReadServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidWriteServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidWriteServlet.java new file mode 100644 index 00000000000..97cfe624028 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/valid/ValidWriteServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.valid; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Valid WRITE fixture. */ +@Component +@HttpApi(value = "validwrite", access = Access.WRITE, surfaces = {Surface.FULL}) +public class ValidWriteServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/whitespace/WhitespaceServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/whitespace/WhitespaceServlet.java new file mode 100644 index 00000000000..349d6ce6dc6 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/whitespace/WhitespaceServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.whitespace; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Probe: suffix with surrounding whitespace — stored untrimmed. */ +@Component +@HttpApi(value = " getaccount ", access = Access.READ, surfaces = {Surface.FULL}) +public class WhitespaceServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/wildcard/WildcardServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/wildcard/WildcardServlet.java new file mode 100644 index 00000000000..270d27945ec --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/wildcard/WildcardServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.wildcard; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** Probe: suffix "*" — would mount as the Jetty prefix wildcard /wallet/*. */ +@Component +@HttpApi(value = "*", access = Access.READ, surfaces = {Surface.FULL}) +public class WildcardServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/regtest/writecursor/WriteOnSolidityServlet.java b/framework/src/test/java/org/tron/core/services/http/regtest/writecursor/WriteOnSolidityServlet.java new file mode 100644 index 00000000000..add471f2fff --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/regtest/writecursor/WriteOnSolidityServlet.java @@ -0,0 +1,13 @@ +package org.tron.core.services.http.regtest.writecursor; + +import javax.servlet.http.HttpServlet; +import org.springframework.stereotype.Component; +import org.tron.core.services.http.HttpApi; +import org.tron.core.services.http.HttpApi.Access; +import org.tron.core.services.http.HttpApi.Surface; + +/** WRITE on a cursor surface. */ +@Component +@HttpApi(value = "writecursor", access = Access.WRITE, surfaces = {Surface.SOLIDITY}) +public class WriteOnSolidityServlet extends HttpServlet { +} diff --git a/framework/src/test/java/org/tron/core/services/http/AccountPermissionUpdateServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/AccountPermissionUpdateServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/AccountPermissionUpdateServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/AccountPermissionUpdateServletTest.java index e93c41397a2..413ee37700b 100644 --- a/framework/src/test/java/org/tron/core/services/http/AccountPermissionUpdateServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/AccountPermissionUpdateServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/BaseHttpTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/BaseHttpTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/BaseHttpTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/BaseHttpTest.java index 47710a8ca93..f1019abad55 100644 --- a/framework/src/test/java/org/tron/core/services/http/BaseHttpTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/BaseHttpTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/BroadcastServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/BroadcastServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/BroadcastServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/BroadcastServletTest.java index d6bf3850f30..83a9c88f72e 100644 --- a/framework/src/test/java/org/tron/core/services/http/BroadcastServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/BroadcastServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -156,7 +156,7 @@ public void doPostTest() throws IOException { while ((text = bufferedReader.readLine()) != null) { sb.append(text); } - Assert.assertTrue(sb.toString().contains("null")); + Assert.assertTrue(sb.toString().contains("{\"Error\":\"internal server error\"}")); httpUrlConnection.disconnect(); } } \ No newline at end of file diff --git a/framework/src/test/java/org/tron/core/services/http/CancelAllUnfreezeV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/CancelAllUnfreezeV2ServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/CancelAllUnfreezeV2ServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/CancelAllUnfreezeV2ServletTest.java index 59a3f02256c..0ebc0984c9a 100644 --- a/framework/src/test/java/org/tron/core/services/http/CancelAllUnfreezeV2ServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/CancelAllUnfreezeV2ServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ClearABIServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ClearABIServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/ClearABIServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ClearABIServletTest.java index 9d75226aa42..6da52cfe751 100644 --- a/framework/src/test/java/org/tron/core/services/http/ClearABIServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ClearABIServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.assertTrue; diff --git a/framework/src/test/java/org/tron/core/services/http/CreateAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/CreateAccountServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/CreateAccountServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/CreateAccountServletTest.java index c9d6a4f2a63..4df55141b70 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateAccountServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/CreateAccountServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; @@ -21,7 +21,6 @@ import org.tron.json.JSONObject; import org.tron.protos.Protocol; - public class CreateAccountServletTest extends BaseTest { static { diff --git a/framework/src/test/java/org/tron/core/services/http/CreateAssetIssueServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/CreateAssetIssueServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/CreateAssetIssueServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/CreateAssetIssueServletTest.java index 9a53814ea11..e4e34b78d01 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateAssetIssueServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/CreateAssetIssueServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/CreateSpendAuthSigServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/CreateSpendAuthSigServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/CreateSpendAuthSigServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/CreateSpendAuthSigServletTest.java index 2253fecfb52..fadc417f6c4 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateSpendAuthSigServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/CreateSpendAuthSigServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/CreateWitnessServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/CreateWitnessServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/CreateWitnessServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/CreateWitnessServletTest.java index bd8145fed7b..b677e050902 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateWitnessServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/CreateWitnessServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/DelegateResourceServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/DelegateResourceServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/DelegateResourceServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/DelegateResourceServletTest.java index 07ca6750e31..aba05e1b4b2 100644 --- a/framework/src/test/java/org/tron/core/services/http/DelegateResourceServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/DelegateResourceServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/DeployContractServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/DeployContractServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/DeployContractServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/DeployContractServletTest.java index 703f278c890..8a866869b56 100644 --- a/framework/src/test/java/org/tron/core/services/http/DeployContractServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/DeployContractServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeCreateServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeCreateServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/ExchangeCreateServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ExchangeCreateServletTest.java index 11840a895bd..c3371bcb620 100644 --- a/framework/src/test/java/org/tron/core/services/http/ExchangeCreateServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeCreateServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeInjectServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeInjectServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/ExchangeInjectServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ExchangeInjectServletTest.java index f2f661732d2..4a4a26474c1 100644 --- a/framework/src/test/java/org/tron/core/services/http/ExchangeInjectServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeInjectServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeTransactionServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeTransactionServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/ExchangeTransactionServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ExchangeTransactionServletTest.java index 6e986288b3c..1cbf2c10575 100644 --- a/framework/src/test/java/org/tron/core/services/http/ExchangeTransactionServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeTransactionServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeWithdrawServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeWithdrawServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/ExchangeWithdrawServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ExchangeWithdrawServletTest.java index b1147b819dd..2dddaba915a 100644 --- a/framework/src/test/java/org/tron/core/services/http/ExchangeWithdrawServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ExchangeWithdrawServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/FreezeBalanceServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/FreezeBalanceServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/FreezeBalanceServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/FreezeBalanceServletTest.java index 9d56381f9a8..c652c405303 100644 --- a/framework/src/test/java/org/tron/core/services/http/FreezeBalanceServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/FreezeBalanceServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/FreezeBalanceV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/FreezeBalanceV2ServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/FreezeBalanceV2ServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/FreezeBalanceV2ServletTest.java index 414054501e6..65e63cdb390 100644 --- a/framework/src/test/java/org/tron/core/services/http/FreezeBalanceV2ServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/FreezeBalanceV2ServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/GetAccountByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetAccountByIdServletTest.java similarity index 96% rename from framework/src/test/java/org/tron/core/services/http/GetAccountByIdServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetAccountByIdServletTest.java index 885e5b2a1cf..8afee18f6e0 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAccountByIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetAccountByIdServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.apache.commons.lang3.StringUtils.isNotEmpty; diff --git a/framework/src/test/java/org/tron/core/services/http/GetAccountResourceServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetAccountResourceServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetAccountResourceServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetAccountResourceServletTest.java index cc5ed97b94b..49b499d0a55 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAccountResourceServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetAccountResourceServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/framework/src/test/java/org/tron/core/services/http/GetAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetAccountServletTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/GetAccountServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetAccountServletTest.java index 1c1d42c9a5c..8401bc3045e 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAccountServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetAccountServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueByIdServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetAssetIssueByIdServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueByIdServletTest.java index b87331d6d61..dea33eebea8 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueByIdServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByNameServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueByNameServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetAssetIssueByNameServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueByNameServletTest.java index ccfa3af2e56..adc5ff8e064 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByNameServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueByNameServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListByNameServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueListByNameServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetAssetIssueListByNameServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueListByNameServletTest.java index e3055e21f99..9d73bc4c812 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListByNameServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueListByNameServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueListServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetAssetIssueListServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueListServletTest.java index 2b9e997cf80..71b8d754590 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetAssetIssueListServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetBandwidthPricesServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetBandwidthPricesServletTest.java index 2ddfda17bef..b47e19b6762 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetBandwidthPricesServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/GetBlockByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetBlockByIdServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetBlockByIdServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetBlockByIdServletTest.java index 8e04713922a..83adb0d73b7 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBlockByIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetBlockByIdServletTest.java @@ -1,10 +1,9 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.junit.Assert; diff --git a/framework/src/test/java/org/tron/core/services/http/GetBlockByNumServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetBlockByNumServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetBlockByNumServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetBlockByNumServletTest.java index b28e1d33308..14248be2484 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBlockByNumServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetBlockByNumServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertTrue; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; diff --git a/framework/src/test/java/org/tron/core/services/http/GetBlockServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetBlockServletTest.java similarity index 96% rename from framework/src/test/java/org/tron/core/services/http/GetBlockServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetBlockServletTest.java index f48f9eb0fbc..3965bd55c1d 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBlockServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetBlockServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetBrokerageServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetBrokerageServletTest.java index 9b37c2e4205..5a778d077a2 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetBrokerageServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; diff --git a/framework/src/test/java/org/tron/core/services/http/GetContractInfoServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetContractInfoServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetContractInfoServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetContractInfoServletTest.java index 532bb42706f..887a884aae4 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetContractInfoServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetContractInfoServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/framework/src/test/java/org/tron/core/services/http/GetContractServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetContractServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetContractServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetContractServletTest.java index 074093de2a1..620010f87ed 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetContractServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetContractServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexServletTest.java index 21a455c108f..29c50ce0cc3 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; diff --git a/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexV2ServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2ServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexV2ServletTest.java index 41be6db4d5a..3f0d6385275 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2ServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetDelegatedResourceAccountIndexV2ServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; diff --git a/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetEnergyPricesServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetEnergyPricesServletTest.java index f0fe69fe450..e7bfc0380e1 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetEnergyPricesServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/GetExchangeByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetExchangeByIdServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetExchangeByIdServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetExchangeByIdServletTest.java index f67072e9856..e62cef02608 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetExchangeByIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetExchangeByIdServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/framework/src/test/java/org/tron/core/services/http/GetMarketOrderByAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetMarketOrderByAccountServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetMarketOrderByAccountServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetMarketOrderByAccountServletTest.java index a1895231f8a..bcb30e51ca2 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetMarketOrderByAccountServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetMarketOrderByAccountServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetMemoFeePricesServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetMemoFeePricesServletTest.java index b9440aa948f..102ceab2458 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetMemoFeePricesServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/GetNowBlockServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetNowBlockServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetNowBlockServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetNowBlockServletTest.java index 1179e914d32..43442f20e17 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetNowBlockServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetNowBlockServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.commons.lang3.StringUtils.EMPTY; diff --git a/framework/src/test/java/org/tron/core/services/http/GetProposalByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetProposalByIdServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetProposalByIdServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetProposalByIdServletTest.java index cf64adcb1a1..24ee48a8826 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetProposalByIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetProposalByIdServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetRewardServletTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetRewardServletTest.java index 9afa5607a66..10920c4fb8b 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetRewardServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.tron.common.utils.Commons.decodeFromBase58Check; diff --git a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionInfoByBlockNumServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionInfoByBlockNumServletTest.java index 1763e440b48..44fc9f63e5e 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionInfoByBlockNumServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; diff --git a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionInfoByIdServletTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByIdServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionInfoByIdServletTest.java index 6793433371d..b80310da18a 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionInfoByIdServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; diff --git a/framework/src/test/java/org/tron/core/services/http/GetTransactionListFromPendingServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionListFromPendingServletTest.java similarity index 95% rename from framework/src/test/java/org/tron/core/services/http/GetTransactionListFromPendingServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionListFromPendingServletTest.java index 52277992850..0b7054c9e41 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetTransactionListFromPendingServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/GetTransactionListFromPendingServletTest.java @@ -1,10 +1,9 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpGet; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; @@ -13,7 +12,6 @@ import org.tron.common.TestConstants; import org.tron.core.config.args.Args; - public class GetTransactionListFromPendingServletTest extends BaseTest { @Resource diff --git a/framework/src/test/java/org/tron/core/services/http/HttpServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/HttpServletTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/HttpServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/HttpServletTest.java index 03cf11f39a1..ef03cef1920 100644 --- a/framework/src/test/java/org/tron/core/services/http/HttpServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/HttpServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import lombok.extern.slf4j.Slf4j; import org.junit.Before; diff --git a/framework/src/test/java/org/tron/core/services/http/JsonFormatEscapeTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatEscapeTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/JsonFormatEscapeTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatEscapeTest.java index a5c74cc434d..c522d29af03 100644 --- a/framework/src/test/java/org/tron/core/services/http/JsonFormatEscapeTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatEscapeTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -16,6 +16,7 @@ import org.junit.Test; import org.tron.common.utils.ByteArray; import org.tron.core.capsule.TransactionCapsule; +import org.tron.core.services.http.HttpSelfFormatFieldName; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; diff --git a/framework/src/test/java/org/tron/core/services/http/JsonFormatInt64AsStringTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatInt64AsStringTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/JsonFormatInt64AsStringTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatInt64AsStringTest.java index 77ea73999d1..4c0805b4536 100644 --- a/framework/src/test/java/org/tron/core/services/http/JsonFormatInt64AsStringTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatInt64AsStringTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/framework/src/test/java/org/tron/core/services/http/JsonFormatTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/JsonFormatTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatTest.java index 46d1743c5b9..a5bf388e74c 100644 --- a/framework/src/test/java/org/tron/core/services/http/JsonFormatTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/JsonFormatTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -8,13 +8,11 @@ import com.google.protobuf.ByteString; import com.google.protobuf.UnknownFieldSet; - import java.io.CharArrayReader; import java.io.IOException; import java.io.StringWriter; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; - import org.junit.After; import org.junit.Test; import org.mockito.Mockito; diff --git a/framework/src/test/java/org/tron/core/services/http/ListNodesServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ListNodesServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/ListNodesServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ListNodesServletTest.java index 767d89c6e2f..a371cf5b468 100644 --- a/framework/src/test/java/org/tron/core/services/http/ListNodesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ListNodesServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.assertNotNull; diff --git a/framework/src/test/java/org/tron/core/services/http/ListProposalsServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ListProposalsServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/ListProposalsServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ListProposalsServletTest.java index f600f704aa7..2d4604f60a2 100644 --- a/framework/src/test/java/org/tron/core/services/http/ListProposalsServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ListProposalsServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; diff --git a/framework/src/test/java/org/tron/core/services/http/MarketCancelOrderServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/MarketCancelOrderServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/MarketCancelOrderServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/MarketCancelOrderServletTest.java index 7c8e529b275..8f0131c6e64 100644 --- a/framework/src/test/java/org/tron/core/services/http/MarketCancelOrderServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/MarketCancelOrderServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/MarketSellAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/MarketSellAssetServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/MarketSellAssetServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/MarketSellAssetServletTest.java index e82178b909a..79240798fa6 100644 --- a/framework/src/test/java/org/tron/core/services/http/MarketSellAssetServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/MarketSellAssetServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ParticipateAssetIssueServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ParticipateAssetIssueServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/ParticipateAssetIssueServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ParticipateAssetIssueServletTest.java index 0fbfe73d6fc..50c24d9ca43 100644 --- a/framework/src/test/java/org/tron/core/services/http/ParticipateAssetIssueServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ParticipateAssetIssueServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ProposalApproveServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ProposalApproveServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/ProposalApproveServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ProposalApproveServletTest.java index f017b06de24..c2d679d5961 100644 --- a/framework/src/test/java/org/tron/core/services/http/ProposalApproveServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ProposalApproveServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ProposalCreateServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ProposalCreateServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/ProposalCreateServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ProposalCreateServletTest.java index 0057aa7bd2d..a4cc5809420 100644 --- a/framework/src/test/java/org/tron/core/services/http/ProposalCreateServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ProposalCreateServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/ProposalDeleteServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ProposalDeleteServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/ProposalDeleteServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ProposalDeleteServletTest.java index 90a25e5bb68..0b9f67e5eb2 100644 --- a/framework/src/test/java/org/tron/core/services/http/ProposalDeleteServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ProposalDeleteServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/RateLimiterServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/RateLimiterServletTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/RateLimiterServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/RateLimiterServletTest.java index 26826c5709d..bb4da26a046 100644 --- a/framework/src/test/java/org/tron/core/services/http/RateLimiterServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/RateLimiterServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; diff --git a/framework/src/test/java/org/tron/core/services/http/ScanShieldedTRC20NotesServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/ScanShieldedTRC20NotesServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesServletTest.java index c53274897e7..22654be47b9 100644 --- a/framework/src/test/java/org/tron/core/services/http/ScanShieldedTRC20NotesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ScanShieldedTRC20NotesServletTest.java @@ -1,8 +1,8 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static java.nio.charset.StandardCharsets.UTF_8; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import static org.tron.core.services.http.Util.EVENTS_DEPRECATED_MSG; +import static org.tron.core.services.http.servlets.Util.EVENTS_DEPRECATED_MSG; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; diff --git a/framework/src/test/java/org/tron/core/services/http/SetAccountIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/SetAccountIdServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/SetAccountIdServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/SetAccountIdServletTest.java index 6967372c9ac..7c2007212d1 100644 --- a/framework/src/test/java/org/tron/core/services/http/SetAccountIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/SetAccountIdServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/TransferAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/TransferAssetServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/TransferAssetServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/TransferAssetServletTest.java index 49652f3361d..75e8ad7bbc3 100644 --- a/framework/src/test/java/org/tron/core/services/http/TransferAssetServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/TransferAssetServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/TransferServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/TransferServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/TransferServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/TransferServletTest.java index b04c6255dac..96875375fb8 100644 --- a/framework/src/test/java/org/tron/core/services/http/TransferServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/TransferServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/TriggerConstantContractServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/TriggerConstantContractServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/TriggerConstantContractServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/TriggerConstantContractServletTest.java index 2a139f8a158..d6d71e41a7a 100644 --- a/framework/src/test/java/org/tron/core/services/http/TriggerConstantContractServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/TriggerConstantContractServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; diff --git a/framework/src/test/java/org/tron/core/services/http/TriggerSmartContractServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/TriggerSmartContractServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/TriggerSmartContractServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/TriggerSmartContractServletTest.java index bae9523401b..c5389e681da 100644 --- a/framework/src/test/java/org/tron/core/services/http/TriggerSmartContractServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/TriggerSmartContractServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.gson.JsonObject; import lombok.extern.slf4j.Slf4j; diff --git a/framework/src/test/java/org/tron/core/services/http/UnDelegateResourceServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UnDelegateResourceServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/UnDelegateResourceServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UnDelegateResourceServletTest.java index fbdb0138c41..9dfa957ed07 100644 --- a/framework/src/test/java/org/tron/core/services/http/UnDelegateResourceServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UnDelegateResourceServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UnFreezeAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeAssetServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/UnFreezeAssetServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeAssetServletTest.java index a9c784c38e8..f57fe9c07d3 100644 --- a/framework/src/test/java/org/tron/core/services/http/UnFreezeAssetServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeAssetServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeBalanceServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeBalanceServletTest.java index 800e5e957dc..b9bcbe03bc1 100644 --- a/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeBalanceServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeBalanceV2ServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceV2ServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeBalanceV2ServletTest.java index cb27bc0df69..46ed8779465 100644 --- a/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceV2ServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UnFreezeBalanceV2ServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateAccountServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/UpdateAccountServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UpdateAccountServletTest.java index 4d60a39d0b8..114f62b624a 100644 --- a/framework/src/test/java/org/tron/core/services/http/UpdateAccountServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateAccountServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateAssetServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/UpdateAssetServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UpdateAssetServletTest.java index 18fbdb84a28..0522cef9e41 100644 --- a/framework/src/test/java/org/tron/core/services/http/UpdateAssetServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateAssetServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateBrokerageServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/UpdateBrokerageServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UpdateBrokerageServletTest.java index 378690e9bdc..2c8e05670af 100644 --- a/framework/src/test/java/org/tron/core/services/http/UpdateBrokerageServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateBrokerageServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateEnergyLimitServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateEnergyLimitServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/UpdateEnergyLimitServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UpdateEnergyLimitServletTest.java index b54407c7ab0..9cc2d36c31f 100644 --- a/framework/src/test/java/org/tron/core/services/http/UpdateEnergyLimitServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateEnergyLimitServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateSettingServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateSettingServletTest.java similarity index 98% rename from framework/src/test/java/org/tron/core/services/http/UpdateSettingServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UpdateSettingServletTest.java index cd33306f50c..1068443cdba 100644 --- a/framework/src/test/java/org/tron/core/services/http/UpdateSettingServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateSettingServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateWitnessServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateWitnessServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/UpdateWitnessServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UpdateWitnessServletTest.java index 52c0e5ede91..527a4825cf8 100644 --- a/framework/src/test/java/org/tron/core/services/http/UpdateWitnessServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UpdateWitnessServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UtilMockTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/UtilMockTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UtilMockTest.java index d4124c90adf..b7b6faa46a5 100644 --- a/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UtilMockTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import com.google.protobuf.Descriptors; diff --git a/framework/src/test/java/org/tron/core/services/http/servlets/UtilProcessErrorTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UtilProcessErrorTest.java new file mode 100644 index 00000000000..23480c5c4c6 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UtilProcessErrorTest.java @@ -0,0 +1,107 @@ +package org.tron.core.services.http.servlets; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +import com.google.protobuf.InvalidProtocolBufferException; +import org.bouncycastle.util.encoders.DecoderException; +import org.bouncycastle.util.encoders.Hex; +import org.junit.Test; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.exception.ContractValidateException; +import org.tron.core.exception.HeaderNotFound; +import org.tron.core.exception.MaintenanceUnavailableException; +import org.tron.core.exception.ZkProofValidateException; +import org.tron.json.JSONException; +import org.tron.json.JSONObject; + +public class UtilProcessErrorTest { + + private static final String INTERNAL_SERVER_ERROR = "internal server error"; + private static final String RATE_LIMITER_ERROR_MSG = "lack of computing resources"; + + @Test + public void exactCompatibilityTypesPreserveNonBlankMessage() throws Exception { + assertError(new JsonFormat.ParseException("1:2: invalid \"field\"\nvalue"), + "1:2: invalid \"field\"\nvalue"); + assertError(new ContractValidateException("balance is not sufficient"), + "balance is not sufficient"); + assertError(new MaintenanceUnavailableException("maintenance in progress"), + "maintenance in progress"); + } + + @Test + public void unclassifiedTypesFailClosed() throws Exception { + DecoderException decoder = assertThrows(DecoderException.class, () -> Hex.decode("zz")); + Exception[] errors = { + new NullPointerException("internal field name"), + new JSONException("server serialization detail"), + new InvalidProtocolBufferException("stored protobuf detail"), + decoder, + new HeaderNotFound("latest block not found"), + new IllegalArgumentException("No enum constant internal.Type.VALUE"), + new IllegalAccessException(RATE_LIMITER_ERROR_MSG), + new IllegalAccessException("other access failure"), + new ZkProofValidateException("wrapped validation detail", true) + }; + + for (Exception error : errors) { + assertError(error, INTERNAL_SERVER_ERROR); + } + } + + @Test + public void onlyExactFixedControlSignalsArePreserved() throws Exception { + assertError(new IllegalArgumentException(Util.EVENTS_DEPRECATED_MSG), + Util.EVENTS_DEPRECATED_MSG); + assertError(new IllegalArgumentException("other argument failure"), INTERNAL_SERVER_ERROR); + assertError(new NumberFormatException(Util.EVENTS_DEPRECATED_MSG), INTERNAL_SERVER_ERROR); + } + + @Test + public void nullBlankAndSubclassMessagesFailClosed() throws Exception { + assertError(null, INTERNAL_SERVER_ERROR); + assertError(new JsonFormat.ParseException(null), INTERNAL_SERVER_ERROR); + assertError(new JsonFormat.ParseException(""), INTERNAL_SERVER_ERROR); + assertError(new JsonFormat.ParseException(" "), INTERNAL_SERVER_ERROR); + assertError(new ContractValidateException("subclass message") { }, INTERNAL_SERVER_ERROR); + } + + @Test + public void auditedErrorWriterPreservesTextVerbatim() throws Exception { + for (String audited : new String[] {Util.INVALID_ADDRESS_MSG, Util.RATE_LIMITER_ERROR_MSG}) { + MockHttpServletResponse response = new MockHttpServletResponse(); + Util.writeAuditedError(audited, response); + JSONObject body = JSONObject.parseObject(response.getContentAsString()); + assertEquals(audited, body.getString("Error")); + } + } + + @Test + public void auditedErrorWriterWithNullMessageWritesEmptyObject() throws Exception { + MockHttpServletResponse response = new MockHttpServletResponse(); + Util.writeAuditedError(null, response); + assertEquals("{}", response.getContentAsString().trim()); + } + + @Test + public void serverErrorChannelSanitizesLikeTheSharedPath() throws Exception { + assertServerError(new NullPointerException("internal field name"), INTERNAL_SERVER_ERROR); + assertServerError(new ContractValidateException("balance is not sufficient"), + "balance is not sufficient"); + } + + private static void assertServerError(Exception error, String expected) throws Exception { + MockHttpServletResponse response = new MockHttpServletResponse(); + Util.processServerError(error, response); + JSONObject body = JSONObject.parseObject(response.getContentAsString()); + assertEquals(expected, body.getString("Error")); + } + + private static void assertError(Exception error, String expected) throws Exception { + MockHttpServletResponse response = new MockHttpServletResponse(); + Util.processError(error, response); + JSONObject body = JSONObject.parseObject(response.getContentAsString()); + assertEquals(expected, body.getString("Error")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UtilTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/UtilTest.java similarity index 99% rename from framework/src/test/java/org/tron/core/services/http/UtilTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/UtilTest.java index c619fd0de54..715c66ba888 100644 --- a/framework/src/test/java/org/tron/core/services/http/UtilTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/UtilTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import com.google.protobuf.ByteString; import javax.annotation.Resource; diff --git a/framework/src/test/java/org/tron/core/services/http/ValidateAddressServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/ValidateAddressServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/ValidateAddressServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/ValidateAddressServletTest.java index a74f04765a8..ffeadf0e4f5 100644 --- a/framework/src/test/java/org/tron/core/services/http/ValidateAddressServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/ValidateAddressServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/framework/src/test/java/org/tron/core/services/http/VoteWitnessAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/VoteWitnessAccountServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/VoteWitnessAccountServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/VoteWitnessAccountServletTest.java index 8166a001ce7..622ef36a0d4 100644 --- a/framework/src/test/java/org/tron/core/services/http/VoteWitnessAccountServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/VoteWitnessAccountServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/WithdrawBalanceServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/WithdrawBalanceServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/WithdrawBalanceServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/WithdrawBalanceServletTest.java index f793265f9bc..2cdadef53cd 100644 --- a/framework/src/test/java/org/tron/core/services/http/WithdrawBalanceServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/WithdrawBalanceServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/WithdrawExpireUnfreezeServletTest.java b/framework/src/test/java/org/tron/core/services/http/servlets/WithdrawExpireUnfreezeServletTest.java similarity index 97% rename from framework/src/test/java/org/tron/core/services/http/WithdrawExpireUnfreezeServletTest.java rename to framework/src/test/java/org/tron/core/services/http/servlets/WithdrawExpireUnfreezeServletTest.java index 9e733018452..e9c5dfda164 100644 --- a/framework/src/test/java/org/tron/core/services/http/WithdrawExpireUnfreezeServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/servlets/WithdrawExpireUnfreezeServletTest.java @@ -1,4 +1,4 @@ -package org.tron.core.services.http; +package org.tron.core.services.http.servlets; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/framework/src/test/java/org/tron/core/services/http/solidity/GetTransactionByIdSolidityServletTest.java b/framework/src/test/java/org/tron/core/services/http/solidity/GetTransactionByIdSolidityServletTest.java deleted file mode 100644 index e1abb41d1e1..00000000000 --- a/framework/src/test/java/org/tron/core/services/http/solidity/GetTransactionByIdSolidityServletTest.java +++ /dev/null @@ -1,202 +0,0 @@ -package org.tron.core.services.http.solidity; - -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLStreamHandlerFactory; -import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.tron.common.utils.FileUtil; -import org.tron.common.utils.PublicMethod; -import org.tron.core.services.http.solidity.mockito.HttpUrlStreamHandler; - - -@Slf4j -public class GetTransactionByIdSolidityServletTest { - - private static HttpUrlStreamHandler httpUrlStreamHandler; - private GetTransactionByIdSolidityServlet getTransactionByIdSolidityServlet; - private HttpServletRequest request; - private HttpServletResponse response; - private HttpURLConnection httpUrlConnection; - private OutputStreamWriter outputStreamWriter; - private URL url; - - /** - * . - */ - @BeforeClass - public static void init() { - // Allows for mocking URL connections - URLStreamHandlerFactory urlStreamHandlerFactory = mock(URLStreamHandlerFactory.class); - try { - URL.setURLStreamHandlerFactory(urlStreamHandlerFactory); - } catch (Error e) { - logger.info("Ignore error: {}", e.getMessage()); - } - - httpUrlStreamHandler = new HttpUrlStreamHandler(); - given(urlStreamHandlerFactory.createURLStreamHandler("http")).willReturn(httpUrlStreamHandler); - } - - /** - * Init. - */ - - @Before - public void setUp() { - getTransactionByIdSolidityServlet = new GetTransactionByIdSolidityServlet(); - this.request = mock(HttpServletRequest.class); - this.response = mock(HttpServletResponse.class); - this.httpUrlConnection = mock(HttpURLConnection.class); - this.outputStreamWriter = mock(OutputStreamWriter.class); - httpUrlStreamHandler.resetConnections(); - } - - /** - * Release Resource. - */ - @After - public void tearDown() { - if (FileUtil.deleteDir(new File("temp.txt"))) { - logger.info("Release resources successful."); - } else { - logger.info("Release resources failure."); - } - } - - @Test - public void doPostTest() throws IOException { - - //send Post request - - final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); - System.setOut(new PrintStream(outContent)); - String href = "http://127.0.0.1:" - + PublicMethod.chooseRandomPort() + "/walletsolidity/gettransactioninfobyid"; - httpUrlStreamHandler.addConnection(new URL(href), httpUrlConnection); - httpUrlConnection.setRequestMethod("POST"); - httpUrlConnection.setRequestProperty("Content-Type", "application/json"); - httpUrlConnection.setRequestProperty("Connection", "Keep-Alive"); - httpUrlConnection.setUseCaches(false); - httpUrlConnection.setDoOutput(true); - String postData = "{\"value\": \"309b6fa3d01353e46f57dd8a8f27611f98e392b50d035cef21" - + "3f2c55225a8bd2\"}"; - httpUrlConnection.setRequestProperty("Content-Length", String.valueOf(postData.length())); - - when(httpUrlConnection.getOutputStream()).thenReturn(outContent); - OutputStreamWriter out = new OutputStreamWriter(httpUrlConnection.getOutputStream(), - StandardCharsets.UTF_8); - out.write(postData); - out.flush(); - out.close(); - PrintWriter writer = new PrintWriter("temp.txt"); - when(response.getWriter()).thenReturn(writer); - - getTransactionByIdSolidityServlet.doPost(request, response); - // Get Response Body - String line; - StringBuilder result = new StringBuilder(); - - byte[] buffer = new byte[1024]; - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buffer); - when(httpUrlConnection.getInputStream()).thenReturn(byteArrayInputStream); - BufferedReader in = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream(), - StandardCharsets.UTF_8)); - - while ((line = in.readLine()) != null) { - result.append(line).append("\n"); - } - Assert.assertNotNull(result); - in.close(); - writer.flush(); - FileInputStream fileInputStream = new FileInputStream("temp.txt"); - InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); - BufferedReader bufferedReader = new BufferedReader(inputStreamReader); - - StringBuilder sb = new StringBuilder(); - String text; - while ((text = bufferedReader.readLine()) != null) { - sb.append(text); - } - Assert.assertTrue(sb.toString().contains("null")); - httpUrlConnection.disconnect(); - } - - @Test - public void doGetTest() throws IOException { - - final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); - System.setOut(new PrintStream(outContent)); - String href = "http://127.0.0.1:" - + PublicMethod.chooseRandomPort() + "/walletsolidity/gettransactioninfobyid"; - httpUrlStreamHandler.addConnection(new URL(href), httpUrlConnection); - httpUrlConnection.setRequestMethod("GET"); - httpUrlConnection.setRequestProperty("Content-Type", "application/json"); - httpUrlConnection.setRequestProperty("Connection", "Keep-Alive"); - httpUrlConnection.setUseCaches(false); - httpUrlConnection.setDoOutput(true); - String postData = "{\"value\": \"309b6fa3d01353e46f57dd8a8f27611f98e392b50d035cef21" - + "3f2c55225a8bd2\"}"; - httpUrlConnection.setRequestProperty("Content-Length", String.valueOf(postData.length())); - - when(httpUrlConnection.getOutputStream()).thenReturn(outContent); - OutputStreamWriter out = new OutputStreamWriter(httpUrlConnection.getOutputStream(), - StandardCharsets.UTF_8); - out.write(postData); - out.flush(); - out.close(); - PrintWriter writer = new PrintWriter("temp.txt"); - when(response.getWriter()).thenReturn(writer); - - getTransactionByIdSolidityServlet.doPost(request, response); - // Get Response Body - String line; - StringBuilder result = new StringBuilder(); - - byte[] buffer = new byte[1024]; - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buffer); - when(httpUrlConnection.getInputStream()).thenReturn(byteArrayInputStream); - BufferedReader in = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream(), - StandardCharsets.UTF_8)); - - while ((line = in.readLine()) != null) { - result.append(line).append("\n"); - } - Assert.assertNotNull(result); - in.close(); - writer.flush(); - FileInputStream fileInputStream = new FileInputStream("temp.txt"); - InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); - BufferedReader bufferedReader = new BufferedReader(inputStreamReader); - - StringBuilder sb = new StringBuilder(); - String text; - while ((text = bufferedReader.readLine()) != null) { - sb.append(text); - } - Assert.assertTrue(sb.toString().contains("null")); - httpUrlConnection.disconnect(); - } -} - diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServletTest.java deleted file mode 100644 index b37a792bc45..00000000000 --- a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServletTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.tron.common.utils.client.utils.HttpMethed.createRequest; - -import java.io.UnsupportedEncodingException; -import javax.annotation.Resource; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.tron.common.BaseTest; -import org.tron.common.TestConstants; -import org.tron.core.config.args.Args; -import org.tron.json.JSONObject; - -public class GetBandwidthPricesOnPBFTServletTest extends BaseTest { - - @Resource - private GetBandwidthPricesOnPBFTServlet getBandwidthPricesOnPBFTServlet; - - @BeforeClass - public static void init() { - Args.setParam(new String[]{"-d", dbPath()}, TestConstants.TEST_CONF); - } - - @Test - public void testGet() { - MockHttpServletRequest request = createRequest(HttpGet.METHOD_NAME); - MockHttpServletResponse response = new MockHttpServletResponse(); - getBandwidthPricesOnPBFTServlet.doPost(request, response); - try { - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } - - @Test - public void testPost() { - MockHttpServletRequest request = createRequest(HttpPost.METHOD_NAME); - try { - MockHttpServletResponse response = new MockHttpServletResponse(); - getBandwidthPricesOnPBFTServlet.doPost(request, response); - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } -} diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServletTest.java deleted file mode 100644 index 71d7e7e4b0b..00000000000 --- a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServletTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.tron.core.services.interfaceOnPBFT.http; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.tron.common.utils.client.utils.HttpMethed.createRequest; - -import java.io.UnsupportedEncodingException; -import javax.annotation.Resource; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.tron.common.BaseTest; -import org.tron.common.TestConstants; -import org.tron.core.config.args.Args; -import org.tron.json.JSONObject; - -public class GetEnergyPricesOnPBFTServletTest extends BaseTest { - - @Resource - private GetEnergyPricesOnPBFTServlet getEnergyPricesOnPBFTServlet; - - @BeforeClass - public static void init() { - Args.setParam(new String[]{"-d", dbPath()}, TestConstants.TEST_CONF); - } - - @Test - public void testGet() { - MockHttpServletRequest request = createRequest(HttpGet.METHOD_NAME); - MockHttpServletResponse response = new MockHttpServletResponse(); - getEnergyPricesOnPBFTServlet.doPost(request, response); - try { - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } - - @Test - public void testPost() { - MockHttpServletRequest request = createRequest(HttpPost.METHOD_NAME); - try { - MockHttpServletResponse response = new MockHttpServletResponse(); - getEnergyPricesOnPBFTServlet.doPost(request, response); - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } -} diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServletTest.java deleted file mode 100644 index 890528b72e4..00000000000 --- a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServletTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.tron.common.utils.client.utils.HttpMethed.createRequest; - -import java.io.UnsupportedEncodingException; -import javax.annotation.Resource; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.tron.common.BaseTest; -import org.tron.common.TestConstants; -import org.tron.core.config.args.Args; -import org.tron.json.JSONObject; - -public class GetBandwidthPricesOnSolidityServletTest extends BaseTest { - - @Resource - private GetBandwidthPricesOnSolidityServlet getBandwidthPricesOnSolidityServlet; - - @BeforeClass - public static void init() { - Args.setParam(new String[]{"-d", dbPath()}, TestConstants.TEST_CONF); - } - - @Test - public void testGet() { - MockHttpServletRequest request = createRequest(HttpGet.METHOD_NAME); - MockHttpServletResponse response = new MockHttpServletResponse(); - getBandwidthPricesOnSolidityServlet.doPost(request, response); - try { - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } - - @Test - public void testPost() { - MockHttpServletRequest request = createRequest(HttpPost.METHOD_NAME); - try { - MockHttpServletResponse response = new MockHttpServletResponse(); - getBandwidthPricesOnSolidityServlet.doPost(request, response); - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } -} diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServletTest.java deleted file mode 100644 index b7310d065f3..00000000000 --- a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServletTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.tron.core.services.interfaceOnSolidity.http; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.tron.common.utils.client.utils.HttpMethed.createRequest; - -import java.io.UnsupportedEncodingException; -import javax.annotation.Resource; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.tron.common.BaseTest; -import org.tron.common.TestConstants; -import org.tron.core.config.args.Args; -import org.tron.json.JSONObject; - -public class GetEnergyPricesOnSolidityServletTest extends BaseTest { - - @Resource - private GetEnergyPricesOnSolidityServlet getEnergyPricesOnSolidityServlet; - - @BeforeClass - public static void init() { - Args.setParam(new String[]{"-d", dbPath()}, TestConstants.TEST_CONF); - } - - @Test - public void testGet() { - MockHttpServletRequest request = createRequest(HttpGet.METHOD_NAME); - MockHttpServletResponse response = new MockHttpServletResponse(); - getEnergyPricesOnSolidityServlet.doPost(request, response); - try { - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } - - @Test - public void testPost() { - MockHttpServletRequest request = createRequest(HttpPost.METHOD_NAME); - try { - MockHttpServletResponse response = new MockHttpServletResponse(); - getEnergyPricesOnSolidityServlet.doPost(request, response); - String contentAsString = response.getContentAsString(); - JSONObject result = JSONObject.parseObject(contentAsString); - assertTrue(result.containsKey("prices")); - } catch (UnsupportedEncodingException e) { - fail(e.getMessage()); - } - } -} diff --git a/framework/src/test/java/org/tron/core/vm/OperationRegistryTest.java b/framework/src/test/java/org/tron/core/vm/OperationRegistryTest.java new file mode 100644 index 00000000000..b6568f8a862 --- /dev/null +++ b/framework/src/test/java/org/tron/core/vm/OperationRegistryTest.java @@ -0,0 +1,142 @@ +package org.tron.core.vm; + +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertSame; + +import org.junit.Test; +import org.tron.core.vm.config.VMConfig; + +public class OperationRegistryTest { + + @Test + public void constantAndTransactionExecutionsUseDedicatedTables() { + JumpTable transactionTable = OperationRegistry.prepareAndGetTable(false); + JumpTable constantCallTable = OperationRegistry.prepareAndGetTable(true); + + assertNotSame(transactionTable, constantCallTable); + assertSame(transactionTable, OperationRegistry.getTable(false)); + assertSame(constantCallTable, OperationRegistry.getTable(true)); + } + + @Test + public void transactionExecutionsReuseTable() { + JumpTable first = OperationRegistry.prepareAndGetTable(false); + JumpTable second = OperationRegistry.prepareAndGetTable(false); + + assertSame(first, second); + } + + @Test + public void constantExecutionsReuseTable() { + JumpTable first = OperationRegistry.prepareAndGetTable(true); + JumpTable second = OperationRegistry.prepareAndGetTable(true); + + assertSame(first, second); + } + + @Test + public void constantAdjustmentsDoNotMutateTransactionTable() { + boolean previousHigherLimit = VMConfig.allowHigherLimitForMaxCpuTimeOfOneTx(); + JumpTable transactionTable = OperationRegistry.getTable(false); + JumpTable constantCallTable = OperationRegistry.getTable(true); + try { + VMConfig.initAllowHigherLimitForMaxCpuTimeOfOneTx(0); + OperationRegistry.adjustMemOperations(transactionTable); + OperationRegistry.adjustMemOperations(constantCallTable); + Operation transactionMload = transactionTable.get(Op.MLOAD); + Operation constantMload = constantCallTable.get(Op.MLOAD); + + VMConfig.initAllowHigherLimitForMaxCpuTimeOfOneTx(1); + OperationRegistry.adjustMemOperations(constantCallTable); + + assertSame(transactionMload, transactionTable.get(Op.MLOAD)); + assertNotSame(constantMload, constantCallTable.get(Op.MLOAD)); + } finally { + VMConfig.initAllowHigherLimitForMaxCpuTimeOfOneTx(previousHigherLimit ? 1 : 0); + OperationRegistry.adjustMemOperations(transactionTable); + OperationRegistry.adjustMemOperations(constantCallTable); + } + } + + @Test + public void adjustedOperationsReuseCachedVariants() { + boolean previousHigherLimit = VMConfig.allowHigherLimitForMaxCpuTimeOfOneTx(); + boolean previousEnergyAdjustment = VMConfig.allowEnergyAdjustment(); + boolean previousOsaka = VMConfig.allowTvmOsaka(); + boolean previousSelfdestructRestriction = VMConfig.allowTvmSelfdestructRestriction(); + JumpTable table = OperationRegistry.newTronV15OperationSet(); + + Operation defaultMload = table.get(Op.MLOAD); + Operation defaultMstore = table.get(Op.MSTORE); + Operation defaultMstore8 = table.get(Op.MSTORE8); + Operation defaultVoteWitness = table.get(Op.VOTEWITNESS); + Operation defaultSuicide = table.get(Op.SUICIDE); + + try { + VMConfig.initAllowHigherLimitForMaxCpuTimeOfOneTx(1); + VMConfig.initAllowEnergyAdjustment(1); + VMConfig.initAllowTvmOsaka(0); + VMConfig.initAllowTvmSelfdestructRestriction(0); + adjustOperations(table); + + Operation adjustedMload = table.get(Op.MLOAD); + Operation adjustedMstore = table.get(Op.MSTORE); + Operation adjustedMstore8 = table.get(Op.MSTORE8); + Operation adjustedVoteWitness = table.get(Op.VOTEWITNESS); + Operation adjustedSuicide = table.get(Op.SUICIDE); + + assertNotSame(defaultMload, adjustedMload); + assertNotSame(defaultMstore, adjustedMstore); + assertNotSame(defaultMstore8, adjustedMstore8); + assertNotSame(defaultVoteWitness, adjustedVoteWitness); + assertNotSame(defaultSuicide, adjustedSuicide); + + adjustOperations(table); + assertSame(adjustedMload, table.get(Op.MLOAD)); + assertSame(adjustedMstore, table.get(Op.MSTORE)); + assertSame(adjustedMstore8, table.get(Op.MSTORE8)); + assertSame(adjustedVoteWitness, table.get(Op.VOTEWITNESS)); + assertSame(adjustedSuicide, table.get(Op.SUICIDE)); + + VMConfig.initAllowTvmOsaka(1); + VMConfig.initAllowTvmSelfdestructRestriction(1); + adjustOperations(table); + + Operation osakaVoteWitness = table.get(Op.VOTEWITNESS); + Operation restrictedSuicide = table.get(Op.SUICIDE); + assertNotSame(adjustedVoteWitness, osakaVoteWitness); + assertNotSame(adjustedSuicide, restrictedSuicide); + + adjustOperations(table); + assertSame(adjustedMload, table.get(Op.MLOAD)); + assertSame(adjustedMstore, table.get(Op.MSTORE)); + assertSame(adjustedMstore8, table.get(Op.MSTORE8)); + assertSame(osakaVoteWitness, table.get(Op.VOTEWITNESS)); + assertSame(restrictedSuicide, table.get(Op.SUICIDE)); + + VMConfig.initAllowHigherLimitForMaxCpuTimeOfOneTx(0); + VMConfig.initAllowEnergyAdjustment(0); + VMConfig.initAllowTvmOsaka(0); + VMConfig.initAllowTvmSelfdestructRestriction(0); + adjustOperations(table); + + assertSame(defaultMload, table.get(Op.MLOAD)); + assertSame(defaultMstore, table.get(Op.MSTORE)); + assertSame(defaultMstore8, table.get(Op.MSTORE8)); + assertSame(defaultVoteWitness, table.get(Op.VOTEWITNESS)); + assertSame(defaultSuicide, table.get(Op.SUICIDE)); + } finally { + VMConfig.initAllowHigherLimitForMaxCpuTimeOfOneTx(previousHigherLimit ? 1 : 0); + VMConfig.initAllowEnergyAdjustment(previousEnergyAdjustment ? 1 : 0); + VMConfig.initAllowTvmOsaka(previousOsaka ? 1 : 0); + VMConfig.initAllowTvmSelfdestructRestriction( + previousSelfdestructRestriction ? 1 : 0); + } + } + + private static void adjustOperations(JumpTable table) { + OperationRegistry.adjustMemOperations(table); + OperationRegistry.adjustVoteWitness(table); + OperationRegistry.adjustSelfdestruct(table); + } +} diff --git a/framework/src/test/java/org/tron/core/vm/nativecontract/StakeV2AfterSelfDestructTest.java b/framework/src/test/java/org/tron/core/vm/nativecontract/StakeV2AfterSelfDestructTest.java new file mode 100644 index 00000000000..a3c59019b6d --- /dev/null +++ b/framework/src/test/java/org/tron/core/vm/nativecontract/StakeV2AfterSelfDestructTest.java @@ -0,0 +1,186 @@ +package org.tron.core.vm.nativecontract; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.tron.core.config.Parameter.ChainConstant.TRX_PRECISION; +import static org.tron.core.config.Parameter.ForkBlockVersionEnum.VERSION_4_8_2_2; +import static org.tron.protos.contract.Common.ResourceCode.BANDWIDTH; +import static org.tron.protos.contract.Common.ResourceCode.ENERGY; + +import com.google.protobuf.ByteString; +import org.junit.Assert; +import org.junit.Test; +import org.junit.function.ThrowingRunnable; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.tron.common.utils.DecodeUtil; +import org.tron.common.utils.ForkController; +import org.tron.core.capsule.AccountCapsule; +import org.tron.core.store.DynamicPropertiesStore; +import org.tron.core.vm.nativecontract.param.CancelAllUnfreezeV2Param; +import org.tron.core.vm.nativecontract.param.FreezeBalanceV2Param; +import org.tron.core.vm.nativecontract.param.UnfreezeBalanceV2Param; +import org.tron.core.vm.nativecontract.param.WithdrawExpireUnfreezeParam; +import org.tron.core.vm.program.Program.OutOfTimeException; +import org.tron.core.vm.repository.Repository; +import org.tron.protos.Protocol; +import org.tron.protos.contract.Common.ResourceCode; + +public class StakeV2AfterSelfDestructTest { + + private static final long NOW = 1_000L; + + @Test + public void freezeAfterSelfDestructIsForkGated() throws Exception { + byte[] ownerAddress = address(1); + AccountCapsule owner = account(ownerAddress, 0, 0); + owner.setBalance(TRX_PRECISION); + + Repository repository = mock(Repository.class); + DynamicPropertiesStore dynamicStore = mock(DynamicPropertiesStore.class); + when(repository.getDynamicPropertiesStore()).thenReturn(dynamicStore); + when(repository.getAccount(ownerAddress)).thenReturn(owner); + when(repository.isSelfDestructed(ownerAddress)).thenReturn(true); + + FreezeBalanceV2Param param = new FreezeBalanceV2Param(); + param.setOwnerAddress(ownerAddress); + param.setFrozenBalance(TRX_PRECISION); + param.setResourceType(BANDWIDTH); + FreezeBalanceV2Processor processor = new FreezeBalanceV2Processor(); + + ForkController forkController = mock(ForkController.class); + try (MockedStatic fork = Mockito.mockStatic(ForkController.class)) { + fork.when(ForkController::instance).thenReturn(forkController); + when(forkController.pass(VERSION_4_8_2_2)).thenReturn(false); + processor.validate(param, repository); + + when(forkController.pass(VERSION_4_8_2_2)).thenReturn(true); + assertFreezeV2Timeout(() -> processor.validate(param, repository)); + } + } + + @Test + public void invalidDelegatedBalancesBlockWithdrawAndCancelAfterFork() throws Exception { + byte[] ownerAddress = address(1); + Repository repository = mock(Repository.class); + DynamicPropertiesStore dynamicStore = mock(DynamicPropertiesStore.class); + when(repository.getDynamicPropertiesStore()).thenReturn(dynamicStore); + when(dynamicStore.getLatestBlockHeaderTimestamp()).thenReturn(NOW); + + WithdrawExpireUnfreezeParam withdrawParam = new WithdrawExpireUnfreezeParam(); + withdrawParam.setOwnerAddress(ownerAddress); + WithdrawExpireUnfreezeProcessor withdrawProcessor = + new WithdrawExpireUnfreezeProcessor(); + CancelAllUnfreezeV2Param cancelParam = new CancelAllUnfreezeV2Param(); + cancelParam.setOwnerAddress(ownerAddress); + CancelAllUnfreezeV2Processor cancelProcessor = new CancelAllUnfreezeV2Processor(); + + ForkController forkController = mock(ForkController.class); + try (MockedStatic fork = Mockito.mockStatic(ForkController.class)) { + fork.when(ForkController::instance).thenReturn(forkController); + when(forkController.pass(VERSION_4_8_2_2)).thenReturn(false); + when(repository.getAccount(ownerAddress)).thenReturn(account(ownerAddress, -1, 0)); + withdrawProcessor.validate(withdrawParam, repository); + cancelProcessor.validate(cancelParam, repository); + when(repository.getAccount(ownerAddress)).thenReturn(account(ownerAddress, 0, -1)); + withdrawProcessor.validate(withdrawParam, repository); + cancelProcessor.validate(cancelParam, repository); + + when(forkController.pass(VERSION_4_8_2_2)).thenReturn(true); + when(repository.getAccount(ownerAddress)).thenReturn(account(ownerAddress, -1, 0)); + assertInvalidDelegatedV2Timeout( + () -> withdrawProcessor.validate(withdrawParam, repository)); + assertInvalidDelegatedV2Timeout( + () -> cancelProcessor.validate(cancelParam, repository)); + when(repository.getAccount(ownerAddress)).thenReturn(account(ownerAddress, 0, -1)); + assertInvalidDelegatedV2Timeout( + () -> withdrawProcessor.validate(withdrawParam, repository)); + assertInvalidDelegatedV2Timeout( + () -> cancelProcessor.validate(cancelParam, repository)); + } + } + + @Test + public void invalidDelegatedBalancesBlockUnfreezeAfterFork() throws Exception { + byte[] ownerAddress = address(1); + Repository repository = mock(Repository.class); + DynamicPropertiesStore dynamicStore = mock(DynamicPropertiesStore.class); + when(repository.getDynamicPropertiesStore()).thenReturn(dynamicStore); + when(dynamicStore.getLatestBlockHeaderTimestamp()).thenReturn(NOW); + + UnfreezeBalanceV2Param bandwidthParam = unfreezeParam(ownerAddress, BANDWIDTH); + UnfreezeBalanceV2Param energyParam = unfreezeParam(ownerAddress, ENERGY); + UnfreezeBalanceV2Processor processor = new UnfreezeBalanceV2Processor(); + + ForkController forkController = mock(ForkController.class); + try (MockedStatic fork = Mockito.mockStatic(ForkController.class)) { + fork.when(ForkController::instance).thenReturn(forkController); + when(forkController.pass(VERSION_4_8_2_2)).thenReturn(false); + when(repository.getAccount(ownerAddress)).thenReturn( + accountWithFrozenV2(ownerAddress, -1, 0, BANDWIDTH)); + processor.validate(bandwidthParam, repository); + when(repository.getAccount(ownerAddress)).thenReturn( + accountWithFrozenV2(ownerAddress, 0, -1, ENERGY)); + processor.validate(energyParam, repository); + + when(forkController.pass(VERSION_4_8_2_2)).thenReturn(true); + when(repository.getAccount(ownerAddress)).thenReturn( + accountWithFrozenV2(ownerAddress, -1, 0, BANDWIDTH)); + assertInvalidDelegatedV2Timeout( + () -> processor.validate(bandwidthParam, repository)); + when(repository.getAccount(ownerAddress)).thenReturn( + accountWithFrozenV2(ownerAddress, 0, -1, ENERGY)); + assertInvalidDelegatedV2Timeout(() -> processor.validate(energyParam, repository)); + } + } + + private static AccountCapsule account(byte[] address, long bandwidth, long energy) { + Protocol.Account.AccountResource resource = Protocol.Account.AccountResource.newBuilder() + .setDelegatedFrozenV2BalanceForEnergy(energy) + .build(); + Protocol.Account account = Protocol.Account.newBuilder() + .setAddress(ByteString.copyFrom(address)) + .setDelegatedFrozenV2BalanceForBandwidth(bandwidth) + .setAccountResource(resource) + .build(); + return new AccountCapsule(account); + } + + private static AccountCapsule accountWithFrozenV2( + byte[] address, long bandwidth, long energy, ResourceCode resourceCode) { + AccountCapsule accountCapsule = account(address, bandwidth, energy); + if (resourceCode == BANDWIDTH) { + accountCapsule.addFrozenBalanceForBandwidthV2(TRX_PRECISION); + } else { + accountCapsule.addFrozenBalanceForEnergyV2(TRX_PRECISION); + } + return accountCapsule; + } + + private static UnfreezeBalanceV2Param unfreezeParam( + byte[] ownerAddress, ResourceCode resourceCode) { + UnfreezeBalanceV2Param param = new UnfreezeBalanceV2Param(); + param.setOwnerAddress(ownerAddress); + param.setResourceType(resourceCode); + param.setUnfreezeBalance(TRX_PRECISION); + return param; + } + + private static byte[] address(int suffix) { + byte[] address = new byte[21]; + address[0] = DecodeUtil.addressPreFixByte; + address[address.length - 1] = (byte) suffix; + return address; + } + + private static void assertFreezeV2Timeout(ThrowingRunnable runnable) { + OutOfTimeException exception = Assert.assertThrows(OutOfTimeException.class, runnable); + Assert.assertEquals( + "CPU timeout for FreezeBalanceV2 after SELFDESTRUCT", exception.getMessage()); + } + + private static void assertInvalidDelegatedV2Timeout(ThrowingRunnable runnable) { + OutOfTimeException exception = Assert.assertThrows(OutOfTimeException.class, runnable); + Assert.assertEquals("CPU timeout for invalid delegated V2 balance", exception.getMessage()); + } +} diff --git a/framework/src/test/java/org/tron/core/vm/repository/RepositoryImplSelfDestructTest.java b/framework/src/test/java/org/tron/core/vm/repository/RepositoryImplSelfDestructTest.java new file mode 100644 index 00000000000..10131a06595 --- /dev/null +++ b/framework/src/test/java/org/tron/core/vm/repository/RepositoryImplSelfDestructTest.java @@ -0,0 +1,36 @@ +package org.tron.core.vm.repository; + +import org.junit.Assert; +import org.junit.Test; + +public class RepositoryImplSelfDestructTest { + + private static final byte[] ADDRESS = new byte[] {1}; + + @Test + public void committedSelfDestructMarkerIsVisibleToParentAndSibling() { + Repository root = RepositoryImpl.createRoot(null); + Repository child = root.newRepositoryChild(); + + child.markSelfDestruct(ADDRESS); + Assert.assertTrue(child.isSelfDestructed(ADDRESS)); + Assert.assertFalse(root.isSelfDestructed(ADDRESS)); + + child.commit(); + Assert.assertTrue(root.isSelfDestructed(ADDRESS)); + Assert.assertTrue(root.newRepositoryChild().isSelfDestructed(ADDRESS)); + } + + @Test + public void nestedMarkerDoesNotLeakWhenOuterCallIsReverted() { + Repository root = RepositoryImpl.createRoot(null); + Repository outerCall = root.newRepositoryChild(); + Repository nestedCall = outerCall.newRepositoryChild(); + + nestedCall.markSelfDestruct(ADDRESS); + nestedCall.commit(); + + Assert.assertTrue(outerCall.isSelfDestructed(ADDRESS)); + Assert.assertFalse(root.isSelfDestructed(ADDRESS)); + } +} diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 6a3e641d5d6..2e30496116f 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -49,25 +49,25 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + @@ -189,9 +189,9 @@ - - - + + + @@ -199,9 +199,9 @@ - - - + + + @@ -219,15 +219,15 @@ - - - + + + - - + + - - + + @@ -235,15 +235,15 @@ - - - + + + - - + + - - + + @@ -251,15 +251,15 @@ - - - + + + - - + + - - + + @@ -1171,76 +1171,76 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -1251,18 +1251,18 @@ - - - + + + - - + + - - + + - - + + @@ -1528,14 +1528,6 @@ - - - - - - - - @@ -1684,11 +1676,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1710,36 +1728,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -1792,6 +1783,11 @@ + + + + + @@ -2408,6 +2404,14 @@ + + + + + + + + @@ -2424,6 +2428,14 @@ + + + + + + + + @@ -2448,6 +2460,11 @@ + + + + + @@ -2612,20 +2629,20 @@ - - - + + + - - + + - - - + + + - - + + @@ -2647,16 +2664,26 @@ - - - - - - + + + + + + + + + + + + + + + + diff --git a/plugins/src/main/resources/logback.xml b/plugins/src/main/resources/logback.xml index fa557f1a412..3f5eff3a1e0 100644 --- a/plugins/src/main/resources/logback.xml +++ b/plugins/src/main/resources/logback.xml @@ -3,16 +3,7 @@ - - - - - %d{HH:mm:ss.SSS} %-5level [%t] [%c{1}]\(%F:%L\) %m%n - - - INFO - - + diff --git a/protocol/src/main/protos/core/contract/account_contract.proto b/protocol/src/main/protos/core/contract/account_contract.proto index d3180048f43..05e7226329c 100644 --- a/protocol/src/main/protos/core/contract/account_contract.proto +++ b/protocol/src/main/protos/core/contract/account_contract.proto @@ -29,7 +29,7 @@ message AccountCreateContract { AccountType type = 3; } -// Update account name. Account name is not unique now. +// Update account name. ALLOW_UPDATE_ACCOUNT_NAME is not enabled on Mainnet, so account names are currently unique. message AccountUpdateContract { bytes account_name = 1; bytes owner_address = 2; @@ -47,4 +47,3 @@ message AccountPermissionUpdateContract { Permission witness = 3; //Can be empty repeated Permission actives = 4; //Empty is invalidate } -