Flutter插件dartez的使用_Dartez 是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez 包含了构建 Tezos 应用所需的所有功能
Flutter插件dartez的使用_Dartez 是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez 包含了构建 Tezos 应用所需的所有功能
Dartez
Dartez
是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez
包含了构建 Tezos 应用所需的所有功能。该包支持 tz1
和 tz2
地址。
什么是Tezos?
Tezos 是一种自我治理的去中心化区块链,通过建立真正的数字共同体来实现自我管理。它支持形式验证技术,这是一种数学方法,可以证明管理交易的代码的正确性,并提高最敏感或具有财务权重的智能合约的安全性。
为什么要使用Dartez?
Dartez
提供了一组简单易用的功能,用于在 Flutter 中构建去中心化应用。它是围绕 Tezos RPC 构建的包装器,并且还提供了一系列辅助函数,帮助你构建应用。
开始使用
-
在你的 Flutter 项目目录中运行以下命令以添加包:
flutter pub add dartez
-
在你的项目中导入包:
import 'package:dartez/dartez.dart';
-
查看 示例代码 目录中的示例应用,了解如何使用
Dartez
。 -
访问 文档 获取更多使用指南。
社区支持
贡献
Dartez
是开源的,我们欢迎任何对技术充满热情的人士贡献。你可以写教程或博客文章,改进文档,提交错误报告或功能请求,或者编写代码。我们也非常欢迎 拉取请求。
功能请求和错误报告
在 问题跟踪器 中提交功能请求和错误报告。
安全审计
访问 安全审计 获取更多信息。
示例代码
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:dartez/dartez.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
tezosWalletUtil() async {
await Dartez().init();
var server = '';
// 获取余额。
String balance = await Dartez.getBalance('tz1c....ozGGs', 'your rpc server');
print("Account Balance ===>$balance");
// 生成助记词。
String mnemonic = Dartez.generateMnemonic(); // 默认强度为256位 -> 生成24个单词。
print("mnemonic ===>$mnemonic");
// mnemonic ===> 24个随机单词,如果改变了强度参数,单词数量会有所不同。
// 从助记词生成密钥。
KeyStoreModel keys = Dartez.getKeysFromMnemonic(
mnemonic: mnemonic,
);
print("keys ===>$keys");
// keys ===> [私钥, 公钥, 公钥哈希]
// 访问: 私钥 ===> keys[0] | 公钥 ===> keys[1] | 公钥哈希 ===> keys[2],均为字符串类型。
// 使用助记词和密码生成密钥。
KeyStoreModel identity = Dartez.getKeysFromMnemonic(
mnemonic: "cannon rabbit ..... plunge winter",
passphrase: "hIm*548j^faI",
);
print("identity ===>$identity");
// identityWithMnemonic ===> [私钥, 公钥, 公钥哈希]
// 访问: 私钥 ===> identity[0] | 公钥 ===> identity[1] | 公钥哈希 ===> identity[2],均为字符串类型。
// 显示账户
var keyStore = KeyStoreModel(
publicKeyHash: 'tz1U.....W5MHgi',
secretKey: 'edskRp......bL2B6g',
publicKey: 'edpktt.....U1gYJu2',
);
var signer = Dartez.createSigner(keyStore.secretKey!);
var result = await Dartez.sendKeyRevealOperation(server, signer, keyStore);
print('${result['operationGroupID']}');
// 激活筹款账户
var faucetKeyStore = KeyStoreModel(
publicKeyHash: 'tz1ga.....trZNA6A',
seed: [
"wife",
"filter",
"wage",
"thunder",
"forget",
"scale",
"punch",
"mammal",
"offer",
"car",
"cash",
"defy",
"vehicle",
"romance",
"green"
],
secret: '',
email: '',
password: '',
);
var unloackedIdentityKeys = await Dartez.unlockFundraiserIdentity(
passphrase: faucetKeyStore.password ?? '',
mnemonic: faucetKeyStore.seed.join(' '));
faucetKeyStore = unloackedIdentityKeys;
var activationOperationSigner =
Dartez.createSigner(faucetKeyStore.secretKey!);
var activationOperationResult =
await Dartez.sendIdentityActivationOperation(
server,
activationOperationSigner,
faucetKeyStore,
faucetKeyStore.secret ?? '');
print('${activationOperationResult['operationGroupID']}');
// 解锁筹款身份。
KeyStoreModel identityFundraiser = await Dartez.unlockFundraiserIdentity(
mnemonic: "cannon rabbit ..... plunge winter",
passphrase: "5tj...imq",
);
print("identityFundraiser ===>$identityFundraiser");
// identityFundraiser ===> [私钥, 公钥, 公钥哈希]
// 访问: 私钥 ===> identityFundraiser[0] | 公钥 ===> identityFundraiser[1] | 公钥哈希 ===> identityFundraiser[2],均为字符串类型。
// 从派生路径恢复身份
var derivationPath = 'your derivation path';
KeyStoreModel listkeyStore = await Dartez.restoreIdentityFromDerivationPath(
derivationPath, mnemonic);
// 从密钥获取密钥
var restoredKeys = Dartez.getKeysFromSecretKey("eds.....vdC");
print("Restored account keys ===>$restoredKeys");
// 委托账户。
server = '';
keyStore = KeyStoreModel(
publicKey: 'edp......rrj',
secretKey: 'eds.....yHH',
publicKeyHash: 'tz1.....hxy',
);
signer = Dartez.createSigner(keyStore.secretKey!);
result = await Dartez.sendDelegationOperation(
server,
signer,
keyStore,
'tz1.....Lnc',
);
print("Applied operation ===>$result['appliedOp']");
print("Operation groupID ===>$result['operationGroupID']");
// 签名操作组。
List<String> signOperationGroup = Dartez.signOperationGroup(
privateKey: "edskRdV..... .XezixvdA",
forgedOperation: "713cb068fe.... .b940ee");
print(signOperationGroup);
// signOperationGroup ===> [十六进制签名, 已签名的操作字节]
// 访问: 十六进制签名 ===> signOpGrp[0] | 已签名的操作字节 ===> signOpGrp[1],均为字符串类型。
// 转移余额。
server = '';
keyStore = KeyStoreModel(
publicKey: 'edp.....rrj',
secretKey: 'eds.....yHH',
publicKeyHash: 'tz1.....hxy',
);
signer = Dartez.createSigner(keyStore.secretKey!);
result = await Dartez.sendTransactionOperation(
server,
signer,
keyStore,
'tz1.....Lnc',
500000,
);
print("Applied operation ===>$result['appliedOp']");
print("Operation groupID ===>$result['operationGroupID']");
// 部署合约。
server = '';
var contract = """parameter string;
storage string;
code { DUP;
DIP { CDR ; NIL string ; SWAP ; CONS } ;
CAR ; CONS ;
CONCAT;
NIL operation; PAIR}""";
var storage = '"Sample"';
keyStore = KeyStoreModel(
publicKey: 'edp.....rrj',
secretKey: 'eds.....yHH',
publicKeyHash: 'tz1.....hxy',
);
signer = Dartez.createSigner(keyStore.secretKey!);
result = await Dartez.sendContractOriginationOperation(
server,
signer,
keyStore,
0,
'',
contract,
storage,
codeFormat: TezosParameterFormat.Michelson,
);
print("Operation groupID ===>$result['operationGroupID']");
// 调用合约。
server = '';
keyStore = KeyStoreModel(
publicKey: 'edp.....rrj',
secretKey: 'eds.....yHH',
publicKeyHash: 'tz1.....hxy',
);
signer = Dartez.createSigner(keyStore.secretKey!);
var contractAddress = ['KT1.....xMY'];
var resultInvoke = await Dartez.sendContractInvocationOperation(server,
signer, keyStore, contractAddress, [10000], [''], ["Cryptonomicon"],
codeFormat: TezosParameterFormat.Michelson);
print("Operation groupID ===>$result['operationGroupID']");
// 操作确认。
server = '';
var network = 'carthagenet';
var serverInfo = {'url': '', 'apiKey': '', 'network': network};
contract = """parameter string;
storage string;
code { DUP;
DIP { CDR ; NIL string ; SWAP ; CONS } ;
CAR ; CONS ;
CONCAT;
NIL operation; PAIR}""";
storage = '"Sample"';
keyStore = KeyStoreModel(
publicKey: 'edp....rrj',
secretKey: 'eds.....yHH',
publicKeyHash: 'tz1.....hxy',
);
signer = Dartez.createSigner(keyStore.secretKey!);
result = await Dartez.sendContractOriginationOperation(
server,
signer,
keyStore,
0,
'',
contract,
storage,
codeFormat: TezosParameterFormat.Michelson,
);
print("Operation groupID ===>$result['operationGroupID']");
var groupId = result['operationGroupID'];
var conseilResult = await Dartez.awaitOperationConfirmation(
serverInfo, network, groupId, 5);
print('Originated contract at ${conseilResult['originated_contracts']}');
// 发送交易操作
server = '';
keyStore = KeyStoreModel(
publicKeyHash: 'tz1U.....W5MHgi',
secretKey: 'edskRp......bL2B6g',
publicKey: 'edpktt.....U1gYJu2',
);
signer = Dartez.createSigner(keyStore.secretKey!);
var to = "tz1....VLdc";
var amount = (12.5 * 1000000).ceil(); // 发送12.5 tez
var transactionOperation = await Dartez.sendTransactionOperation(
server, signer, keyStore, to, amount);
// 预申请合约调用操作
server = '';
keyStore = KeyStoreModel(
publicKeyHash: 'tz1U.....W5MHgi',
secretKey: 'edskRp......bL2B6g',
publicKey: 'edpktt.....U1gYJu2',
);
signer = Dartez.createSigner(keyStore.secretKey!);
var contracts = ["KT1...fgH"];
var parameters = ["parameters"];
Map<String, dynamic> opPair =
await Dartez.preapplyContractInvocationOperation(
server, signer, keyStore, contracts, [0], ['transfer'], parameters);
// 注入操作
server = '';
keyStore = KeyStoreModel(
publicKeyHash: 'tz1U.....W5MHgi',
secretKey: 'edskRp......bL2B6g',
publicKey: 'edpktt.....U1gYJu2',
);
signer = Dartez.createSigner(keyStore.secretKey!);
contracts = ["KT1...fgH"];
parameters = ["parameters"];
opPair = await Dartez.preapplyContractInvocationOperation(
server, signer, keyStore, contracts, [0], ['transfer'], parameters);
var opHash = await Dartez.injectOperation(server, opPair);
// 获取操作状态
server = '';
opHash = '';
var status = Dartez.getOperationStatus(server, opHash);
// 发送合约调用操作
server = '';
keyStore = KeyStoreModel(
publicKeyHash: 'tz1U.....W5MHgi',
secretKey: 'edskRp......bL2B6g',
publicKey: 'edpktt.....U1gYJu2',
);
signer = Dartez.createSigner(keyStore.secretKey!);
contracts = ["KT1...fgH"];
parameters = ['parameters'];
var invocation = Dartez.sendContractInvocatoinOperation(
server, signer, keyStore, contracts, [0], ['transfer'], parameters);
// 签名有效载荷
signer = Dartez.createSigner('secretKey');
var payload = "03...";
String base58signature =
Dartez.signPayload(signer: signer, payload: payload);
// 编码大映射键
Uint8List key = Uint8List.fromList(
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);
var encodedKey = Dartez.encodeBigMapKey(key);
// 写打包数据
var value = "10";
var type = "int";
var packedData = Dartez.writePackedData(value, type);
// 获取大映射键的值
server = '';
var bigMapId = '0';
var stringKey = '';
var bigMapValue = Dartez.getValueForBigMapKey(server, bigMapId, stringKey);
// 规范化原始记录顺序
var data = 'MICHELINE_CODE';
var recordOrder = Dartez.normalizePrimitiveRecordOrder(data);
// 获取区块
server = '';
var block = await Dartez.getBlock(server);
// 编写地址
var address = 'tz1.....VLdc';
var writeAddress = Dartez.writeAddress(address);
// 获取合约存储
server = '';
var accountHash = 'tz1.....VLdc';
storage = Dartez.getContractStorage(server, accountHash);
}
[@override](/user/override)
void initState() {
super.initState();
tezosWalletUtil();
}
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Padding(
padding: EdgeInsets.all(8.0),
child: Center(
child: Text(
"欢迎使用Dartez包。\n 请检查调试控制台以查看输出",
textAlign: TextAlign.center,
),
),
),
),
);
}
}
更多关于Flutter插件dartez的使用_Dartez 是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez 包含了构建 Tezos 应用所需的所有功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件dartez的使用_Dartez 是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez 包含了构建 Tezos 应用所需的所有功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,了解并展示一个Flutter插件的使用通常涉及几个关键步骤:添加依赖、导入包、初始化插件以及调用插件提供的方法或功能。尽管dartez
的具体功能未定义,以下是一个假设性的示例代码,展示如何在一个Flutter项目中集成和使用一个假设的插件。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加dartez
依赖(请注意,由于这是一个假设的插件,实际中你需要替换为真实存在的插件名称和版本)。
dependencies:
flutter:
sdk: flutter
dartez: ^x.y.z # 假设的版本号
运行flutter pub get
来获取依赖。
2. 导入包
在你的Dart文件中(比如main.dart
),导入dartez
包。
import 'package:flutter/material.dart';
import 'package:dartez/dartez.dart'; // 假设的包导入路径
3. 初始化插件
根据插件的文档,可能需要初始化插件。这一步可能涉及创建插件的实例或者调用初始化方法。由于具体功能未知,这里我们假设有一个初始化方法。
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 假设的初始化步骤
Dartez.instance.initialize();
runApp(MyApp());
}
4. 使用插件功能
假设dartez
插件提供了一个名为performUnknownFunction
的方法,我们可以调用这个方法来实现“未知功能”。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Dartez Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 调用假设的插件方法
Dartez.instance.performUnknownFunction().then((result) {
// 处理结果
print('Result from unknown function: $result');
}).catchError((error) {
// 处理错误
print('Error performing unknown function: $error');
});
},
child: Text('Perform Unknown Function'),
),
),
),
);
}
}
注意事项
- 真实插件文档:上述代码是基于假设的,实际使用时,你应该参考
dartez
插件的真实文档来了解如何正确初始化和使用它。 - 错误处理:在实际应用中,添加适当的错误处理是非常重要的,以确保应用的稳定性和用户体验。
- 平台特定代码:如果插件包含平台特定代码(如iOS和Android),你可能需要在相应的原生代码文件中进行配置。
由于dartez
是一个假设的插件,上述代码仅作为展示如何在Flutter项目中集成和使用插件的一个示例。在实际项目中,请务必参考具体插件的官方文档和示例代码。