3131import org .tron .gasfree .request .GasFreeSubmitRequest ;
3232import org .web3j .abi .FunctionEncoder ;
3333import org .web3j .abi .datatypes .Address ;
34- import org .web3j .abi .datatypes .DynamicBytes ;
3534import org .web3j .abi .datatypes .Function ;
3635import org .web3j .abi .datatypes .Type ;
3736import org .web3j .abi .datatypes .generated .Bytes32 ;
4342import org .web3j .utils .Numeric ;
4443
4544public class GasFreeApi {
46- public static final String CREATION_CODE_STR = "0x60a06040526040516105ac3803806105ac83398101604081905261002291610382565b61002c828261003e565b506001600160a01b0316608052610471565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e4919061043d565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d2919061043d565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f80846001600160a01b0316846040516102259190610456565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80515f906001600160a81b038116811461033d575f80fd5b6001600160a01b031692915050565b634e487b7160e01b5f52604160045260245ffd5b5f5b8381101561037a578181015183820152602001610362565b50505f910152565b5f8060408385031215610393575f80fd5b61039c83610325565b60208401519092506001600160401b03808211156103b8575f80fd5b818501915085601f8301126103cb575f80fd5b8151818111156103dd576103dd61034c565b604051601f8201601f19908116603f011681019083821181831017156104055761040561034c565b8160405282815288602084870101111561041d575f80fd5b61042e836020830160208801610360565b80955050505050509250929050565b5f6020828403121561044d575f80fd5b6102f582610325565b5f8251610467818460208701610360565b9190910192915050565b6080516101246104885f395f601d01526101245ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f80375f80365f845af43d5f803e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f80fd5b81516001600160a81b038116811460de575f80fd5b6001600160a01b0316939250505056fea26474726f6e582212201a19cd1340c744d4f2dd20c2563b0a588f92859265dff6c1fd5750b22eef473f64736f6c63430008140033" ;
4745 public static final String DOMAIN_TYPE_STRING = "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ;
4846 public static final String PERMIT_TRANSFER_TYPE_STRING = "PermitTransfer(address token,address serviceProvider,address user,address receiver,uint256 value,uint256 maxFee,uint256 deadline,uint256 version,uint256 nonce)" ;
4947 private static final String API_PATH_TOKEN_ALL = "/api/v1/config/token/all" ;
@@ -106,16 +104,6 @@ public static byte[] concat(byte[]... arrays) {
106104 return result ;
107105 }
108106
109- public static byte [] bytecodeHash (String user , String beacon ) {
110- byte [] creationCode = Numeric .hexStringToByteArray (CREATION_CODE_STR );
111- String userHex = Numeric .toHexString (tronBase58ToBytes32 (user ));
112- String beaconHex = Numeric .toHexString (tronBase58ToBytes32 (beacon ));
113- byte [] encodedCall = abiEncodeCall ("initialize" , new Address (userHex ));
114- byte [] encodedOuter = abiEncode (new Address (beaconHex ), new DynamicBytes (encodedCall ));
115- byte [] packed = abiEncodePacked (creationCode , encodedOuter );
116- return Hash .sha3 (packed );
117- }
118-
119107 private static String buildApiPath (NetType netType , String apiPath ) {
120108 String prefix = netType .getGasFree ().getApiPrefix ();
121109 return prefix + apiPath ;
@@ -274,29 +262,39 @@ public static byte[] getMessage(NetType netType, GasFreeSubmitRequest gasFreeSub
274262 JSONObject root = JSON .parseObject (resp );
275263 JSONObject data = root .getJSONObject ("data" );
276264 JSONArray tokens = data .getJSONArray ("tokens" );
277- String tokenAddress = EMPTY ;
278- long maxFee = 0 ;
279- long activateFee = 0 ;
280- long transferFee = 0 ;
281- if (tokens != null && !tokens .isEmpty ()) {
282- JSONObject token = tokens .getJSONObject (0 );
283- tokenAddress = token .getString ("tokenAddress" );
284- activateFee = token .getLongValue ("activateFee" );
285- transferFee = token .getLongValue ("transferFee" );
286- maxFee = activateFee + transferFee ;
265+ if (tokens == null || tokens .isEmpty ()) {
266+ System .out .println ("Failed to get tokens information." );
267+ return new byte [0 ];
287268 }
269+ String tokenAddress ;
270+ long maxFee ;
271+ long activateFee ;
272+ long transferFee ;
273+ JSONObject tokensJSONObject = tokens .getJSONObject (0 );
274+ tokenAddress = tokensJSONObject .getString ("tokenAddress" );
275+ activateFee = tokensJSONObject .getLongValue ("activateFee" );
276+ transferFee = tokensJSONObject .getLongValue ("transferFee" );
277+ maxFee = activateFee + transferFee ;
288278 gasFreeSubmitRequest .setToken (tokenAddress );
289279 gasFreeSubmitRequest .setMaxFee (maxFee );
290280
291281 String providerAll = providerAll (netType );
292282 JSONObject root1 = JSON .parseObject (providerAll );
293283 JSONObject data1 = root1 .getJSONObject ("data" );
294284 JSONArray providers = data1 .getJSONArray ("providers" );
295- String providerAddress = EMPTY ;
296- if (providers != null && !providers .isEmpty ()) {
297- JSONObject provider = providers .getJSONObject (0 );
298- providerAddress = provider .getString ("address" );
285+ if (providers == null || providers .isEmpty ()) {
286+ System .out .println ("Failed to get providers information." );
287+ return new byte [0 ];
288+ }
289+ String providerAddress ;
290+ long defaultDeadlineDuration ;
291+ JSONObject provider = providers .getJSONObject (0 );
292+ providerAddress = provider .getString ("address" );
293+ JSONObject config = provider .getJSONObject ("config" );
294+ if (config == null ) {
295+ return new byte [0 ];
299296 }
297+ defaultDeadlineDuration = config .getLongValue ("defaultDeadlineDuration" );
300298 gasFreeSubmitRequest .setServiceProvider (providerAddress );
301299
302300 String addressResp = address (netType , gasFreeSubmitRequest .getUser ());
@@ -307,7 +305,7 @@ public static byte[] getMessage(NetType netType, GasFreeSubmitRequest gasFreeSub
307305 System .out .println ("Activate Fee: " + (active ? 0 : activateFee ));
308306 System .out .println ("Transfer Fee: " + transferFee );
309307 gasFreeSubmitRequest .setNonce (nonce );
310- gasFreeSubmitRequest .setDeadline ((System .currentTimeMillis () / 1000 ) + 300 );
308+ gasFreeSubmitRequest .setDeadline ((System .currentTimeMillis () / 1000 ) + defaultDeadlineDuration );
311309
312310 Address token = new Address (Numeric .toHexString (tronBase58ToBytes32 (gasFreeSubmitRequest .getToken ())));
313311 Address serviceProvider = new Address (Numeric .toHexString (tronBase58ToBytes32 (gasFreeSubmitRequest .getServiceProvider ())));
0 commit comments