Java 获取Uniswap的交易对地址

Java 获取Uniswap的交易对地址

Tx

https://etherscan.io/address/0x25942771b17f3790bf32cae7af7d539ce42cdc79#code

Code

package com.hlf.eth;

import org.spongycastle.util.encoders.Hex;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.DynamicArray;
import org.web3j.abi.datatypes.generated.Bytes1;
import org.web3j.abi.datatypes.generated.Bytes32;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.Hash;
import org.web3j.utils.Numeric;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: CalculatPairAddress
 * @Author: huanglefei
 * @CreateDate: 2023/8/18 22:04
 * @Description:
 * @Version: 1.0
 * // calculates the CREATE2 address for a pair without making any external calls
 * function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
 * (address token0, address token1) = sortTokens(tokenA, tokenB);
 * pair = address(
 * uint(
 * keccak256(
 * abi.encodePacked(
 * hex'ff',
 * factory,
 * keccak256(abi.encodePacked(token0, token1)),
 * hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
 * )
 * )
 * )
 * );
 * }
 **/
public class CalculatPairAddress {
    public static void main(String[] args) {
        // UniswapV2
        String initCodeHash = "96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f";
        String factory = "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f";
        String tokenB = "0x8C130499D33097D4D000D3332E1672f75b431543";
        String tokenA = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
        String pair = getPairAddress(initCodeHash, factory, tokenA, tokenB);
        System.out.println("交易对地址:" + pair);

    }

    public static String getPairAddress(String initCodeHash, String factory, String tokenA, String tokenB) {
        List<String> strings = sortTokens(tokenA, tokenB);
        tokenA = strings.get(0);
        tokenB = strings.get(1);
        Bytes1 parff = new Bytes1(Numeric.hexStringToByteArray("ff"));
        Bytes32 parInitCodeHash = new Bytes32(Numeric.hexStringToByteArray(initCodeHash));

        StringBuilder tokenAddress = new StringBuilder();
        tokenAddress.append(tokenA.substring(2, tokenA.length()));
        tokenAddress.append(tokenB.substring(2, tokenB.length()));
        String tokenHash = Hash.sha3("0x" + tokenAddress.toString());
        
        StringBuilder msg = new StringBuilder();
        msg.append(Hex.toHexString(parff.getValue()));
        msg.append(factory.substring(2, factory.length()));
        msg.append(Numeric.cleanHexPrefix(tokenHash));
        msg.append(Hex.toHexString(parInitCodeHash.getValue()));
        String hash1 = Hash.sha3("0x" + msg.toString());
        BigInteger uintAddress = Numeric.toBigInt(hash1);
        DynamicArray<Uint256> array = new DynamicArray<>(Uint256.class, new Uint256(uintAddress));
        BigInteger uint256 = array.getValue().get(0).getValue();
        String s3 = Numeric.toHexString(uint256.toByteArray());
        String pairAddress = s3.substring(s3.length() - 40);
        return "0x" + pairAddress;
    }

    public static List<String> sortTokens(String tokenA, String tokenB) {
        Address address1 = new Address(tokenA);
        Address address2 = new Address(tokenB);
        BigInteger value1 = address1.toUint().getValue();
        BigInteger value2 = address2.toUint().getValue();
        List<String> result = new ArrayList<>();
        if (value1.compareTo(value2) < 0) {
            result.add(tokenA);
            result.add(tokenB);
        } else {
            result.add(tokenB);
            result.add(tokenA);
        }
        return result;
    }
}

console

交易对地址:0x25942771b17f3790bf32cae7af7d539ce42cdc79

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要对接Uniswap,您需要先了解Uniswap的API和智能合约。Uniswap是基于以太坊的去中心化交易所,它的智能合约能够实现交易和流动性提供者的奖励机制。 您可以通过以下步骤来对接Uniswap: 1. 安装web3j库:Web3j是一个Java库,用于与以太坊协议进行交互。您可以使用以下命令在Maven中添加Web3j依赖项: ``` <dependency> <groupId>org.web3j</groupId> <artifactId>core</artifactId> <version>4.1.0</version> </dependency> ``` 2. 连接以太坊网络:使用Web3j库,您可以连接到以太坊网络,并与智能合约进行交互。以下是连接到以太坊主网络的代码示例: ``` Web3j web3j = Web3j.build(new HttpService("https://mainnet.infura.io")); ``` 3. 加载Uniswap合约:使用Web3j库,您可以加载Uniswap智能合约并与其进行交互。以下是加载Uniswap合约的代码示例: ``` String contractAddress = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"; String privateKey = "your-private-key"; String infuraUrl = "https://mainnet.infura.io"; Credentials credentials = Credentials.create(privateKey); Web3j web3j = Web3j.build(new HttpService(infuraUrl)); Uniswap uniswap = Uniswap.load(contractAddress, web3j, credentials, new DefaultGasProvider()); ``` 4. 进行交易使用Uniswap智能合约对象,您可以执行Uniswap交易。以下是在Uniswap中进行ETH和DAI交易的代码示例: ``` String outputTokenAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"; // DAI token address BigInteger inputAmount = Convert.toWei("1", Convert.Unit.ETHER).toBigInteger(); BigInteger minOutputAmount = BigInteger.ZERO; TransactionReceipt txReceipt = uniswap.swapETHForExactTokens( outputAmount, new Address[]{new Address(outputTokenAddress)}, credentials.getAddress(), BigInteger.valueOf(System.currentTimeMillis() + 1000 * 60 * 10), minOutputAmount).send(); ``` 这是一个基本的Java代码示例,用于与Uniswap进行交互。请注意,您需要在代码中提供Uniswap合约地址、私钥和以太坊网络地址。同时,您还需要了解Uniswap的API和智能合约,以了解如何正确执行交易
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值