Flutter插件pancake_sdk的安装与使用

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 Flutter

Flutter插件pancake_sdk的安装与使用

简介

flutter_pancake_swap_sdk 是一个从两个著名的 Web 库(分别是 pancakeswap/sdkUniswap SDK v3 Overview)分叉出来的 Flutter 项目。该项目旨在将这些 Web 库适配到移动平台上,为用户提供 PancakeSwap 和 Uniswap 平台的功能。

安装

以下是将该 SDK 集成到 Flutter 项目的步骤:

# 使用 pubspec.yaml 添加依赖
dependencies:
  flutter_pancake_swap_sdk: ^1.0.0

运行 flutter pub get 来安装依赖。

使用

该 SDK 包含几个关键功能,如代币声明和价格估算。以下是一个简要概述:

代币声明

对于原生代币:

Token.WETH[ChainId]!

创建代币实例:

Token(chainId, address, decimal)

流动性池代币 (LP Pair Tokens)

获取流动性池代币地址:

Pair.getAddress(token1, token2)

价格估算

估算价格:

Trade.bestTradeExactIn(
  TokenAmount(tokenFrom, value.amountSwapFrom(decimalFrom)),
  tokenTo,
  maxHops
)

文档

该项目基于 PancakeSwap SDK 进行分叉。

有关更多详细信息,请参考 Uniswap SDK v3 Documentation

示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_pancake_swap_sdk 来获取交易信息并估算价格:

import 'package:flutter_pancake_swap_sdk/flutter_pancake_swap_sdk.dart';

// 定义一个函数来获取最佳交易
Trade? getTrade({
  required List<EthereumAddress> addressSwap,
  required int decimalFrom,
  required int decimalTo,
  required double value,
}) {
  Trade? bestTradeSoFar;

  // 声明代币
  Token tokenFrom = TokenSDK.Token(_buildConfig.chainId, addressSwap[0], decimalFrom);
  Token tokenTo = TokenSDK.Token(_buildConfig.chainId, addressSwap[1], decimalTo);

  // 如果代币是从 BNB 转换,则使用 WETH
  if (addressSwap[0].hex.toLowerCase().contains(_buildConfig.bnbContractAddress.toLowerCase())) {
    tokenFrom = TokenSDK.Token.WETH[ChainId.MAINNET.value]!;
  }

  if (addressSwap[1].hex.toLowerCase().contains(_buildConfig.bnbContractAddress.toLowerCase())) {
    tokenTo = TokenSDK.Token.WETH[ChainId.MAINNET.value]!;
  }

  // 遍历最大跳数以找到最佳交易
  for (int i = 1; i <= maxHops; i++) {
    var bestTrade = Trade.bestTradeExactIn(
      listPair,
      TokenAmount(tokenFrom, value.amountSwapFrom(decimalFrom)),
      tokenTo,
      maxHops: i,
    );

    if (bestTrade.isNotEmpty) {
      final currentTrade = bestTrade[0];
      final valueBool = isTradeBetter(
        bestTradeSoFar,
        currentTrade,
        minimumDelt: betterTradeLessHopsThreshold,
      );

      if (valueBool) {
        bestTradeSoFar = currentTrade;
      }
    }
  }

  // 返回最佳交易
  tradeInfor = bestTradeSoFar;
  return tradeInfor;
}

// 获取流动性池代币列表
Future<List<Pair>> getListPair(Token tokenA, Token tokenB) async {
  List<Pair> listPair = [];

  // 获取 A 的基础代币对
  final listPairA = getPairTokenABaseToken(tokenA);
  // 获取 B 的基础代币对
  final listPairB = getPairTokenBBaseToken(tokenB);

  try {
    // 获取稳定 LP 对
    final listStablePair = getStableLPPair(tokenA, tokenB);
    // 从 SDK 中获取所有 LP 对
    listPair = await _contractMultiCallRepository.getListPairFromSDK(
      addressLpToken: [
        ...listStablePair,
        ...listPairA,
        ...listPairB,
      ],
    );
  } catch (e) {
    Log.info('error get pair swap', e.toString());
  }

  return listPair;
}

更多关于Flutter插件pancake_sdk的安装与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!