* commit '3e51629b86977c47cbc4f6d0f57dff95c7edc995': update log configurations update contract samples update log configurationstags/1.4.0^2
@@ -2,17 +2,18 @@ | |||||
<configuration status="WARN" monitorInterval="60"> | <configuration status="WARN" monitorInterval="60"> | ||||
<appenders> | <appenders> | ||||
<console name="Console" target="SYSTEM_OUT"> | <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"/> | <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> | ||||
</console> | </console> | ||||
<RollingFile name="GWRolling" fileName="${sys:jdchain.log}/gw.log" | <RollingFile name="GWRolling" fileName="${sys:jdchain.log}/gw.log" | ||||
filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/gw-%d{yyyy-MM-dd}-%i.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"/> | <PatternLayout pattern="[%date{yyyy-MM-dd HH:mm:ss:SSS}] [%thread] [%p] - %l - %m%n"/> | ||||
<Policies> | <Policies> | ||||
<TimeBasedTriggeringPolicy/> | <TimeBasedTriggeringPolicy/> | ||||
<SizeBasedTriggeringPolicy size="250 MB"/> | |||||
<SizeBasedTriggeringPolicy size="100 MB"/> | |||||
</Policies> | </Policies> | ||||
<DefaultRolloverStrategy max="10"/> | |||||
<DefaultRolloverStrategy max="100"/> | |||||
</RollingFile> | </RollingFile> | ||||
<RollingFile name="GWRollingError" fileName="${sys:jdchain.log}/gw.error.log" | <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"> | filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/gw.error-%d{yyyy-MM-dd}-%i.log"> | ||||
@@ -26,9 +27,10 @@ | |||||
</appenders> | </appenders> | ||||
<loggers> | <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="Console"/> | ||||
<appender-ref ref="GWRolling"/> | <appender-ref ref="GWRolling"/> | ||||
<appender-ref ref="GWRollingError"/> | <appender-ref ref="GWRollingError"/> | ||||
@@ -19,8 +19,8 @@ APP_HOME=$(cd `dirname $0`;cd ../; pwd) | |||||
#Lib目录 | #Lib目录 | ||||
APP_LIB_PATH=$APP_HOME/lib | APP_LIB_PATH=$APP_HOME/lib | ||||
#节点输出日志路径 | |||||
LOG_OUT=$APP_HOME/logs | |||||
#nohup输出日志路径 | |||||
LOG_OUT=$APP_HOME/bin/gw.out | |||||
#获取Peer节点的启动Jar包 | #获取Peer节点的启动Jar包 | ||||
APP_JAR=$(ls $APP_LIB_PATH | grep $APP_JAR_PREFIX) | 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 | 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具体相关命令 | ||||
APP_CMD=$APP_LIB_PATH/$APP_JAR" -c "$GATEWAY_CONFIG | APP_CMD=$APP_LIB_PATH/$APP_JAR" -c "$GATEWAY_CONFIG | ||||
@@ -90,7 +90,7 @@ if [[ $psid -ne 0 ]]; then | |||||
echo "================================" | echo "================================" | ||||
else | else | ||||
echo "Starting Gateway ......" | 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 $*" | JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD $*" | ||||
sleep 1 | sleep 1 | ||||
checkpid | checkpid | ||||
@@ -2,17 +2,18 @@ | |||||
<configuration status="WARN" monitorInterval="60"> | <configuration status="WARN" monitorInterval="60"> | ||||
<appenders> | <appenders> | ||||
<console name="Console" target="SYSTEM_OUT"> | <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"/> | <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> | ||||
</console> | </console> | ||||
<RollingFile name="PeerRolling" fileName="${sys:jdchain.log}/peer.log" | <RollingFile name="PeerRolling" fileName="${sys:jdchain.log}/peer.log" | ||||
filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/peer-%d{yyyy-MM-dd}-%i.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"/> | <PatternLayout pattern="[%date{yyyy-MM-dd HH:mm:ss:SSS}] [%thread] [%p] - %l - %m%n"/> | ||||
<Policies> | <Policies> | ||||
<TimeBasedTriggeringPolicy/> | <TimeBasedTriggeringPolicy/> | ||||
<SizeBasedTriggeringPolicy size="250 MB"/> | |||||
<SizeBasedTriggeringPolicy size="100 MB"/> | |||||
</Policies> | </Policies> | ||||
<DefaultRolloverStrategy max="10"/> | |||||
<DefaultRolloverStrategy max="100"/> | |||||
</RollingFile> | </RollingFile> | ||||
<RollingFile name="PeerRollingError" fileName="${sys:jdchain.log}/peer.error.log" | <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"> | filePattern="${sys:jdchain.log}/$${date:yyyy-MM}/peer.error-%d{yyyy-MM-dd}-%i.log"> | ||||
@@ -26,9 +27,10 @@ | |||||
</appenders> | </appenders> | ||||
<loggers> | <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="Console"/> | ||||
<appender-ref ref="PeerRolling"/> | <appender-ref ref="PeerRolling"/> | ||||
<appender-ref ref="PeerRollingError"/> | <appender-ref ref="PeerRollingError"/> | ||||
@@ -30,6 +30,9 @@ APP_HOME=$(cd `dirname $0`;cd ../; pwd) | |||||
#System目录 | #System目录 | ||||
APP_SYSTEM_PATH=$APP_HOME/system | APP_SYSTEM_PATH=$APP_HOME/system | ||||
#nohup输出日志路径 | |||||
LOG_OUT=$APP_HOME/bin/peer.out | |||||
#获取Peer节点的启动Jar包 | #获取Peer节点的启动Jar包 | ||||
APP_JAR=$(ls $APP_SYSTEM_PATH | grep $APP_JAR_PREFIX) | APP_JAR=$(ls $APP_SYSTEM_PATH | grep $APP_JAR_PREFIX) | ||||
@@ -101,7 +104,7 @@ if [[ $psid -ne 0 ]]; then | |||||
echo "================================" | echo "================================" | ||||
else | else | ||||
echo "Starting Peer ......" | 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 $*" | JAVA_CMD="$JAVA_BIN $JAVA_OPTS $APP_CMD $*" | ||||
sleep 1 | sleep 1 | ||||
checkpid | checkpid | ||||
@@ -2,14 +2,23 @@ package com.jdchain.samples.sdk; | |||||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | import com.jd.blockchain.ledger.BlockchainKeyGenerator; | ||||
import com.jd.blockchain.ledger.BlockchainKeypair; | 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.PreparedTransaction; | ||||
import com.jd.blockchain.ledger.TransactionResponse; | import com.jd.blockchain.ledger.TransactionResponse; | ||||
import com.jd.blockchain.ledger.TransactionTemplate; | 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.jd.blockchain.utils.io.FileUtils; | ||||
import com.jdchain.samples.contract.SampleContract; | import com.jdchain.samples.contract.SampleContract; | ||||
import org.junit.Assert; | import org.junit.Assert; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
import java.util.UUID; | |||||
/** | /** | ||||
* 合约相关操作示例: | * 合约相关操作示例: | ||||
* 合约部署,合约调用 | * 合约部署,合约调用 | ||||
@@ -40,16 +49,48 @@ public class ContractSample extends SampleBase { | |||||
} | } | ||||
/** | /** | ||||
* 合约调用 | |||||
* 基于动态代理方式合约调用,需要依赖合约接口 | |||||
*/ | */ | ||||
@Test | @Test | ||||
public void testExecute() { | |||||
public void testExecuteByProxy() { | |||||
// 新建交易 | // 新建交易 | ||||
TransactionTemplate txTemp = blockchainService.newTransaction(ledger); | TransactionTemplate txTemp = blockchainService.newTransaction(ledger); | ||||
// 运行前,填写正确的合约地址 | // 运行前,填写正确的合约地址 | ||||
// 一次交易中可调用多个(多次调用)合约方法 | |||||
// 调用合约的 registerUser 方法 | // 调用合约的 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(); | PreparedTransaction ptx = txTemp.prepare(); | ||||
// 交易签名 | // 交易签名 | ||||
@@ -59,7 +100,24 @@ public class ContractSample extends SampleBase { | |||||
Assert.assertTrue(response.isSuccess()); | Assert.assertTrue(response.isSuccess()); | ||||
Assert.assertEquals(1, response.getOperationResults().length); | 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; | |||||
} | |||||
} | |||||
} | } | ||||
} | } |