@@ -1,105 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||||
<parent> | |||||
<artifactId>contract</artifactId> | |||||
<groupId>com.jd.blockchain</groupId> | |||||
<version>0.8.2.RELEASE</version> | |||||
</parent> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<artifactId>contract-compile</artifactId> | |||||
<dependencies> | |||||
<dependency> | |||||
<groupId>com.jd.blockchain</groupId> | |||||
<artifactId>contract-model</artifactId> | |||||
<version>${project.version}</version> | |||||
<scope>provided</scope> | |||||
</dependency> | |||||
</dependencies> | |||||
<build> | |||||
<plugins> | |||||
<plugin> | |||||
<groupId>org.apache.maven.plugins</groupId> | |||||
<artifactId>maven-compiler-plugin</artifactId> | |||||
<configuration> | |||||
<source>1.8</source> | |||||
<target>1.8</target> | |||||
<encoding>UTF-8</encoding> | |||||
<optimize>false</optimize> | |||||
<debug>true</debug> | |||||
<showDeprecation>false</showDeprecation> | |||||
<showWarnings>false</showWarnings> | |||||
</configuration> | |||||
</plugin> | |||||
<plugin> | |||||
<groupId>org.apache.maven.plugins</groupId> | |||||
<artifactId>maven-surefire-plugin</artifactId> | |||||
<version>2.5</version> | |||||
<configuration> | |||||
<!--<includes>--> | |||||
<!--<include>**/*Test.java</include>--> | |||||
<!--</includes>--> | |||||
<skipTests>true</skipTests> | |||||
</configuration> | |||||
</plugin> | |||||
<plugin> | |||||
<artifactId>maven-assembly-plugin</artifactId> | |||||
<configuration> | |||||
<finalName>contract</finalName> | |||||
<appendAssemblyId>false</appendAssemblyId> | |||||
<archive> | |||||
<manifest> | |||||
<mainClass>com.jd.blockchain.contract.AssetContract2</mainClass> | |||||
</manifest> | |||||
</archive> | |||||
<descriptorRefs> | |||||
<descriptorRef>jar-with-dependencies</descriptorRef> | |||||
</descriptorRefs> | |||||
</configuration> | |||||
<executions> | |||||
<execution> | |||||
<id>make-assembly</id> | |||||
<phase>package</phase> | |||||
<goals> | |||||
<goal>single</goal> | |||||
</goals> | |||||
</execution> | |||||
</executions> | |||||
</plugin> | |||||
<plugin> | |||||
<groupId>com.jd.blockchain</groupId> | |||||
<artifactId>contract-maven-plugin</artifactId> | |||||
<version>${project.version}</version> | |||||
<!--<version>0.8.2-SNAPSHOT</version>--> | |||||
<!--<configuration>--> | |||||
<!--<config>${project.basedir}/src/main/resources/config.properties</config>--> | |||||
<!--</configuration>--> | |||||
<executions> | |||||
<execution> | |||||
<id>make-assembly</id> | |||||
<phase>process-sources</phase> | |||||
<goals> | |||||
<goal>checkImports</goal> | |||||
</goals> | |||||
</execution> | |||||
</executions> | |||||
</plugin> | |||||
<plugin> | |||||
<artifactId>maven-jar-plugin</artifactId> | |||||
<version>3.0.2</version> | |||||
<executions> | |||||
<execution> | |||||
<id>default-jar</id> | |||||
<phase>none</phase> | |||||
</execution> | |||||
</executions> | |||||
</plugin> | |||||
</plugins> | |||||
</build> | |||||
</project> |
@@ -1,232 +0,0 @@ | |||||
package com.jd.blockchain.contract; | |||||
import com.jd.blockchain.contract.model.*; | |||||
import com.jd.blockchain.crypto.CryptoAlgorithm; | |||||
import com.jd.blockchain.crypto.PubKey; | |||||
import com.jd.blockchain.crypto.hash.HashDigest; | |||||
import com.jd.blockchain.ledger.*; | |||||
import com.jd.blockchain.utils.BaseConstant; | |||||
import com.jd.blockchain.utils.codec.Base58Utils; | |||||
import com.jd.blockchain.utils.io.ByteArray; | |||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
import java.util.Set; | |||||
/** | |||||
* 模拟用智能合约; | |||||
*/ | |||||
@Contract | |||||
public class AssetContract1 implements EventProcessingAwire { | |||||
// private static final Logger LOGGER = LoggerFactory.getLogger(AssetContract1.class); | |||||
// 资产管理账户的地址; | |||||
// private static String ASSET_ADDRESS = "2njZBNbFQcmKd385DxVejwSjy4driRzf9Pk"; | |||||
private static String ASSET_ADDRESS = ""; | |||||
//账户地址; | |||||
private static final String ACCOUNT_ADDRESS = "accountAddress"; | |||||
String contractAddress = "2njZBNbFQcmKd385DxVejwSjy4driRzf9Pk"; | |||||
String userPubKeyVal = "this is user's pubKey"; | |||||
// 保存资产总数的键; | |||||
private static final String KEY_TOTAL = "TOTAL"; | |||||
// 合约事件上下文; | |||||
private ContractEventContext eventContext; | |||||
private Object eventContextObj; | |||||
private byte[] eventContextBytes; | |||||
@Override | |||||
public void beforeEvent(ContractEventContext contractEventContext) { | |||||
eventContext = contractEventContext; | |||||
System.out.println("in beforeEvent(),event is: "+contractEventContext.getEvent()); | |||||
} | |||||
@Override | |||||
public void postEvent(ContractEventContext eventContext, ContractException error) { | |||||
this.eventContext = null; | |||||
} | |||||
@Override | |||||
public void postEvent(ContractException error) { | |||||
this.eventContextBytes = null; | |||||
} | |||||
@Override | |||||
public void postEvent() { | |||||
this.eventContextBytes = null; | |||||
System.out.println("postEvent(),over."); | |||||
} | |||||
/** | |||||
* 发行资产; | |||||
* @param contractEventContext | |||||
* @throws Exception | |||||
*/ | |||||
@ContractEvent(name = "issue-asset") | |||||
public void issue(ContractEventContext contractEventContext) throws Exception { | |||||
// String strArgs = (String)BytesUtils.getObjectFromBytes(args_); | |||||
byte [] args_ = contractEventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
// 新发行的资产的持有账户; | |||||
String assetHolderAddress = args[1]; | |||||
String ASSET_ADDRESS = args[2]; | |||||
String previousBlockHash = args[3]; | |||||
String userAddress = args[4]; | |||||
String contractAddress = args[5]; | |||||
String txHash = args[6]; | |||||
String pubKeyVal = args[7]; | |||||
// checkAllOwnersAgreementPermission(); | |||||
// 新发行的资产数量;在传递过程中都改为字符串,需要反转; | |||||
// long amount = BytesUtils.toLong(args[0]); | |||||
if (amount < 0) { | |||||
throw new ContractException("The amount is negative!"); | |||||
} | |||||
if (amount == 0) { | |||||
return; | |||||
} | |||||
// 校验持有者账户的有效性; | |||||
// BlockchainAccount holderAccount = eventContext.getLedger().getAccount(currentLedgerHash(), assetHolderAddress); | |||||
// if (holderAccount == null) { | |||||
// throw new ContractError("The holder is not exist!"); | |||||
// } | |||||
// 查询当前值; | |||||
HashDigest hashDigest = eventContext.getCurrentLedgerHash(); | |||||
//赋值;mock的对象直接赋值无效; | |||||
// eventContext.getLedger().dataAccount(ACCOUNT_ADDRESS).set(KEY_TOTAL,"total new dataAccount".getBytes(),2); | |||||
// KVDataEntry[] kvEntries = eventContext.getLedger().getDataEntries(hashDigest, ASSET_ADDRESS, KEY_TOTAL,assetHolderAddress); | |||||
// assert ByteArray.toHex("total new dataAccount".getBytes()).equals(kvEntries[0].getValue()) | |||||
// && ByteArray.toHex("abc new dataAccount".getBytes()).equals(kvEntries[1].getValue()) : | |||||
// "getDataEntries() test,期望值!=设定值;"; | |||||
KVDataEntry[] kvEntries = eventContext.getLedger().getDataEntries(hashDigest, ASSET_ADDRESS, | |||||
KEY_TOTAL,assetHolderAddress,"ledgerHash"); //,"latestBlockHash" | |||||
//当前mock设定值为:TOTAL="total value,dataAccount";abc="abc value,dataAccount"; | |||||
assert ByteArray.toHex("total value,dataAccount".getBytes()).equals(kvEntries[0].getValue()) | |||||
&& ByteArray.toHex("abc value,dataAccount".getBytes()).equals(kvEntries[1].getValue()) : | |||||
"getDataEntries() test,期望值=设定值;"; | |||||
//高度只是一个模拟,看结果是否与期望相同;//get the latest block; | |||||
LedgerBlock ledgerBlock = eventContext.getLedger().getBlock(hashDigest, | |||||
eventContext.getLedger().getLedger(hashDigest).getLatestBlockHeight()); | |||||
// assert "zhaogw".equals(new String(ledgerBlock.getLedgerHash().getRawDigest())) && | |||||
// "lisi".equals(new String(ledgerBlock.getPreviousHash().getRawDigest())) : | |||||
// "getBlock(hash,long) test,期望值!=设定值;"; | |||||
assert ByteArray.toHex(eventContext.getCurrentLedgerHash().getRawDigest()).equals(kvEntries[2].getValue()) && | |||||
ledgerBlock.getPreviousHash().toBase58().equals(previousBlockHash) : | |||||
"getPreviousHash() test,期望值!=设定值;"; | |||||
//模拟:根据hash来获得区块; | |||||
LedgerBlock ledgerBlock1 = eventContext.getLedger().getBlock(hashDigest,ledgerBlock.getHash()); | |||||
assert eventContext.getLedger().getTransactionCount(hashDigest,1) == 2 : | |||||
"getTransactionCount(),期望值!=设定值"; | |||||
// assert "zhaogw".equals(new String(ledgerBlock1.getLedgerHash().getRawDigest())) && | |||||
// "lisi".equals(new String(ledgerBlock1.getPreviousHash().getRawDigest())) : | |||||
// "getBlock(hash,blockHash) test,期望值!=设定值;"; | |||||
assert ByteArray.toHex(eventContext.getCurrentLedgerHash().getRawDigest()).equals(kvEntries[2].getValue()) && | |||||
ledgerBlock1.getPreviousHash().toBase58().equals(previousBlockHash) : | |||||
"getBlock(hash,blockHash) test,期望值!=设定值;"; | |||||
assert ASSET_ADDRESS.equals(eventContext.getLedger().getDataAccount(hashDigest,ASSET_ADDRESS).getAddress()) : | |||||
"getDataAccount(hash,address), 期望值!=设定值"; | |||||
//mock user()等;内部赋值,验证外部是否能够得到; | |||||
PubKey pubKey = new PubKey(CryptoAlgorithm.ED25519, pubKeyVal.getBytes()); | |||||
BlockchainIdentity contractID = new BlockchainIdentityData(pubKey); | |||||
// assert contractID == contractEventContext.getLedger().dataAccounts().register(contractID).getAccountID() : | |||||
// "dataAccounts(),期望值!=设定值"; | |||||
contractEventContext.getLedger().dataAccounts().register(contractID); | |||||
contractEventContext.getLedger().dataAccount(contractID.getAddress()). | |||||
set(KEY_TOTAL,"hello".getBytes(),-1).getOperation(); | |||||
assert userAddress.equals(eventContext.getLedger().getUser(hashDigest,userAddress).getAddress()) : | |||||
"getUser(hash,address), 期望值!=设定值"; | |||||
assert contractAddress.equals(eventContext.getLedger().getContract(hashDigest,contractAddress).getAddress()) : | |||||
"getContract(hash,address), 期望值!=设定值"; | |||||
PubKey userPubKey = new PubKey(CryptoAlgorithm.ED25519, userPubKeyVal.getBytes()); | |||||
BlockchainIdentity userBlockId = new BlockchainIdentityData(userPubKey); | |||||
contractEventContext.getLedger().users().register(userBlockId); | |||||
// txRootHash | |||||
//此方法未实现;需要相关人员进一步完善; | |||||
// eventContext.getLedger().getTransactions(hashDigest,ledgerBlock1.getHash(),0,10); | |||||
HashDigest txHashDigest = new HashDigest(Base58Utils.decode(txHash)); | |||||
LedgerTransaction ledgerTransactions = eventContext.getLedger().getTransactionByContentHash(hashDigest,txHashDigest); | |||||
assert ledgerTransactions != null : "getTransactionByContentHash(hashDigest,txHashDigest),期望值!=设定值"; | |||||
System.out.println("issue(),over."); | |||||
} | |||||
@ContractEvent(name = "transfer-asset") | |||||
public void transfer(ContractEventContext contractEventContext) { | |||||
byte[] args = contractEventContext.getArgs(); | |||||
String[] argStr = new String(args).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
String fromAddress = argStr[0]; | |||||
String toAddress = argStr[1]; | |||||
long amount = Long.parseLong(argStr[2]); | |||||
if (amount < 0) { | |||||
throw new ContractException("The amount is negative!"); | |||||
} | |||||
if (amount == 0) { | |||||
return; | |||||
} | |||||
checkSignerPermission(fromAddress); | |||||
System.out.println("transfer(),over."); | |||||
} | |||||
/** | |||||
* 只有全部的合约拥有者同意才能通过校验; | |||||
*/ | |||||
private void checkAllOwnersAgreementPermission() { | |||||
Set<BlockchainIdentity> owners = eventContext.getContracOwners(); | |||||
Set<BlockchainIdentity> requestors = eventContext.getTxSigners(); | |||||
if (requestors.size() != owners.size()) { | |||||
throw new ContractException("Permission Error! -- The requestors is not exactlly being owners!"); | |||||
} | |||||
Map<String, BlockchainIdentity> ownerMap = new HashMap<>(); | |||||
for (BlockchainIdentity o : owners) { | |||||
ownerMap.put(o.getAddress().toBase58(), o); | |||||
} | |||||
for (BlockchainIdentity r : requestors) { | |||||
System.out.println("checkAllOwnersAgreementPermission(),r.getAddress:"+r.getAddress()); | |||||
if (!ownerMap.containsKey(r.getAddress())) { | |||||
throw new ContractException("Permission Error! -- No agreement of all owners!"); | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* 校验指定的账户是否签署了当前交易; | |||||
* | |||||
* @param address | |||||
*/ | |||||
private void checkSignerPermission(String address) { | |||||
Set<BlockchainIdentity> requestors = eventContext.getTxSigners(); | |||||
for (BlockchainIdentity r : requestors) { | |||||
if (r.getAddress().equals(address)) { | |||||
return; | |||||
} | |||||
} | |||||
// throw new ContractError("Permission Error! -- No signature !"); | |||||
} | |||||
} |
@@ -1,63 +0,0 @@ | |||||
package com.jd.blockchain.contract; | |||||
import com.jd.blockchain.contract.model.*; | |||||
import com.jd.blockchain.crypto.hash.HashDigest; | |||||
import com.jd.blockchain.ledger.KVDataEntry; | |||||
import com.jd.blockchain.utils.BaseConstant; | |||||
/** | |||||
* 模拟用智能合约; | |||||
*/ | |||||
@Contract | |||||
public class AssetContract2 implements EventProcessingAwire { | |||||
// private static final Logger LOGGER = LoggerFactory.getLogger(AssetContract.class); | |||||
private static final String KEY_TOTAL = "TOTAL"; | |||||
private static final String LEDGER_HASH = "ledgerHash"; | |||||
@ContractEvent(name = "issue-asset") | |||||
public void test1(ContractEventContext eventContext) throws Exception{ | |||||
byte [] args_ = eventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
long amount1 = Long.parseLong(args[1]); | |||||
String contractDataAddress = args[2]; | |||||
System.out.println("in contract2,invoke test1(),amountAdd:"+(amount+amount1)+",contractDataAddress="+contractDataAddress); | |||||
//test invoke; | |||||
HashDigest hashDigest = eventContext.getCurrentLedgerHash(); | |||||
KVDataEntry[] kvEntries = eventContext.getLedger().getDataEntries(hashDigest, contractDataAddress, | |||||
KEY_TOTAL,LEDGER_HASH); //,"latestBlockHash" | |||||
//当前mock设定值为:TOTAL="total value,dataAccount";abc="abc value,dataAccount"; | |||||
// | |||||
// assert ByteArray.toHex("total value,dataAccount".getBytes()).equals(kvEntries[0].getValue()) | |||||
// && ByteArray.toHex("abc value,dataAccount".getBytes()).equals(kvEntries[1].getValue()) : | |||||
// "getDataEntries() test,期望值=设定值;"; | |||||
System.out.println("in dataSet,KEY_TOTAL="+new String(kvEntries[0].getValue().toString())); | |||||
System.out.println("in dataSet,LEDGER_HASH="+new String(kvEntries[1].getValue().toString())); | |||||
} | |||||
@Override | |||||
public void beforeEvent(ContractEventContext contractEventContext) { | |||||
} | |||||
@Override | |||||
public void postEvent() { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractEventContext contractEventContext, ContractException contractError) { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractException contractError) { | |||||
} | |||||
} |
@@ -1,65 +0,0 @@ | |||||
package com.jd.blockchain.contract; | |||||
import com.jd.blockchain.contract.model.*; | |||||
import com.jd.blockchain.utils.BaseConstant; | |||||
/** | |||||
* 模拟用智能合约; | |||||
* 只做最简单的加法运算; | |||||
*/ | |||||
@Contract | |||||
public class AssetContract3 implements EventProcessingAwire { | |||||
@ContractEvent(name = "issue-asset") | |||||
public void test1(ContractEventContext eventContext){ | |||||
byte [] args_ = eventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
// KVDataEntry[] kvEntries = eventContext.getLedger().getDataEntries(eventContext.getCurrentLedgerHash(), | |||||
// "", ""); | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
long amount1 = Long.parseLong(args[1]); | |||||
String contractDataAddress = args[2]; | |||||
System.out.println("###@@@,in contract3,invoke test1(),amountAdd:"+(amount+amount1)+ | |||||
",contractDataAddress= "+contractDataAddress); | |||||
} | |||||
@ContractEvent(name = "multi") | |||||
public void test2(ContractEventContext eventContext) throws Exception{ | |||||
byte [] args_ = eventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
long amount1 = Long.parseLong(args[1]); | |||||
String contractDataAddress = args[2]; | |||||
System.out.println("###test,in contract3,invoke test2(),amount Multi:"+(amount*amount1)+ | |||||
",contractDataAddress= "+contractDataAddress); | |||||
} | |||||
@Override | |||||
public void beforeEvent(ContractEventContext contractEventContext) { | |||||
} | |||||
@Override | |||||
public void postEvent() { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractEventContext contractEventContext, ContractException contractError) { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractException contractError) { | |||||
} | |||||
} |
@@ -1,83 +0,0 @@ | |||||
package com.jd.blockchain.contract; | |||||
import com.jd.blockchain.contract.model.*; | |||||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||||
import com.jd.blockchain.ledger.BlockchainKeyPair; | |||||
import com.jd.blockchain.ledger.KVDataEntry; | |||||
import com.jd.blockchain.utils.BaseConstant; | |||||
import com.jd.blockchain.utils.io.ByteArray; | |||||
/** | |||||
* 模拟用智能合约; | |||||
* 测试从链中取数据,然后对比是否与预定值一致;param1Val 的值要与IntegrationTest中保持一致; | |||||
*/ | |||||
@Contract | |||||
public class AssetContract4 implements EventProcessingAwire { | |||||
String param1 = "param1"; | |||||
String param1Val = "param1Val"; | |||||
@ContractEvent(name = "issue-asset") | |||||
public void test1(ContractEventContext eventContext) throws Exception{ | |||||
byte [] args_ = eventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
long amount1 = Long.parseLong(args[1]); | |||||
String contractDataAddress = args[2]; | |||||
System.out.println("###@@@,in contract4,invoke test1(),amountAdd:"+(amount+amount1)+ | |||||
",contractDataAddress= "+contractDataAddress); | |||||
BlockchainKeyPair dataAccount = BlockchainKeyGenerator.getInstance().generate(); | |||||
//TODO:register牵扯到账本中的事务处理,需要优化; | |||||
// contractEventContext.getLedger().dataAccounts().register(dataAccount.getIdentity()); | |||||
// contractEventContext.getLedger().dataAccount(dataAccount.getAddress()). | |||||
// set(param1,param1Val.getBytes(),-1).getOperation(); | |||||
System.out.println("data address="+dataAccount.getAddress()); | |||||
} | |||||
@ContractEvent(name = "event2") | |||||
public void test2(ContractEventContext eventContext) throws Exception{ | |||||
byte [] args_ = eventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
long amount1 = Long.parseLong(args[1]); | |||||
String contractDataAddress = args[2]; | |||||
System.out.println("###!!!!!!!!,in contract3,invoke test2(),amount Multi:"+(amount*amount1)+ | |||||
",contractDataAddress= "+contractDataAddress); | |||||
KVDataEntry[] kvEntries = eventContext.getLedger().getDataEntries(eventContext.getCurrentLedgerHash(), | |||||
contractDataAddress, param1); | |||||
if (ByteArray.toHex(param1Val.getBytes()).equals(kvEntries[0].getValue())){ | |||||
System.out.println("getDataEntries() test,期望值==设定值;"); | |||||
} else { | |||||
System.out.println("getDataEntries() test,期望值!=设定值;"); | |||||
} | |||||
} | |||||
@Override | |||||
public void beforeEvent(ContractEventContext contractEventContext) { | |||||
} | |||||
@Override | |||||
public void postEvent() { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractEventContext contractEventContext, ContractException contractError) { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractException contractError) { | |||||
} | |||||
} |
@@ -1,62 +0,0 @@ | |||||
package com.jd.blockchain.contract; | |||||
import com.jd.blockchain.contract.model.*; | |||||
import com.jd.blockchain.utils.BaseConstant; | |||||
/** | |||||
* 模拟用智能合约; | |||||
* 只做最简单的加法运算; | |||||
*/ | |||||
@Contract | |||||
public class AssetContract5 implements EventProcessingAwire { | |||||
@ContractEvent(name = "issue-asset") | |||||
public void test1(ContractEventContext eventContext) throws Exception{ | |||||
byte [] args_ = eventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
long amount1 = Long.parseLong(args[1]); | |||||
String contractDataAddress = args[2]; | |||||
System.out.println("###@@@,in contract5,invoke test1(),amountAdd:"+(amount+amount1)+ | |||||
",contractDataAddress= "+contractDataAddress); | |||||
} | |||||
@ContractEvent(name = "multi") | |||||
public void test2(ContractEventContext eventContext) throws Exception{ | |||||
byte [] args_ = eventContext.getArgs(); | |||||
if(args_ == null){ | |||||
return; | |||||
} | |||||
String[] args = new String(args_).split(BaseConstant.DELIMETER_DOUBLE_ALARM); | |||||
long amount = Long.parseLong(args[0]); | |||||
long amount1 = Long.parseLong(args[1]); | |||||
String contractDataAddress = args[2]; | |||||
System.out.println("###test,in contract5,invoke test2(),amount Multi:"+(amount*amount1)+ | |||||
",contractDataAddress= "+contractDataAddress); | |||||
} | |||||
@Override | |||||
public void beforeEvent(ContractEventContext contractEventContext) { | |||||
} | |||||
@Override | |||||
public void postEvent() { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractEventContext contractEventContext, ContractException contractError) { | |||||
} | |||||
@Override | |||||
public void postEvent(ContractException contractError) { | |||||
} | |||||
} |