Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
380ecb4
add functions of load key from input stream
Oct 9, 2020
d396666
use groupInfo when updateBlockNotify only if it's not null (#152)
cyjseagull Oct 12, 2020
4329faa
Merge remote-tracking branch 'FISCO-BCOS/master' into dev-new
cyjseagull Oct 12, 2020
9b07b59
Merge pull request #160 from cyjseagull/dev-new
cyjseagull Oct 12, 2020
91726ee
modify abi encode
Oct 9, 2020
462e0a9
Merge pull request #162 from chaychen2005/dev
MaggieNgWu Oct 14, 2020
338c24e
add environment for amop demo
Oct 14, 2020
558c737
Merge pull request #163 from MaggieNgWu/dev
MaggieNgWu Oct 19, 2020
13880d0
support single send & rename transactionProcessor
dalaocu Oct 20, 2020
f7d58ad
Merge pull request #169 from dalaocu/dev
MaggieNgWu Oct 21, 2020
274163e
define amop response
Oct 21, 2020
a2f977a
fix bug of event decode (#173)
dalaocu Oct 22, 2020
e26d0b4
Merge branch 'dev' into dev
MaggieNgWu Oct 22, 2020
576f713
Merge pull request #172 from MaggieNgWu/dev
MaggieNgWu Oct 22, 2020
b1bb111
remove redundant print
Oct 27, 2020
ed89a4b
Merge pull request #175 from MaggieNgWu/dev
MaggieNgWu Oct 29, 2020
a058a2a
fix bug of event parse (#178)
dalaocu Oct 29, 2020
2eda63a
fix account password property && add google java format
cyjseagull Oct 20, 2020
ff45cc5
upgrade netty version
cyjseagull Oct 29, 2020
14f9298
Merge pull request #180 from cyjseagull/release-2.6.1
MaggieNgWu Oct 29, 2020
fb738ba
use key mimi tool kit 1.0.2
Oct 29, 2020
616c61d
Merge pull request #181 from MaggieNgWu/dev
MaggieNgWu Oct 29, 2020
8a0dfa3
Merge remote-tracking branch 'upstream/master' into dev
Oct 29, 2020
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
2 changes: 1 addition & 1 deletion .ci/ci_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ LOG_INFO() {
check_basic()
{
# check code format
bash gradlew verifyGoogleJavaFormat
# bash gradlew verifyGoogleJavaFormat
# build
bash gradlew build --info
}
Expand Down
35 changes: 16 additions & 19 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ ext {
commonsLang3Version = "3.1"
javapoetVersion = "1.7.0"
picocliVersion = "3.6.0"
nettyVersion = "4.1.50.Final"
nettySMSSLContextVersion = "1.1.0"
nettyVersion = "4.1.53.Final"
nettySMSSLContextVersion = "1.2.0"
toml4jVersion = "0.7.2"
bcprovJDK15onVersion = "1.60"
keyMiniToolkit = "1.0.0"
keyMiniToolkit = "1.0.2"

solcJVersion = "0.4.25.1"
//solcJVersion = "0.5.2.0"
Expand All @@ -38,7 +38,7 @@ ext {
// integrationTest.mustRunAfter test
allprojects {
group = 'org.fisco-bcos.java-sdk'
version = '2.6.1-rc1'
version = '2.6.1-SNAPSHOT'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply plugin: 'idea'
Expand All @@ -61,7 +61,7 @@ allprojects {

// In this section you declare where to find the dependencies of your project
repositories {
jcenter()
mavenCentral()
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
Expand Down Expand Up @@ -147,6 +147,10 @@ sourceSets {
}
}
integrationTest {
copy {
from file('src/test/resources/amop/')
into 'conf/amop'
}
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
Expand All @@ -156,6 +160,13 @@ sourceSets {
resources.srcDir file('src/integration-test/resources')
}
}

googleJavaFormat {
options style: 'AOSP'
source = sourceSets*.allJava
include '**/*.java'
}

configurations {
integrationTestCompile.extendsFrom testCompile
integrationTestRuntime.extendsFrom testRuntime
Expand All @@ -182,16 +193,6 @@ dependencies {
testCompile ("org.fisco-bcos:solcJ:${solcJVersion}")
testCompile ("com.google.guava:guava:${guavaVersion}")
}
googleJavaFormat {
options style: 'AOSP'
source = sourceSets*.allJava
include '**/*.java'
}

verifyGoogleJavaFormat {
source = sourceSets*.allJava
include '**/*.java'
}

javadoc {
options.addStringOption('Xdoclint:none', '-quiet')
Expand Down Expand Up @@ -310,10 +311,6 @@ jar {
from file('src/test/resources/log4j.properties')
into 'dist/conf'
}
copy {
from file('src/test/resources/amop/')
into 'conf/amop'
}
}
}
check.dependsOn jacocoTestReport
91 changes: 78 additions & 13 deletions sdk-abi/src/main/java/org/fisco/bcos/sdk/abi/ABICodec.java
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,50 @@ public String encodeMethodById(String ABI, String methodId, List<Object> params)
throw new ABICodecException(errorMsg);
}

public String encodeMethodByInterface(String ABI, String methodInterface, List<Object> params)
private ABIDefinition getABIDefinition(String methodInterface) throws ABICodecException {
int start = methodInterface.indexOf("(");
int end = methodInterface.lastIndexOf(")");
if (start == -1 || end == -1 || start >= end) {
String errorMsg = " error format";
logger.error(errorMsg);
throw new ABICodecException(errorMsg);
}
String name = methodInterface.substring(0, start);
String type = methodInterface.substring(start + 1, end);
if (type.indexOf("tuple") != -1) {
String errorMsg = " cannot support tuple type";
logger.error(errorMsg);
throw new ABICodecException(errorMsg);
}
String[] types = type.split(",");
List<ABIDefinition.NamedType> inputs = new ArrayList<ABIDefinition.NamedType>();
for (String s : types) {
ABIDefinition.NamedType input = new ABIDefinition.NamedType("name", s);
inputs.add(input);
}

return new ABIDefinition(false, inputs, name, null, "function", false, "nonpayable");
}

public String encodeMethodByInterface(String methodInterface, List<Object> params)
throws ABICodecException {
FunctionEncoder functionEncoder = new FunctionEncoder(cryptoSuite);
String methodId = functionEncoder.buildMethodId(methodInterface);
return encodeMethodById(ABI, methodId, params);
ABIDefinition abiDefinition = getABIDefinition(methodInterface);
if (abiDefinition.getInputs().size() == params.size()) {
@SuppressWarnings("static-access")
ABIObject inputABIObject = abiObjectFactory.createInputObject(abiDefinition);
ABICodecObject abiCodecObject = new ABICodecObject();
try {
String methodId = abiDefinition.getMethodId(cryptoSuite);
return methodId + abiCodecObject.encodeValue(inputABIObject, params).encode();
} catch (Exception e) {
logger.error(
" exception in encodeMethodByInterfaceFromObject : {}", e.getMessage());
}
}

String errorMsg = " cannot encode in encodeMethodByInterfaceFromObject";
logger.error(errorMsg);
throw new ABICodecException(errorMsg);
}

public String encodeMethodFromString(String ABI, String methodName, List<String> params)
Expand Down Expand Up @@ -194,11 +233,25 @@ public String encodeMethodByIdFromString(String ABI, String methodId, List<Strin
throw new ABICodecException(errorMsg);
}

public String encodeMethodByInterfaceFromString(
String ABI, String methodInterface, List<String> params) throws ABICodecException {
FunctionEncoder functionEncoder = new FunctionEncoder(cryptoSuite);
String methodId = functionEncoder.buildMethodId(methodInterface);
return encodeMethodByIdFromString(ABI, methodId, params);
public String encodeMethodByInterfaceFromString(String methodInterface, List<String> params)
throws ABICodecException {
ABIDefinition abiDefinition = getABIDefinition(methodInterface);
if (abiDefinition.getInputs().size() == params.size()) {
@SuppressWarnings("static-access")
ABIObject inputABIObject = abiObjectFactory.createInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
String methodId = abiDefinition.getMethodId(cryptoSuite);
return methodId + abiCodecJsonWrapper.encode(inputABIObject, params).encode();
} catch (IOException e) {
logger.error(
" exception in encodeMethodByInterfaceFromString : {}", e.getMessage());
}
}

String errorMsg = " cannot encode in encodeMethodByInterfaceFromString";
logger.error(errorMsg);
throw new ABICodecException(errorMsg);
}

public List<Object> decodeMethod(ABIDefinition abiDefinition, String output)
Expand Down Expand Up @@ -334,7 +387,10 @@ public List<Object> decodeEvent(String ABI, String eventName, EventLog log)
ABIObject inputObject = abiObjectFactory.createEventInputObject(abiDefinition);
ABICodecObject abiCodecObject = new ABICodecObject();
try {
List<Object> params = abiCodecObject.decodeJavaObject(inputObject, log.getData());
List<Object> params = new ArrayList<>();
if (!log.getData().equals("0x")) {
params = abiCodecObject.decodeJavaObject(inputObject, log.getData());
}
List<String> topics = log.getTopics();
return mergeEventParamsAndTopics(abiDefinition, params, topics);
} catch (Exception e) {
Expand All @@ -355,7 +411,10 @@ public List<Object> decodeEventByTopic(String ABI, String eventTopic, EventLog l
ABIObject inputObject = abiObjectFactory.createEventInputObject(abiDefinition);
ABICodecObject abiCodecObject = new ABICodecObject();
try {
List<Object> params = abiCodecObject.decodeJavaObject(inputObject, log.getData());
List<Object> params = new ArrayList<>();
if (!log.getData().equals("0x")) {
params = abiCodecObject.decodeJavaObject(inputObject, log.getData());
}
List<String> topics = log.getTopics();
return mergeEventParamsAndTopics(abiDefinition, params, topics);
} catch (Exception e) {
Expand Down Expand Up @@ -390,7 +449,10 @@ public List<String> decodeEventToString(String ABI, String eventName, EventLog l
ABIObject inputObject = abiObjectFactory.createEventInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
List<String> params = abiCodecJsonWrapper.decode(inputObject, log.getData());
List<String> params = new ArrayList<>();
if (!log.getData().equals("0x")) {
params = abiCodecJsonWrapper.decode(inputObject, log.getData());
}
List<String> topics = log.getTopics();
return mergeEventParamsAndTopicsToString(abiDefinition, params, topics);
} catch (Exception e) {
Expand All @@ -411,7 +473,10 @@ public List<String> decodeEventByTopicToString(String ABI, String eventTopic, Ev
ABIObject inputObject = abiObjectFactory.createEventInputObject(abiDefinition);
ABICodecJsonWrapper abiCodecJsonWrapper = new ABICodecJsonWrapper();
try {
List<String> params = abiCodecJsonWrapper.decode(inputObject, log.getData());
List<String> params = new ArrayList<>();
if (!log.getData().equals("0x")) {
params = abiCodecJsonWrapper.decode(inputObject, log.getData());
}
List<String> topics = log.getTopics();
return mergeEventParamsAndTopicsToString(abiDefinition, params, topics);
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,15 +341,33 @@ public void testEncodeFromString() {
encodedWithMethodId,
abiCodec.encodeMethodById(
abiDesc, test.getMethodId(Utils.getCryptoSuite()), abiObjects));
// MethodByInterface String & JavaObject
Assert.assertEquals(
encodedWithMethodId,
abiCodec.encodeMethodByInterfaceFromString(
abiDesc, test.getMethodSignatureAsString(), args));
Assert.assertEquals(
encodedWithMethodId,
abiCodec.encodeMethodByInterface(
abiDesc, test.getMethodSignatureAsString(), abiObjects));
} catch (ABICodecException e) {
Assert.fail(e.getMessage());
}
}

@Test
public void testEncodeByInterface() {
ABICodec abiCodec = new ABICodec(Utils.getCryptoSuite());
List<Object> argsObjects = new ArrayList<Object>();
List<BigInteger> b1 = new ArrayList<BigInteger>();
b1.add(new BigInteger("100"));
b1.add(new BigInteger("200"));
argsObjects.add(b1);
List<BigInteger> b2 = new ArrayList<BigInteger>();
b2.add(new BigInteger("100"));
b2.add(new BigInteger("200"));
b2.add(new BigInteger("300"));
argsObjects.add(b2);
byte[] b = "1234".getBytes();
argsObjects.add(b);
String a = "0x5678";
argsObjects.add(a);
try {
String s1 = abiCodec.encodeMethodByInterface("call(uint256[2],uint256[],bytes,address)", argsObjects);
String abi = "[{\"constant\":false,\"inputs\":[{\"name\":\"u1\",\"type\":\"uint256[2]\"},{\"name\":\"u2\",\"type\":\"uint256[]\"},{\"name\":\"b\",\"type\":\"bytes\"},{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"call\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"u\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"s\",\"type\":\"string\"}],\"name\":\"add\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"u\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"LogAdd1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"u\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"LogAdd2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"u\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"a\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"s\",\"type\":\"string\"}],\"name\":\"LogAdd3\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"LogAdd4\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"LogAdd5\",\"type\":\"event\"}]";
String s2 = abiCodec.encodeMethod(abi, "call", argsObjects);
Assert.assertEquals(s1, s2);
} catch (ABICodecException e) {
Assert.fail(e.getMessage());
}
Expand Down
14 changes: 1 addition & 13 deletions sdk-amop/src/main/java/org/fisco/bcos/sdk/amop/Amop.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import java.util.UUID;
import org.fisco.bcos.sdk.amop.topic.TopicManager;
import org.fisco.bcos.sdk.channel.Channel;
import org.fisco.bcos.sdk.channel.ResponseCallback;
import org.fisco.bcos.sdk.config.ConfigOption;
import org.fisco.bcos.sdk.crypto.keystore.KeyTool;

Expand Down Expand Up @@ -81,7 +80,7 @@ static Amop build(Channel channel, ConfigOption config) {
* @param content the sent message
* @param callback the callback that will be called when receive the AMOP response
*/
void sendAmopMsg(AmopMsgOut content, ResponseCallback callback);
void sendAmopMsg(AmopMsgOut content, AmopResponseCallback callback);

/**
* Send amop msg
Expand All @@ -97,14 +96,6 @@ static Amop build(Channel channel, ConfigOption config) {
*/
Set<String> getSubTopics();

/**
* Get list of subscribers to a topic
*
* @param topicName the topic you want to query
* @return List of subscribers
*/
List<String> getTopicSubscribers(String topicName);

/**
* set amop default callback
*
Expand All @@ -118,9 +109,6 @@ static Amop build(Channel channel, ConfigOption config) {
/** Stop. */
void stop();

/** If configured private topic, wait until finish verify */
void waitFinishPrivateTopicVerify();

/**
* generate message sequence string
*
Expand Down
23 changes: 11 additions & 12 deletions sdk-amop/src/main/java/org/fisco/bcos/sdk/amop/AmopImp.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.fisco.bcos.sdk.model.AmopMsg;
import org.fisco.bcos.sdk.model.Message;
import org.fisco.bcos.sdk.model.MsgType;
import org.fisco.bcos.sdk.model.Response;
import org.fisco.bcos.sdk.utils.ObjectMapperFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -96,7 +97,7 @@ public void unsubscribeTopic(String topicName) {
}

@Override
public void sendAmopMsg(AmopMsgOut content, ResponseCallback callback) {
public void sendAmopMsg(AmopMsgOut content, AmopResponseCallback callback) {
if (!topicManager.canSendTopicMsg(content)) {
logger.error(
"can not send this amop private msg out, you have not configured the public keys. topic:{}",
Expand All @@ -110,7 +111,15 @@ public void sendAmopMsg(AmopMsgOut content, ResponseCallback callback) {
msg.setData(content.getContent());
Options ops = new Options();
ops.setTimeout(content.getTimeout());
this.channel.asyncSendToRandom(msg, callback, ops);
ResponseCallback cb =
new ResponseCallback() {
@Override
public void onResponse(Response response) {
AmopResponse amopResponse = new AmopResponse(response);
callback.onResponse(amopResponse);
}
};
this.channel.asyncSendToRandom(msg, cb, ops);
logger.info(
"send amop msg to a random peer, seq{} topic{}", msg.getSeq(), content.getTopic());
}
Expand Down Expand Up @@ -141,11 +150,6 @@ public Set<String> getSubTopics() {
return topicManager.getTopicNames();
}

@Override
public List<String> getTopicSubscribers(String topicName) {
return null;
}

@Override
public void setCallback(AmopCallback cb) {
topicManager.setCallback(cb);
Expand All @@ -165,11 +169,6 @@ public void stop() {
unSubscribeAll();
}

@Override
public void waitFinishPrivateTopicVerify() {
// todo add wait function
}

private void unSubscribeAll() {
List<String> peers = this.channel.getAvailablePeer();
logger.info("unsubscribe all topics, inform {} peers", peers.size());
Expand Down
Loading