Flutter区块链数据访问插件blockfrost的使用

Flutter区块链数据访问插件blockfrost的使用

简介

此库用于通过BlockFrost服务节点访问Cardano区块链。BlockFrost允许轻量级客户端访问区块链,而无需运行资源密集型的本地Cardano节点。

此代码包可在pub.dev上找到:https://pub.dev/packages/blockfrost

警告: 此库是一个由Five Binaries为支持Flutter SDK而创建的最小化的非官方BlockFrost实现。

测试

要运行测试,您必须从https://blockfrost.io下载一个apiKey,并将其放在项目父目录中的文件中,文件名为:

blockfrost_project_id.txt

例如:

echo "your-project-id" > ../blockfrost_project_id.txt

MyApiKeyAuthInterceptor会在启动时读取密钥,并将其插入到REST头请求中。

final instance = Blockfrost(
  basePathOverride: testnet,
  interceptors: [MyApiKeyAuthInterceptor()],
);

生产环境

要在生产环境中使用此代码,只需将MyApiKeyAuthInterceptor替换为BlockfrostApiKeyAuthInterceptor,并传入您的project_id密钥构造函数:

BlockfrostApiKeyAuthInterceptor(projectId:'your-project-id')

以下是实现 - blockfrost_api_key_auth.dart:

import 'package:dio/dio.dart';
import 'package:blockfrost/src/auth/auth.dart';

class BlockfrostApiKeyAuthInterceptor extends AuthInterceptor {
  final String projectId;
  BlockfrostApiKeyAuthInterceptor({required this.projectId});

  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
    options.headers['project_id'] = projectId;
    super.onRequest(options, handler);
  }
}

使用

请参阅以下生成的文档和测试以获取示例用法。请注意,这是非常底层、特定于区块链的代码。如果您希望发送交易或处理智能合约,您需要更高层次的API。[https://pub.dev/packages/cardano_wallet_sdk](https://pub.dev/packages/cardano_wallet_sdk)(由同一作者编写)是一个很好的资源,可以演示如何使用此API构建更高级的服务。

状态

Five Binaries获得了Fund 6的10,000美元来实现官方的BlockFrost Dart绑定:

https://cardano.ideascale.com/c/idea/369239

源代码可以在以下位置找到:

https://github.com/blockfrost/blockfrost-dart/

当官方实现成熟时,本项目将被停止。

支持

这并不是官方的blockfrost包,因此请不要向BlockFrost报告与此代码相关的任何问题。

自动生成文档 - blockfrost (实验性)

Blockfrost是一个API服务,允许用户与Cardano区块链及其生态系统交互。

令牌

https://blockfrost.io注册后,每个项目会自动生成一个project_id令牌。 您的请求HTTP头必须包含此project_id以对Blockfrost服务器进行身份验证。

可用网络

目前,您可以使用以下网络。请注意,每个网络都有自己的project_id

网络 Endpoint
Cardano主网 https://cardano-mainnet.blockfrost.io/api/v0
Cardano测试网 https://cardano-testnet.blockfrost.io/api/v0
互连行星文件系统 https://ipfs.blockfrost.io/api/v0

概念

  • 所有端点返回JSON对象或数组。
  • 数据按升序(最旧的先,最新的最后)顺序返回。
    • 您可以使用?order=desc查询参数反转此顺序。
  • 默认情况下,我们一次返回100个结果。您必须使用?page=2来列出结果。
  • 所有时戳字段均以UNIX时间毫秒表示。
  • 所有金额均以Lovelace表示,其中1 ADA = 1,000,000 Lovelace。
  • 地址、账户和池ID均采用Bech32格式。
  • 所有值均为区分大小写。
  • 所有十六进制编码值均为小写。
  • 示例不基于真实数据。任何与实际事件的相似之处纯属巧合。
  • 我们允许上传最大100MB的文件到IPFS。未来可能会增加。

错误

HTTP状态码

您的应用程序在到达Blockfrost端点时可能会收到以下HTTP状态码,应处理所有这些情况。

  • HTTP 400 返回码用于无效的请求。
  • HTTP 402 返回码用于超出每日请求限制的项目。
  • HTTP 403 返回码用于未认证的请求。
  • HTTP 404 返回码用于不存在的资源。
  • HTTP 418 返回码用于用户因之前收到错误码402429而自动封禁。
  • HTTP 429 返回码用于用户在给定时间内发送过多请求而被限速。
  • HTTP 500 返回码用于我们的端点出现问题。
错误码

内部错误码用于更好地指示错误。它通过以下负载传递。

{
  "status_code": 403,
  "error": "Forbidden",
  "message": "Invalid project token."
}

限制

我们执行两种类型的限制:

  • 第一种取决于您的计划,是我们允许每天的请求数量。我们将一天定义为从UTC时间午夜到午夜。
  • 第二种是速率限制。我们根据IP地址限制终端用户每秒最多10个请求。在此基础上,我们允许每个用户发送一次500个请求的突发,冷却速度为每秒10个请求。本质上,用户可以在当前500/10 = 50秒后再次发送整个突发。例如,如果用户在突发后3秒尝试调用,则将处理30个请求。我们认为这应该足以满足大多数用例。如果不够并且您有特定的用例,请联系我们,我们会尽量考虑。

认证

此Dart包由OpenAPI Generator项目自动生成:

  • API版本:0.1.23
  • 构建包:org.openapitools.codegen.languages.DartDioNextClientCodegen 更多详细信息,请访问https://blockfrost.io

要求

  • Dart 2.12.0 或更高版本 OR Flutter 1.26.0 或更高版本
  • Dio 4.0.0+

安装与使用

pub.dev

要从pub.dev使用该包,请在pubspec.yaml中包括以下内容:

dependencies:
  blockfrost: 1.0.0

GitHub

如果此Dart包发布到GitHub,请在pubspec.yaml中包括以下内容:

dependencies:
  blockfrost:
    git:
      url: https://github.com/GIT_USER_ID/GIT_REPO_ID.git
      # ref: main

本地开发

要从本地驱动器使用该包,请在pubspec.yaml中包括以下内容:

dependencies:
  blockfrost:
    path: /path/to/blockfrost

入门

请遵循安装程序,然后运行以下代码:

import 'package:blockfrost/blockfrost.dart';

final api = CardanoAccountsApi();
final stakeAddress = 'stake1u9ylzsgxaa6xctf4juup682ar3juj85n8tx3hthnljg47zctvm3rc'; // String | Bech32 stake address.
final count = 56; // int | The number of results displayed on one page.
final page = 56; // int | The page number for listing the results.
final order = 'asc'; // String | The ordering of items from the point of view of the blockchain, not the page listing itself. By default, we return oldest first, newest last. 

try {
    final response = await api.accountsStakeAddressAddressesAssetsGet(stakeAddress, count, page, order);
    print(response);
} catch on DioError (e) {
    print("Exception when calling CardanoAccountsApi->accountsStakeAddressAddressesAssetsGet: $e\n");
}

更多关于Flutter区块链数据访问插件blockfrost的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter区块链数据访问插件blockfrost的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用Blockfrost插件来访问区块链数据的示例代码。Blockfrost是一个流行的API服务,用于访问Cardano区块链数据。我们将使用blockfrost_dart包,这是Blockfrost API的Dart客户端库,适用于Flutter应用。

首先,确保你已经在pubspec.yaml文件中添加了blockfrost_dart依赖:

dependencies:
  flutter:
    sdk: flutter
  blockfrost_dart: ^latest_version  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,我们可以创建一个Flutter服务类来处理Blockfrost API的调用。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:blockfrost_dart/blockfrost_dart.dart';

class BlockfrostService {
  final String projectId;
  BlockfrostApi? _api;

  BlockfrostService({required this.projectId}) {
    _api = BlockfrostApi(
      projectId: projectId,
      network: Network.MAINNET,  // 或者使用Network.TESTNET
    );
  }

  Future<List<String>> fetchEpochs() async {
    try {
      final epochs = await _api!.epochsGetLatest();
      return epochs!.map((e) => e.number!.toString()).toList();
    } catch (e) {
      print('Error fetching epochs: $e');
      return [];
    }
  }
}

在这个服务类中,我们创建了一个BlockfrostApi实例,并定义了一个方法来获取最新的几个epoch(区块组)。

现在,我们可以在Flutter应用中使用这个服务类来获取数据并显示它:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final BlockfrostService blockfrostService = BlockfrostService(
    projectId: 'YOUR_BLOCKFROST_PROJECT_ID',  // 请替换为你的Blockfrost项目ID
  );

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Blockfrost Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Blockfrost Data'),
        ),
        body: FutureBuilder<List<String>>(
          future: blockfrostService.fetchEpochs(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return Center(child: CircularProgressIndicator());
            } else if (snapshot.hasError) {
              return Center(child: Text('Error: ${snapshot.error!}'));
            } else {
              return ListView.builder(
                itemCount: snapshot.data!.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('Epoch ${snapshot.data![index]}'),
                  );
                },
              );
            }
          },
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个MyApp Flutter应用,并在其中使用了FutureBuilder来异步获取并显示最新的epoch列表。当数据正在加载时,会显示一个进度指示器;如果发生错误,会显示错误消息;否则,会显示epoch列表。

请确保将YOUR_BLOCKFROST_PROJECT_ID替换为你实际的Blockfrost项目ID。

这个示例展示了如何在Flutter应用中使用Blockfrost API来获取区块链数据。根据你的需求,你可以进一步扩展这个服务类来访问Blockfrost提供的其他API端点。

回到顶部