* commit '3e51629b86977c47cbc4f6d0f57dff95c7edc995': update log configurations update contract samples update log configurationstags/1.4.0^2
@@ -2,17 +2,18 @@ | |||
<configuration status="WARN" monitorInterval="60"> | |||
<appenders> | |||
<console name="Console" target="SYSTEM_OUT"> | |||
<ThresholdFilter level="all" onMatch="ACCEPT" onMismatch="DENY"/> | |||
<ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY"/> | |||
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> | |||
</console> | |||
<RollingFile name="GWRolling" fileName="${sys:jdchain.log}/gw.log" | |||
filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/gw-%d{yyyy-MM-dd}-%i.log"> | |||
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> | |||
<PatternLayout pattern="[%date{yyyy-MM-dd HH:mm:ss:SSS}] [%thread] [%p] - %l - %m%n"/> | |||
<Policies> | |||
<TimeBasedTriggeringPolicy/> | |||
<SizeBasedTriggeringPolicy size="250 MB"/> | |||
<SizeBasedTriggeringPolicy size="100 MB"/> | |||
</Policies> | |||
<DefaultRolloverStrategy max="10"/> | |||
<DefaultRolloverStrategy max="100"/> | |||
</RollingFile> | |||
<RollingFile name="GWRollingError" fileName="${sys:jdchain.log}/gw.error.log" | |||
filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/gw.error-%d{yyyy-MM-dd}-%i.log"> | |||
@@ -26,9 +27,10 @@ | |||
</appenders> | |||
<loggers> | |||
<logger name="org.springframework" level="ERROR"></logger> | |||
<logger name="org.springframework" level="error"></logger> | |||
<logger name="bftsmart" level="error"></logger> | |||
<!--修改此处,以变更日志等级--> | |||
<root level="all"> | |||
<root level="info"> | |||
<appender-ref ref="Console"/> | |||
<appender-ref ref="GWRolling"/> | |||
<appender-ref ref="GWRollingError"/> | |||
@@ -19,8 +19,8 @@ APP_HOME=$(cd `dirname $0`;cd ../; pwd) | |||
#Lib目录 | |||
APP_LIB_PATH=$APP_HOME/lib | |||
#节点输出日志路径 | |||
LOG_OUT=$APP_HOME/logs | |||
#nohup输出日志路径 | |||
LOG_OUT=$APP_HOME/bin/gw.out | |||
#获取Peer节点的启动Jar包 | |||
APP_JAR=$(ls $APP_LIB_PATH | grep $APP_JAR_PREFIX) | |||
@@ -32,7 +32,7 @@ CONFIG_PATH=$APP_HOME/config | |||
GATEWAY_CONFIG=$CONFIG_PATH/gateway.conf | |||
#定义程序启动的参数 | |||
JAVA_OPTS="-jar -server -Xms1024m -Xmx1024m -Djdchain.log=$LOG_OUT -Dlogging.config=file:$APP_HOME/config/log4j2-gw.xml" | |||
JAVA_OPTS="-jar -server -Xms1024m -Xmx1024m -Djdchain.log=$APP_HOME/logs -Dlogging.config=file:$APP_HOME/config/log4j2-gw.xml" | |||
#APP具体相关命令 | |||
APP_CMD=$APP_LIB_PATH/$APP_JAR" -c "$GATEWAY_CONFIG | |||
@@ -90,7 +90,7 @@ if [[ $psid -ne 0 ]]; then | |||
echo "================================" | |||
else | |||
echo "Starting Gateway ......" | |||
nohup $JAVA_BIN $JAVA_OPTS $APP_CMD $* & | |||
nohup $JAVA_BIN $JAVA_OPTS $APP_CMD $* >$LOG_OUT 2>&1 & | |||
JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD $*" | |||
sleep 1 | |||
checkpid | |||
@@ -2,17 +2,18 @@ | |||
<configuration status="WARN" monitorInterval="60"> | |||
<appenders> | |||
<console name="Console" target="SYSTEM_OUT"> | |||
<ThresholdFilter level="all" onMatch="ACCEPT" onMismatch="DENY"/> | |||
<ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY"/> | |||
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> | |||
</console> | |||
<RollingFile name="PeerRolling" fileName="${sys:jdchain.log}/peer.log" | |||
filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/peer-%d{yyyy-MM-dd}-%i.log"> | |||
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> | |||
<PatternLayout pattern="[%date{yyyy-MM-dd HH:mm:ss:SSS}] [%thread] [%p] - %l - %m%n"/> | |||
<Policies> | |||
<TimeBasedTriggeringPolicy/> | |||
<SizeBasedTriggeringPolicy size="250 MB"/> | |||
<SizeBasedTriggeringPolicy size="100 MB"/> | |||
</Policies> | |||
<DefaultRolloverStrategy max="10"/> | |||
<DefaultRolloverStrategy max="100"/> | |||
</RollingFile> | |||
<RollingFile name="PeerRollingError" fileName="${sys:jdchain.log}/peer.error.log" | |||
filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/peer.error-%d{yyyy-MM-dd}-%i.log"> | |||
@@ -26,9 +27,10 @@ | |||
</appenders> | |||
<loggers> | |||
<logger name="org.springframework" level="ERROR"></logger> | |||
<logger name="org.springframework" level="error"></logger> | |||
<logger name="bftsmart" level="error"></logger> | |||
<!--修改此处,以变更日志等级--> | |||
<root level="all"> | |||
<root level="info"> | |||
<appender-ref ref="Console"/> | |||
<appender-ref ref="PeerRolling"/> | |||
<appender-ref ref="PeerRollingError"/> | |||
@@ -30,6 +30,9 @@ APP_HOME=$(cd `dirname $0`;cd ../; pwd) | |||
#System目录 | |||
APP_SYSTEM_PATH=$APP_HOME/system | |||
#nohup输出日志路径 | |||
LOG_OUT=$APP_HOME/bin/peer.out | |||
#获取Peer节点的启动Jar包 | |||
APP_JAR=$(ls $APP_SYSTEM_PATH | grep $APP_JAR_PREFIX) | |||
@@ -101,7 +104,7 @@ if [[ $psid -ne 0 ]]; then | |||
echo "================================" | |||
else | |||
echo "Starting Peer ......" | |||
nohup $JAVA_BIN $JAVA_OPTS $APP_CMD $* & | |||
nohup $JAVA_BIN $JAVA_OPTS $APP_CMD $* >$LOG_OUT 2>&1 & | |||
JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD $*" | |||
sleep 1 | |||
checkpid | |||
@@ -2,14 +2,23 @@ package com.jdchain.samples.sdk; | |||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||
import com.jd.blockchain.ledger.BytesDataList; | |||
import com.jd.blockchain.ledger.BytesValue; | |||
import com.jd.blockchain.ledger.PreparedTransaction; | |||
import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.TransactionTemplate; | |||
import com.jd.blockchain.ledger.TypedValue; | |||
import com.jd.blockchain.transaction.ContractEventSendOperationBuilder; | |||
import com.jd.blockchain.transaction.ContractReturnValue; | |||
import com.jd.blockchain.transaction.GenericValueHolder; | |||
import com.jd.blockchain.utils.io.BytesUtils; | |||
import com.jd.blockchain.utils.io.FileUtils; | |||
import com.jdchain.samples.contract.SampleContract; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import java.util.UUID; | |||
/** | |||
* 合约相关操作示例: | |||
* 合约部署,合约调用 | |||
@@ -40,16 +49,48 @@ public class ContractSample extends SampleBase { | |||
} | |||
/** | |||
* 合约调用 | |||
* 基于动态代理方式合约调用,需要依赖合约接口 | |||
*/ | |||
@Test | |||
public void testExecute() { | |||
public void testExecuteByProxy() { | |||
// 新建交易 | |||
TransactionTemplate txTemp = blockchainService.newTransaction(ledger); | |||
// 运行前,填写正确的合约地址 | |||
// 一次交易中可调用多个(多次调用)合约方法 | |||
// 调用合约的 registerUser 方法 | |||
txTemp.contract("LdeNr7H1CUbqe3kWjwPwiqHcmd86zEQz2VRye", SampleContract.class).registerUser("至少32位字节数-----------------------------"); | |||
SampleContract sampleContract = txTemp.contract("LdeNr7H1CUbqe3kWjwPwiqHcmd86zEQz2VRye", SampleContract.class); | |||
GenericValueHolder<String> userAddress = ContractReturnValue.decode(sampleContract.registerUser(UUID.randomUUID().toString())); | |||
// 准备交易 | |||
PreparedTransaction ptx = txTemp.prepare(); | |||
// 交易签名 | |||
ptx.sign(adminKey); | |||
// 提交交易 | |||
TransactionResponse response = ptx.commit(); | |||
Assert.assertTrue(response.isSuccess()); | |||
// 获取返回值 | |||
System.out.println(userAddress.get()); | |||
} | |||
/** | |||
* 非动态代理方式合约调用,不需要依赖合约接口及实现 | |||
*/ | |||
@Test | |||
public void testExecuteWithArgus() { | |||
// 新建交易 | |||
TransactionTemplate txTemp = blockchainService.newTransaction(ledger); | |||
ContractEventSendOperationBuilder builder = txTemp.contract(); | |||
// 运行前,填写正确的合约地址,数据账户地址等参数 | |||
// 一次交易中可调用多个(多次调用)合约方法 | |||
// 调用合约的 registerUser 方法,传入合约地址,合约方法名,合约方法参数列表 | |||
builder.send("LdeNr7H1CUbqe3kWjwPwiqHcmd86zEQz2VRye", "registerUser", | |||
new BytesDataList(new TypedValue[]{ | |||
TypedValue.fromText(UUID.randomUUID().toString()) | |||
}) | |||
); | |||
// 准备交易 | |||
PreparedTransaction ptx = txTemp.prepare(); | |||
// 交易签名 | |||
@@ -59,7 +100,24 @@ public class ContractSample extends SampleBase { | |||
Assert.assertTrue(response.isSuccess()); | |||
Assert.assertEquals(1, response.getOperationResults().length); | |||
System.out.println(response.getOperationResults()[0].getResult().getBytes().toString()); | |||
// 解析合约方法调用返回值 | |||
for (int i = 0; i < response.getOperationResults().length; i++) { | |||
BytesValue content = response.getOperationResults()[i].getResult(); | |||
switch (content.getType()) { | |||
case TEXT: | |||
System.out.println(content.getBytes().toUTF8String()); | |||
break; | |||
case INT64: | |||
System.out.println(BytesUtils.toLong(content.getBytes().toBytes())); | |||
break; | |||
case BOOLEAN: | |||
System.out.println(BytesUtils.toBoolean(content.getBytes().toBytes()[0])); | |||
break; | |||
default: // byte[], Bytes | |||
System.out.println(content.getBytes().toBase58()); | |||
break; | |||
} | |||
} | |||
} | |||
} |