Flutter区块链交互插件kadena_dart_sdk的使用
Flutter区块链交互插件kadena_dart_sdk的使用
概述
这是一个用于与Kadena区块链进行交互的Dart SDK。
签名和快速签名用法
dApp用法
import 'package:kadena_dart_sdk/kadena_dart_sdk.dart';
// 创建一个签名API对象
ISigningApi signingApi = SigningApi();
// 创建一个签名或快速签名请求
SignRequest signRequest = SignRequest(
code: '"Hello"', // 这里应为有效的Pact命令字符串
data: {},
sender: 'sender',
networkId: 'testnet04',
chainId: '1',
gasLimit: 1000,
gasPrice: 1e-5,
signingPubKey: 'pubKey',
ttl: 600,
caps: [
DappCapp(
role: 'Gas',
description: 'Gas Cap',
cap: Capability(
name: 'Gas',
args: [],
),
),
],
);
QuicksignRequest quicksignRequest = QuicksignRequest(
commandSigDatas: [
CommandSigData(
cmd: 'Hello, World!', // 这里应为有效的Pact命令字符串
sigs: [
QuicksignSigner(
pubKey: 'pubKey',
),
],
),
],
);
// 可以通过将其转换为JSON格式来传输该对象
final signRequestJson = signRequest.toJson();
final quicksignRequestJson = quicksignRequest.toJson();
钱包用法
import 'package:kadena_dart_sdk/kadena_dart_sdk.dart';
// 创建一个签名API对象
ISigningApi signingApi = SigningApi();
// 创建公钥/私钥对
final KadenaSignKeyPair kp = KadenaSignKeyPair(
publicKey: 'priv_key',
privateKey: 'pub_key',
);
// 获取从dApp接收到的签名/快速签名请求对象
final Map<String, dynamic> quicksignRequestJson = {
"commandSigDatas": [
{
"cmd": "Hello, World!", // 这里应为有效的Pact命令字符串
"sigs": [
{
"pubKey":
'8d48094ca84b475ece568c4b0d8aacfb1de3278b6bd16b33a60c068b86a2ba51',
}
]
}
]
};
final Map<String, dynamic> signRequestJson = {
"code": '"Hello"', // 这里应为有效的Pact命令字符串
"data": {},
"sender": "sender",
"networkId": "testnet04",
"chainId": "1",
"gasLimit": 1000,
"gasPrice": 1e-5,
"signingPubKey": '8d48094ca84b475ece568c4b0d8aacfb1de3278b6bd16b33a60c068b86a2ba51',
"ttl": 600,
"caps": [
{
"role": "Gas",
"description": "Gas Cap",
"cap": {
"name": "Gas",
"args": []
}
}
]
};
/// 签名请求流程 ///
// 1. 解析请求
final SignRequest signRequest = signingApi.parseSignRequest(
signRequestJson,
);
// 2. 使用请求构造一个PactCommandPayload
final PactCommandPayload pactCommandPayload = signingApi.constructPactCommandPayload(
request: signRequest,
);
// 3. 以某种方式(弹窗、底部面板等)获取用户的签名批准
final bool approval = true;
// 4. 签名交易
SignResult signResult;
if (approval) {
signResult = signingApi.sign(
request: signRequest,
keyPairs: kp,
);
} else {
signResult = SignResult(
error: SignRequestError(
msg: 'User declined to sign',
),
);
}
// 5. 将签名结果返回给dApp以JSON格式
final Map<String, dynamic> signResultJson = signResult.toJson();
/// 快速签名流程 ///
// 1. 解析请求
final QuicksignRequest quicksignRequest = signingApi.parseQuicksignRequest(
quicksignRequestJson,
);
// 2. 存储快速签名响应,并循环处理每个CommandSigData
final List<QuicksignResponse> quicksignResponseList = [];
for (final CommandSigData commandSigData in quicksignRequest.commandSigDatas) {
// 3. 以某种方式(弹窗、底部面板等)获取用户的签名批准
var approval = true;
// 4. 根据批准情况,签名交易或添加noSig快速签名结果
if (approval) {
final QuicksignResult quicksignResult = signingApi.quicksignSingleCommand(
commandSigData: commandSigData,
keyPairs: kp,
);
quicksignResponseList.add(quicksignResult);
} else {
quicksignResponseList.add(
QuicksignResponse(
commandSigData: commandSigData,
outcome: QuicksignOutcome(
result: QuicksignOutcome.noSig,
),
),
);
}
}
// 5. 返回快速签名结果给dApp以JSON格式
final QuicksignResult quicksignResult = QuicksignResult(
responses: quicksignResponseList,
).toJson();
实现
ISigningApi
是一个接口,这样可以轻松地对其进行模拟,并且可以创建未来的版本,这些版本可以轻松替换当前实现。
此库旨在使dApp构建请求和钱包签名变得简单。
测试
要运行测试:
flutter test
测试验证了描述在KIP中的功能。然而,KIP尚未合并,未最终确定,且可能发生变化。
待办事项
- 构建签名API的签名部分
- 与示例dApp一起构建集成测试以证明功能
常见命令
重建生成的代码:
flutter pub run build_runner build --delete-conflicting-outputs
更多关于Flutter区块链交互插件kadena_dart_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter区块链交互插件kadena_dart_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成并使用kadena_dart_sdk
与Kadena区块链进行交互的示例代码。这个示例将展示如何初始化SDK、连接到Kadena网络、查询区块链信息以及发送交易。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加kadena_dart_sdk
的依赖。
dependencies:
flutter:
sdk: flutter
kadena_dart_sdk: ^最新版本号 # 替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
2. 初始化SDK
在你的Flutter项目的Dart文件中(例如main.dart
),你需要初始化kadena_dart_sdk
。
import 'package:flutter/material.dart';
import 'package:kadena_dart_sdk/kadena_dart_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Kadena Blockchain Interaction'),
),
body: KadenaInteraction(),
),
);
}
}
class KadenaInteraction extends StatefulWidget {
@override
_KadenaInteractionState createState() => _KadenaInteractionState();
}
class _KadenaInteractionState extends State<KadenaInteraction> {
late KadenaClient kadenaClient;
@override
void initState() {
super.initState();
// 初始化KadenaClient
kadenaClient = KadenaClient(
network: KadenaNetwork.MAINNET, // 或者 KadenaNetwork.TESTNET
privateKey: '你的私钥', // 请替换为你的私钥
);
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
ElevatedButton(
onPressed: () async {
// 查询区块信息
try {
BlockInfo blockInfo = await kadenaClient.getBlockInfo(1);
print('Block Info: ${blockInfo.toJson()}');
} catch (e) {
print('Error fetching block info: $e');
}
},
child: Text('Get Block Info'),
),
ElevatedButton(
onPressed: () async {
// 发送交易(示例:转账)
try {
TransactionReceipt receipt = await kadenaClient.sendTransaction(
toAddress: '接收者地址', // 请替换为接收者的地址
amount: '10000000000', // PACT的微小单位,例如1 PACT = 10^10 单位
memo: '测试转账',
);
print('Transaction Receipt: ${receipt.toJson()}');
} catch (e) {
print('Error sending transaction: $e');
}
},
child: Text('Send Transaction'),
),
],
),
);
}
}
3. 注意事项
- 私钥安全:确保私钥的安全存储,不要在代码中硬编码私钥。
- 错误处理:实际开发中应添加更多的错误处理逻辑。
- 网络配置:根据实际需求选择主网或测试网。
- 依赖版本:确保使用
kadena_dart_sdk
的最新版本,并查看其文档以获取最新的API信息。
4. 运行项目
使用flutter run
命令运行你的Flutter项目,然后在应用界面中点击按钮进行区块信息查询和交易发送。
这个示例提供了一个基本的框架,你可以根据实际需求进行扩展和修改。