Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

# Build
```
git clone https://github.com/PlatONnetwork/client-sdk-java.git
git clone https://github.com/AlayaNetwork/client-sdk-java.git
cd client-sdk-java/
./gradlew clean jar //Generate jar package
./gradlew clean distZip //Generate code generation skeleton tool
Expand All @@ -20,14 +20,14 @@
<dependency>
<groupId>com.alaya.sdk</groupId>
<artifactId>core</artifactId>
<version>0.16.0.0</version>
<version>0.16.1.0</version>
</dependency>
```

or

```
compile "com.alaya.sdk:core:0.16.0.0"
compile "com.alaya.sdk:core:0.16.1.0"
```

* use in project
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,13 @@ private void generate() throws IOException, ClassNotFoundException {
} else {
addresses = Collections.EMPTY_MAP;
}
String bytecode = c.getBytecode();
if(!Strings.isBlank(bytecode) && bytecode.startsWith("0x")){
bytecode = bytecode.substring(2);
}
new SolidityFunctionWrapper(useJavaNativeTypes)
.generateJavaFiles(contractName,
c.getBytecode(),
bytecode,
c.getAbi(),
destinationDirLocation.toString(),
basePackageName,
Expand Down
31 changes: 31 additions & 0 deletions core/src/main/java/com/platon/contracts/ppos/BaseContract.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,13 @@
import com.platon.tx.ReadonlyTransactionManager;
import com.platon.tx.TransactionManager;
import com.platon.tx.exceptions.ContractCallException;
import com.platon.tx.exceptions.PlatonCallException;
import com.platon.tx.exceptions.PlatonCallTimeoutException;
import com.platon.tx.gas.ContractGasProvider;
import com.platon.tx.gas.GasProvider;
import com.platon.utils.JSONUtil;
import com.platon.utils.Numeric;
import com.platon.utils.Strings;
import org.bouncycastle.util.encoders.Hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -87,6 +90,20 @@ private <T> CallResponse<T> executeCallObjectValueReturn(Function function, Clas
DefaultBlockParameterName.LATEST)
.send();

//判断底层返回的错误信息是否包含超时信息
if(ethCall.hasError()){
Response.Error error = ethCall.getError();
String message = error.getMessage();
String lowMessage = !Strings.isBlank(message)? message.toLowerCase() : null;
//包含timeout则抛超时异常,其他错误则直接抛出runtime异常
if(!Strings.isBlank(lowMessage)
&& lowMessage.contains("timeout")){
throw new PlatonCallTimeoutException(error.getCode(),error.getMessage(),ethCall);
} else {
throw new PlatonCallException(error.getCode(),error.getMessage(),ethCall);
}
}

String result = Numeric.cleanHexPrefix(ethCall.getValue());
if(result==null || "".equals(result)){
throw new ContractCallException("Empty value (0x) returned from contract");
Expand Down Expand Up @@ -131,6 +148,20 @@ private <T> CallResponse<List<T>> executeCallListValueReturn(Function function,
DefaultBlockParameterName.LATEST)
.send();

//判断底层返回的错误信息是否包含超时信息
if(ethCall.hasError()){
Response.Error error = ethCall.getError();
String message = error.getMessage();
String lowMessage = !Strings.isBlank(message)? message.toLowerCase() : null;
//包含timeout则抛超时异常,其他错误则直接抛出runtime异常
if(!Strings.isBlank(lowMessage)
&& lowMessage.contains("timeout")){
throw new PlatonCallTimeoutException(error.getCode(),error.getMessage(),ethCall);
} else {
throw new PlatonCallException(error.getCode(),error.getMessage(),ethCall);
}
}

String result = Numeric.cleanHexPrefix(ethCall.getValue());
if(result==null || "".equals(result)){
throw new ContractCallException("Empty value (0x) returned from contract");
Expand Down
48 changes: 33 additions & 15 deletions core/src/main/java/com/platon/protocol/admin/Admin.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,60 @@

import com.platon.protocol.Web3j;
import com.platon.protocol.Web3jService;
import com.platon.protocol.admin.methods.response.NewAccountIdentifier;
import com.platon.protocol.admin.methods.response.PersonalListAccounts;
import com.platon.protocol.admin.methods.response.PersonalUnlockAccount;
import com.platon.protocol.admin.methods.response.*;
import com.platon.protocol.core.Request;
import com.platon.protocol.core.methods.response.PlatonSignTransaction;
import com.platon.protocol.core.methods.request.Transaction;
import com.platon.protocol.core.methods.response.PlatonSendTransaction;
import com.platon.protocol.core.methods.response.VoidResponse;

import java.math.BigInteger;
import java.util.concurrent.ScheduledExecutorService;

/**
* JSON-RPC Request object building factory for common Parity and Geth.
* JSON-RPC Request object building factory for common Parity and Geth.
*/
public interface Admin extends Web3j {

static Admin build(Web3jService web3jService) {
return new JsonRpc2_0Admin(web3jService);
}

static Admin build(
Web3jService web3jService, long pollingInterval,
ScheduledExecutorService scheduledExecutorService) {
return new JsonRpc2_0Admin(web3jService, pollingInterval, scheduledExecutorService);
}

public Request<?, PersonalListAccounts> personalListAccounts();

public Request<?, NewAccountIdentifier> personalNewAccount(String password);

public Request<?, PersonalUnlockAccount> personalUnlockAccount(
Request<?, PersonalImportRawKey> personalImportRawKey(String keydata, String password);

Request<?, BooleanResponse> personalLockAccount(String accountId);

Request<?, PersonalSign> personalSign(String message, String accountId, String password);

Request<?, PersonalSign> personalSignAndSendTransaction(Transaction transaction, String password);

Request<?, PlatonSignTransaction> personalSignTransaction(Transaction transaction, String password);

Request<?, PersonalEcRecover> personalEcRecover(String message, String signiture);

Request<?, PersonalListWallets> personalListWallets();

Request<?, PersonalListAccounts> personalListAccounts();

Request<?, NewAccountIdentifier> personalNewAccount(String password);

Request<?, PersonalUnlockAccount> personalUnlockAccount(
String address, String passphrase, BigInteger duration);
public Request<?, PersonalUnlockAccount> personalUnlockAccount(

Request<?, PersonalUnlockAccount> personalUnlockAccount(
String address, String passphrase);

public Request<?, PlatonSendTransaction> personalSendTransaction(

Request<?, VoidResponse> personalOpenWallet(String url, String passphrase);

Request<?, PlatonSendTransaction> personalSendTransaction(
Transaction transaction, String password);

}
Request<?, TxPoolContent> txPoolContent();

}
108 changes: 96 additions & 12 deletions core/src/main/java/com/platon/protocol/admin/JsonRpc2_0Admin.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.platon.protocol.admin;

import com.platon.protocol.Web3jService;
import com.platon.protocol.admin.methods.response.NewAccountIdentifier;
import com.platon.protocol.admin.methods.response.PersonalListAccounts;
import com.platon.protocol.admin.methods.response.PersonalUnlockAccount;
import com.platon.protocol.admin.methods.response.*;
import com.platon.protocol.core.JsonRpc2_0Web3j;
import com.platon.protocol.core.Request;
import com.platon.protocol.core.methods.response.PlatonSignTransaction;
import com.platon.protocol.core.methods.request.Transaction;
import com.platon.protocol.core.methods.response.PlatonSendTransaction;
import com.platon.protocol.core.methods.response.VoidResponse;

import java.math.BigInteger;
import java.util.ArrayList;
Expand All @@ -24,12 +24,78 @@ public class JsonRpc2_0Admin extends JsonRpc2_0Web3j implements Admin {
public JsonRpc2_0Admin(Web3jService web3jService) {
super(web3jService);
}

public JsonRpc2_0Admin(Web3jService web3jService, long pollingInterval,
ScheduledExecutorService scheduledExecutorService) {
ScheduledExecutorService scheduledExecutorService) {
super(web3jService, pollingInterval, scheduledExecutorService);
}

@Override
public Request<?, PersonalImportRawKey> personalImportRawKey(String keydata, String password) {
return new Request<>(
"personal_importRawKey",
Arrays.asList(keydata, password),
web3jService,
PersonalImportRawKey.class);
}

@Override
public Request<?, BooleanResponse> personalLockAccount(String accountId) {
return new Request<>(
"personal_lockAccount",
Arrays.asList(accountId),
web3jService,
BooleanResponse.class);
}

@Override
public Request<?, PersonalSign> personalSign(
String message, String accountId, String password) {
return new Request<>(
"personal_sign",
Arrays.asList(message, accountId, password),
web3jService,
PersonalSign.class);
}

@Override
public Request<?, PersonalSign> personalSignAndSendTransaction(
Transaction transaction, String password) {
return new Request<>(
"personal_signAndSendTransaction",
Arrays.asList(transaction, password),
web3jService,
PersonalSign.class);
}

@Override
public Request<?, PlatonSignTransaction> personalSignTransaction(Transaction transaction, String password) {
return new Request<>(
"personal_signTransaction",
Arrays.asList(transaction, password),
web3jService,
PlatonSignTransaction.class);
}

@Override
public Request<?, PersonalEcRecover> personalEcRecover(
String hexMessage, String signedMessage) {
return new Request<>(
"personal_ecRecover",
Arrays.asList(hexMessage, signedMessage),
web3jService,
PersonalEcRecover.class);
}

@Override
public Request<?, PersonalListWallets> personalListWallets() {
return new Request<>(
"personal_listWallets",
Collections.<String>emptyList(),
web3jService,
PersonalListWallets.class);
}

@Override
public Request<?, PersonalListAccounts> personalListAccounts() {
return new Request<>(
Expand All @@ -46,7 +112,7 @@ public Request<?, NewAccountIdentifier> personalNewAccount(String password) {
Arrays.asList(password),
web3jService,
NewAccountIdentifier.class);
}
}

@Override
public Request<?, PersonalUnlockAccount> personalUnlockAccount(
Expand All @@ -55,7 +121,7 @@ public Request<?, PersonalUnlockAccount> personalUnlockAccount(
List<Object> attributes = new ArrayList<>(3);
attributes.add(accountId);
attributes.add(password);

if (duration != null) {
// Parity has a bug where it won't support a duration
// See https://github.com/ethcore/parity/issues/1215
Expand All @@ -64,21 +130,30 @@ public Request<?, PersonalUnlockAccount> personalUnlockAccount(
// we still need to include the null value, otherwise Parity rejects request
attributes.add(null);
}

return new Request<>(
"personal_unlockAccount",
attributes,
web3jService,
PersonalUnlockAccount.class);
}

@Override
public Request<?, PersonalUnlockAccount> personalUnlockAccount(
String accountId, String password) {

return personalUnlockAccount(accountId, password, null);
}


@Override
public Request<?, VoidResponse> personalOpenWallet(String url, String passphrase) {
return new Request<>(
"personal_openWallet",
Arrays.asList(url, passphrase),
web3jService,
VoidResponse.class);
}

@Override
public Request<?, PlatonSendTransaction> personalSendTransaction(
Transaction transaction, String passphrase) {
Expand All @@ -88,5 +163,14 @@ public Request<?, PlatonSendTransaction> personalSendTransaction(
web3jService,
PlatonSendTransaction.class);
}


@Override
public Request<?, TxPoolContent> txPoolContent() {
return new Request<>(
"txpool_content",
Collections.<String>emptyList(),
web3jService,
TxPoolContent.class);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.platon.protocol.admin.methods.response;


import com.platon.protocol.core.Response;

/** personal_ecRecover. */
public class PersonalEcRecover extends Response<String> {
public String getRecoverAccountId() {
return getResult();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.platon.protocol.admin.methods.response;


import com.platon.protocol.core.Response;

/** personal_importRawKey. */
public class PersonalImportRawKey extends Response<String> {
public String getAccountId() {
return getResult();
}
}
Loading