Flutter插件pancake_sdk的安装与使用
Flutter插件pancake_sdk的安装与使用
简介
flutter_pancake_swap_sdk
是一个从两个著名的 Web 库(分别是 pancakeswap/sdk 和 Uniswap 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