From 8544aaaa58deeae1df8d5843e29ddf37e56d93de Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 18 Jul 2023 14:26:51 +0800
Subject: [PATCH] 智能合约
---
src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractMain.java | 68 ++++++++++++++++++++++++++++-----
1 files changed, 57 insertions(+), 11 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractMain.java b/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractMain.java
index eb0153c..c618c47 100644
--- a/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractMain.java
+++ b/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractMain.java
@@ -2,10 +2,15 @@
import cc.mrbird.febs.common.contants.SystemConstants;
import cc.mrbird.febs.common.service.RedisService;
+import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
+import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
@@ -22,10 +27,17 @@
@Component
+@ConditionalOnProperty(prefix = "system", name = "quartz-job", havingValue = "true")
public class AndaoContractMain {
@Autowired
private ChainProducer chainProducer;
+
+ @Autowired
+ private DappMemberDao dappMemberDao;
+
+ @Autowired
+ private DappFundFlowDao dappFundFlowDao;
@Autowired
private SystemConstants systemConstants;
@@ -74,10 +86,10 @@
// 合约地址 TODO
// private static String contractAddr = "0xb5a1aC0fA05BFb8ad16B231e84b0bAC1d46eAfD0";//测试
- private static String contractAddr = "0xD88F63aCbcF82cC6D2255b8082D7bdE43b559d00";
+ private static String contractAddr = "0x99A08A65DB5542f35b96FD69F01896Bd3cDB9DC4";
// 操作账号 手续费钱包地址的私钥(合约里会把手续费转到你这个私钥地址上) 用于操作合约内方法 TODO
- private static String privateKey = "221be67f85375a5af6dd0f4b77fbe877ad2e57e05db201de1b1383fb76494d18";//测试
+ private static String privateKey = "3ff7147104fcc4b3e47eef1c6a826107ad13f8ceaf46d6747b7cd4e56f8b01c6";//测试
// private static String privateKey = AppContants.FEE_ADDRESS_KEY.get("feeAddressKey").toString() ;
@@ -102,21 +114,34 @@
Credentials credentials = Credentials.create(privateKey);
Abi contract = Abi.load(contractAddr, getInstanceScope(), credentials, new DefaultGasProvider());
EthFilter filter = getFilter(startBlock);
- contract.transferEventFlowable(filter).subscribe(e->{
+ contract.receivedEventFlowable(filter).subscribe(e->{
try {
// 投注人的地址
String from = e.from;
- String to = e.to;
- BigInteger amount = e.value;
if(from==null){
// 为空则不进入后续逻辑
return;
}
-
- // TODO 业务操作逻辑代码
- System.out.println("from:"+from+",to:"+to+",amount:"+amount);
// 更新区块编号 TODO
redisService.set("BNB_BLOCK_NUMBER",e.log.getBlockNumber().intValue());
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectByAddress(from, "BSC");
+ if(ObjectUtil.isEmpty(dappMemberEntity)){
+ return;
+ }
+ BigInteger amount = e.amount;
+ String regFlow = e.regFlow;
+ if(regFlow==null){
+ // 为空则不进入后续逻辑
+ return;
+ }
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(Long.parseLong(regFlow));
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
+
+ // TODO 业务操作逻辑代码
+ System.out.println("from:"+from+",amount:"+amount+",regFlow:"+regFlow);
+ chainProducer.sendContractAnDao(Long.parseLong(regFlow));
//投注人
// DappMemberEntity dappMemberEntity = dappMemberDao.selectByAddress(from, "BSC");
// if(ObjectUtil.isNotEmpty(dappMemberEntity)){
@@ -135,7 +160,29 @@
}catch (Exception exception) {
exception.printStackTrace();
}
- });
+ },
+ error -> System.out.println("onError: " + error),
+ () -> System.out.println("onComplete will not be printed!")
+ );
+ }
+
+ public void listenBettings(BigInteger startBlock){
+ System.out.println("启动投注监听事件");
+ // 指定密钥文件并进行账号和密码的验证
+ Credentials credentials = Credentials.create(privateKey);
+ Abi contract = Abi.load(contractAddr, getInstanceScope(), credentials, new DefaultGasProvider());
+ EthFilter filter = getFilter(startBlock);
+ contract.withdrawnEventFlowable(filter).subscribe(e->{
+ try {
+ // 更新区块编号 TODO
+ redisService.set("BNB_BLOCK_NUMBER",e.log.getBlockNumber().intValue());
+ }catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ },
+ error -> System.out.println("onError: " + error),
+ () -> System.out.println("onComplete will not be printed!")
+ );
}
/**
@@ -147,7 +194,7 @@
Abi contract = Abi.load(contractAddr, getInstance(), credentials, getStaticGasProvider());
try {
//BigInteger bigInteger = Convert.toWei(amount.toString(), Convert.Unit.ETHER).toBigInteger();
- TransactionReceipt send = contract.transfer(to1, amount).send();
+ TransactionReceipt send = contract.withdrawANDAO(to1, amount).send();
if(ObjectUtil.isNotEmpty(send)){
transactionHash = send.getTransactionHash();
}
@@ -161,7 +208,6 @@
AndaoContractMain andaoContractMain = new AndaoContractMain();
String address = "0x7a9bfE048d110EF90a467803653f9B8666f9096C";
-// String address = "0x785D5Aa2951Ac4C6f28Dc593AF0b0536Dd3E82Fe";
BigInteger bigInteger = new BigInteger(Convert.toWei("1", Convert.Unit.ETHER).setScale(0).toString());
String hash = andaoContractMain.trans(bigInteger,address);
System.out.println(hash);
--
Gitblit v1.9.1