fix
Helius
2022-09-02 1d58176016c8a7672ba706d55fd45bd2c7c079dd
src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
@@ -13,6 +13,11 @@
import okhttp3.Response;
import org.springframework.data.repository.query.ParameterOutOfBoundsException;
import org.springframework.util.Base64Utils;
import org.web3j.abi.FunctionReturnDecoder;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameter;
@@ -21,13 +26,19 @@
import org.web3j.protocol.core.methods.request.EthFilter;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.protocol.http.HttpService;
import org.web3j.protocol.websocket.WebSocketClient;
import org.web3j.protocol.websocket.WebSocketService;
import org.web3j.tx.gas.StaticGasProvider;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.ConnectException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.rmi.activation.UnknownObjectException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -88,6 +99,46 @@
        });
    }
    public static void wssContractEventListener(BigInteger startBlock, ContractEventService event, String type) {
        WebSocketService ws =null;
        WebSocketClient webSocketClient=null;
        Web3j web3j = null;
        try {
            webSocketClient=new WebSocketClient(new URI("wss://bsc-mainnet.blockvision.org/v1/2Dz4hDxe5vNtQxWkLXNwnzDePKp"));
            ws = new WebSocketService(webSocketClient, false);
            ws.connect();
            web3j = Web3j.build(ws);
            ChainEnum chain = ChainEnum.getValueByName(type);
            assert chain != null;
            EthFilter filter = getFilter(startBlock, null, chain.getContractAddress());
            web3j.ethLogFlowable(filter).subscribe(log -> {
//                List<TypeReference<Type>> arr = new ArrayList<>();
//
//                List<TypeReference<Type>> indexedParameters = event.getIndexedParameters();
//
//                for(int i = 0; i < indexedParameters.size(); ++i) {
//                    Type value = FunctionReturnDecoder.decodeIndexedValue((String)topics.get(i + 1), (TypeReference)indexedParameters.get(i));
//                    indexedValues.add(value);
//                }
                List outputParameters1 = new ArrayList<TypeReference<Type>>();
                outputParameters1.add(new TypeReference<Uint256>() {});
                List outputParameters = new ArrayList<TypeReference<Type>>();
                outputParameters.add(new TypeReference<Address>() {});
                List decode = FunctionReturnDecoder.decode(log.getTopics().get(0), outputParameters);
                List decode1 = FunctionReturnDecoder.decode(log.getTopics().get(1), outputParameters);
                List decode2 = FunctionReturnDecoder.decode(log.getTopics().get(2), outputParameters);
                List decode3 = FunctionReturnDecoder.decode(log.getData(), outputParameters1);
                System.out.println(111);
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private static EthUsdtContract contract(String privateKey, String contractAddress, String url) {
        Credentials credentials = Credentials.create(privateKey);