2222import org .web3j .tx .PlatOnContract ;
2323import org .web3j .tx .TransactionManager ;
2424import org .web3j .tx .gas .ContractGasProvider ;
25+ import org .web3j .utils .*;
2526import org .web3j .utils .Collection ;
26- import org .web3j .utils .Strings ;
27- import org .web3j .utils .Version ;
2827import rx .functions .Func1 ;
2928
3029import javax .lang .model .element .Modifier ;
@@ -75,14 +74,16 @@ public class SophiaFunctionWrapper extends Generator {
7574 private static final String regex = "(\\ w+)(?:\\ [(.*?)\\ ])(?:\\ [(.*?)\\ ])?" ;
7675 private static final Pattern pattern = Pattern .compile (regex );
7776 private final GenerationReporter reporter ;
77+ private final TXTypeEnum txType ;
7878
79- public SophiaFunctionWrapper (boolean useNativeJavaTypes ) {
80- this (useNativeJavaTypes , new LogGenerationReporter (LOGGER ));
79+ public SophiaFunctionWrapper (boolean useNativeJavaTypes , TXTypeEnum txType ) {
80+ this (useNativeJavaTypes , new LogGenerationReporter (LOGGER ), txType );
8181 }
8282
83- SophiaFunctionWrapper (boolean useNativeJavaTypes , GenerationReporter reporter ) {
83+ SophiaFunctionWrapper (boolean useNativeJavaTypes , GenerationReporter reporter , TXTypeEnum txType ) {
8484 this .useNativeJavaTypes = useNativeJavaTypes ;
8585 this .reporter = reporter ;
86+ this .txType = txType ;
8687 }
8788
8889 @ SuppressWarnings ("unchecked" )
@@ -128,12 +129,16 @@ void generateJavaFiles(
128129 classBuilder .addMethod (buildLoad (className , TransactionManager .class ,
129130 TRANSACTION_MANAGER , true ));
130131
132+ addAddressesSupport (classBuilder , addresses );
133+
131134 // 添加获取合约部署数据的方法
132135 classBuilder .addMethod (buildGetDeployData ());
133136 // 添加估算合约部署Gas的方法
134137 classBuilder .addMethod (buildGetDeployGasLimit ());
135-
136- addAddressesSupport (classBuilder , addresses );
138+ // 添加自定义交易类型方法
139+ classBuilder .addMethod (buildCustomTransactionType (txType ));
140+ // 添加获取交易类型的方法实现
141+ classBuilder .addMethod (buildGetTransactionType ());
137142
138143 write (basePackageName , classBuilder .build (), destinationDir );
139144 }
@@ -506,7 +511,7 @@ private static MethodSpec buildGetInvokeData(String functionName) {
506511 .addParameter (Function .class ,functionName )
507512 .returns (String .class );
508513
509- toReturn .addStatement ("return getInvokeData ($L)" ,functionName );
514+ toReturn .addStatement ("return $T.invokeEncode ($L,getTransactionType($L))" , PlatOnUtil . class , functionName ,functionName );
510515 return toReturn .build ();
511516 }
512517
@@ -520,7 +525,7 @@ private static MethodSpec buildGetDeployData() {
520525 .addParameter (String .class ,CONTRACT_BINARY )
521526 .returns (String .class );
522527
523- toReturn .addStatement ("return getDeployData ($L, $L)" ,CONTRACT_BINARY ,ABI );
528+ toReturn .addStatement ("return $T.deployEncode ($L, $L)" , PlatOnUtil . class ,CONTRACT_BINARY ,ABI );
524529 return toReturn .build ();
525530 }
526531
@@ -537,7 +542,33 @@ private static MethodSpec buildGetDeployGasLimit() {
537542 .addParameter (String .class ,CONTRACT_BINARY )
538543 .returns (BigInteger .class )
539544 .addException (IOException .class );
540- toReturn .addStatement ("return getDeployGasLimit($L, $L, $L, $L, $L)" ,WEB3J ,ESTIMATE_GAS_FROM ,ESTIMATE_GAS_TO ,CONTRACT_BINARY ,ABI );
545+ toReturn .addStatement ("return $T.estimateGasLimit($L, $L, $L, getDeployData($L))" ,PlatOnUtil .class ,WEB3J ,ESTIMATE_GAS_FROM ,ESTIMATE_GAS_TO ,CONTRACT_BINARY );
546+ return toReturn .build ();
547+ }
548+
549+ /**
550+ * 构建获取交易类型的方法
551+ * @return
552+ */
553+ private static MethodSpec buildGetTransactionType () {
554+ MethodSpec .Builder toReturn = MethodSpec .methodBuilder ("getTransactionType" )
555+ .addModifiers (Modifier .PROTECTED )
556+ .addParameter (Function .class ,"function" )
557+ .addStatement ("return customTransactionType(function)" )
558+ .returns (long .class );
559+ return toReturn .build ();
560+ }
561+
562+ /**
563+ * 构建获取自定义交易类型的方法
564+ * @return
565+ */
566+ private static MethodSpec buildCustomTransactionType (TXTypeEnum txType ) {
567+ MethodSpec .Builder toReturn = MethodSpec .methodBuilder ("customTransactionType" )
568+ .returns (long .class );
569+ toReturn .addModifiers (Modifier .PRIVATE , Modifier .STATIC )
570+ .addParameter (Function .class ,"function" );
571+ toReturn .addStatement ("return $T.$L.type" , TXTypeEnum .class ,txType .name ());
541572 return toReturn .build ();
542573 }
543574
@@ -894,8 +925,7 @@ private MethodSpec buildTransactionFunctionData(AbiDefinition functionDefinition
894925
895926 String functionName = functionDefinition .getName ()+"Data" ;
896927 MethodSpec .Builder methodBuilder = MethodSpec .methodBuilder (functionName )
897- .addModifiers (Modifier .STATIC )
898- .addModifiers (Modifier .PUBLIC );
928+ .addModifiers (Modifier .PUBLIC ,Modifier .STATIC );
899929 String inputParams = addParameters (methodBuilder , functionDefinition .getInputs ());
900930
901931 if (!functionDefinition .isConstant ()) {
@@ -906,7 +936,7 @@ private MethodSpec buildTransactionFunctionData(AbiDefinition functionDefinition
906936 Function .class , Function .class , funcNameToConst (functionName ),
907937 Arrays .class , Type .class , inputParams , Collections .class ,
908938 TypeReference .class );
909- methodBuilder .addStatement ("return getInvokeData (function)" );
939+ methodBuilder .addStatement ("return $T.invokeEncode (function,customTransactionType(function))" , PlatOnUtil . class );
910940 return methodBuilder .build ();
911941 }
912942 return null ;
@@ -925,8 +955,7 @@ private MethodSpec buildTransactionFunctionGasLimit(AbiDefinition functionDefini
925955 if (!functionDefinition .isConstant ()) {
926956 String functionName = functionDefinition .getName ()+"GasLimit" ;
927957 MethodSpec .Builder methodBuilder = MethodSpec .methodBuilder (functionName )
928- .addModifiers (Modifier .STATIC )
929- .addModifiers (Modifier .PUBLIC )
958+ .addModifiers (Modifier .PUBLIC ,Modifier .STATIC )
930959 .addParameter (Web3j .class ,WEB3J )
931960 .addParameter (String .class ,ESTIMATE_GAS_FROM )
932961 .addParameter (String .class ,ESTIMATE_GAS_TO )
@@ -935,7 +964,7 @@ private MethodSpec buildTransactionFunctionGasLimit(AbiDefinition functionDefini
935964
936965 methodBuilder .returns (BigInteger .class );
937966 methodBuilder .addStatement ("String ethEstimateGasData = $N($L)" ,functionDefinition .getName ()+"Data" ,getParameterNames (functionDefinition .getInputs ()));
938- methodBuilder .addStatement ("return estimateGasLimit($L,$L,$L,ethEstimateGasData)" , WEB3J ,ESTIMATE_GAS_FROM ,ESTIMATE_GAS_TO );
967+ methodBuilder .addStatement ("return $T. estimateGasLimit($L,$L,$L,ethEstimateGasData)" ,PlatOnUtil . class , WEB3J ,ESTIMATE_GAS_FROM ,ESTIMATE_GAS_TO );
939968 return methodBuilder .build ();
940969 }
941970 return null ;
0 commit comments