From 11f6a8c911c5ef241f42953976661a249aa8b83e Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 08 Aug 2023 17:18:58 +0800
Subject: [PATCH] 数据修改

---
 src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractMain.java |   98 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 84 insertions(+), 14 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 0ac213a..58099f1 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
@@ -1,11 +1,17 @@
 package cc.mrbird.febs.dapp.contract.andao;
 
+import cc.mrbird.febs.common.contants.AppContants;
 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;
@@ -19,13 +25,21 @@
 import org.web3j.utils.Convert;
 
 import java.math.BigInteger;
+import java.util.List;
 
 
 @Component
+@ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
 public class AndaoContractMain {
 
     @Autowired
     private ChainProducer chainProducer;
+
+    @Autowired
+    private DappMemberDao dappMemberDao;
+
+    @Autowired
+    private DappFundFlowDao dappFundFlowDao;
 
     @Autowired
     private SystemConstants systemConstants;
@@ -68,18 +82,22 @@
         return Web3j.build(httpService);
     }
 
+    private static Web3j getInstanceScopes() {
+
+        HttpService httpService = new HttpService(blockchainNode);
+        return Web3j.build(httpService);
+    }
+
     // 区块链节点地址 TODO
 //    private static String blockchainNode = "https://bsc-dataseed.binance.org";
     private static String blockchainNode = "https://bsc-dataseed1.ninicoin.io";
 
     // 合约地址 TODO
 //    private static String contractAddr = "0xb5a1aC0fA05BFb8ad16B231e84b0bAC1d46eAfD0";//测试
-    private static String contractAddr = "0xD88F63aCbcF82cC6D2255b8082D7bdE43b559d00";
+    private static String contractAddr = "0xbE8470ff4cF69eb6F2923aE3A8B29f58Ea81cEb0";
 
     // 操作账号 手续费钱包地址的私钥(合约里会把手续费转到你这个私钥地址上) 用于操作合约内方法 TODO
-    private static String privateKey = "221be67f85375a5af6dd0f4b77fbe877ad2e57e05db201de1b1383fb76494d18";//测试
-
-//    private static String privateKey = AppContants.FEE_ADDRESS_KEY.get("feeAddressKey").toString() ;
+    private static String privateKey = AppContants.FEE_ADDRESS_KEY.get("feeAddressKey").toString() ;
 
     private EthFilter getFilter(BigInteger startBlock) {
         if (startBlock != null) {
@@ -102,21 +120,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 +166,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, getInstanceScopes(), 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 +200,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();
             }
@@ -156,12 +209,29 @@
         }
         return transactionHash;
     }
+//    /**
+//     * 初始化合约地址
+//     */
+//    public String setAddress(List<String> list){
+//        String transactionHash = null;
+//        Credentials credentials = Credentials.create(privateKey);
+//        Abi contract = Abi.load(contractAddr, getInstance(), credentials, getStaticGasProvider());
+//        try {
+//            //BigInteger bigInteger = Convert.toWei(amount.toString(), Convert.Unit.ETHER).toBigInteger();
+//            TransactionReceipt send = contract.initializeAddresses(list).send();
+//            if(ObjectUtil.isNotEmpty(send)){
+//                transactionHash = send.getTransactionHash();
+//            }
+//        } catch (Exception exception) {
+//            exception.printStackTrace();
+//        }
+//        return transactionHash;
+//    }
 
     public static void main(String[] args) {
         AndaoContractMain andaoContractMain = new AndaoContractMain();
 
-        String address = "0xAdC5331AC7F46c63e877aeC2DFbB5523C7680812";
-//        String address = "0x785D5Aa2951Ac4C6f28Dc593AF0b0536Dd3E82Fe";
+        String address = "0xA60AaC0da34C76F3f60207ee09e9F75043319ab4";
         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