From c11b6735d77afb314998931d0a58dc1413486f97 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 09 May 2024 11:15:13 +0800
Subject: [PATCH] 合约监听

---
 src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java |  105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 105 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
index 14658e9..a32c340 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
@@ -3,6 +3,8 @@
 import io.reactivex.Flowable;
 import io.reactivex.functions.Function;
 import org.web3j.abi.EventEncoder;
+import org.web3j.abi.EventValues;
+import org.web3j.abi.FunctionReturnDecoder;
 import org.web3j.abi.TypeReference;
 import org.web3j.abi.datatypes.*;
 import org.web3j.abi.datatypes.generated.Uint256;
@@ -146,6 +148,67 @@
 
     public static final Event TRANSFER_EVENT = new Event("Transfer",
             Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint256>() {}));
+    ;
+    /**
+     *        {
+     * 		"anonymous": false,
+     * 		"inputs": [
+     *                        {
+     * 				"indexed": false,
+     * 				"internalType": "address",
+     * 				"name": "adr",
+     * 				"type": "address"
+     *            },
+     *            {
+     * 				"indexed": false,
+     * 				"internalType": "uint256",
+     * 				"name": "amount",
+     * 				"type": "uint256"
+     *            },
+     *            {
+     * 				"indexed": false,
+     * 				"internalType": "uint256",
+     * 				"name": "price",
+     * 				"type": "uint256"
+     *            },
+     *            {
+     * 				"indexed": false,
+     * 				"internalType": "uint256",
+     * 				"name": "usdtTarget",
+     * 				"type": "uint256"
+     *            },
+     *            {
+     * 				"indexed": false,
+     * 				"internalType": "uint256",
+     * 				"name": "coinTarget",
+     * 				"type": "uint256"
+     *            },
+     *            {
+     * 				"indexed": false,
+     * 				"internalType": "uint256",
+     * 				"name": "usdtCoin",
+     * 				"type": "uint256"
+     *            },
+     *            {
+     * 				"indexed": false,
+     * 				"internalType": "uint256",
+     * 				"name": "lastMineTime",
+     * 				"type": "uint256"
+     *            }
+     * 		],
+     * 		"name": "CoinReward",
+     * 		"type": "event"
+     * 	}
+     */
+    public static final Event COINREWARD_EVENT = new Event("CoinReward",
+            Arrays.<TypeReference<?>>asList(
+                    new TypeReference<Address>(false) {},
+                    new TypeReference<Uint256>(false) {},
+                    new TypeReference<Uint256>(false) {},
+                    new TypeReference<Uint256>(false) {},
+                    new TypeReference<Uint256>(false) {},
+                    new TypeReference<Uint256>(false) {},
+                    new TypeReference<Uint256>(false) {}));
     ;
 
     @Deprecated
@@ -317,6 +380,37 @@
         EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
         filter.addSingleTopic(EventEncoder.encode(TRANSFER_EVENT));
         return transferEventFlowable(filter);
+    }
+
+    public Flowable<CoinRewardEventResponse> coinRewardEventFlowable(EthFilter filter) {
+        return web3j.ethLogFlowable(filter).map(new Function<Log, CoinRewardEventResponse>() {
+            @Override
+            public CoinRewardEventResponse apply(Log log) {
+                EventValuesWithLog eventValues = extractEventParametersWithLog(COINREWARD_EVENT, log);
+                CoinRewardEventResponse typedResponse = new CoinRewardEventResponse();
+                if(eventValues!=null){
+                    typedResponse.adr = (String) eventValues.getNonIndexedValues().get(0).getValue();
+                    typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
+                    typedResponse.price = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
+                    typedResponse.usdtTarget = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
+                    typedResponse.coinTarget = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
+                    typedResponse.usdtCoin = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue();
+                    typedResponse.lastMineTime = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue();
+                }
+
+                return typedResponse;
+            }
+        });
+    }
+
+    public static void main(String[] args) {
+        System.out.println(EventEncoder.encode(COINREWARD_EVENT));
+    }
+
+    public Flowable<CoinRewardEventResponse> coinRewardEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
+        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
+        filter.addSingleTopic(EventEncoder.encode(COINREWARD_EVENT));
+        return coinRewardEventFlowable(filter);
     }
 
     public RemoteFunctionCall<BigInteger> allowance(String tokenOwner, String spender) {
@@ -717,4 +811,15 @@
 
         public BigInteger tokens;
     }
+
+    public static class CoinRewardEventResponse extends BaseEventResponse {
+        public String adr;//地址
+
+        public BigInteger amount;//总挖矿币量
+        public BigInteger price;//挖矿时价格
+        public BigInteger usdtTarget;//金本位多少USDT,单位USDT
+        public BigInteger coinTarget;//币本位多少币
+        public BigInteger usdtCoin;//金本位换算后多少币
+        public BigInteger lastMineTime;//上一次挖矿时间
+    }
 }

--
Gitblit v1.9.1