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
返回码用于用户因之前收到错误码402
或429
而自动封禁。 - 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
更多关于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端点。