Flutter插件dartez的使用_Dartez 是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez 包含了构建 Tezos 应用所需的所有功能

发布于 1周前 作者 yibo5220 最后一次编辑是 5天前 来自 Flutter

Flutter插件dartez的使用_Dartez 是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez 包含了构建 Tezos 应用所需的所有功能

Dartez

Dartez Banner

Dartez 是一个用于在 Flutter 中构建去中心化应用的库,目前专注于 Tezos 平台。Dartez 包含了构建 Tezos 应用所需的所有功能。该包支持 tz1tz2 地址。

什么是Tezos?

Tezos 是一种自我治理的去中心化区块链,通过建立真正的数字共同体来实现自我管理。它支持形式验证技术,这是一种数学方法,可以证明管理交易的代码的正确性,并提高最敏感或具有财务权重的智能合约的安全性。

为什么要使用Dartez?

Dartez 提供了一组简单易用的功能,用于在 Flutter 中构建去中心化应用。它是围绕 Tezos RPC 构建的包装器,并且还提供了一系列辅助函数,帮助你构建应用。

开始使用

  1. 在你的 Flutter 项目目录中运行以下命令以添加包:

    flutter pub add dartez
    
  2. 在你的项目中导入包:

    import 'package:dartez/dartez.dart';
    
  3. 查看 示例代码 目录中的示例应用,了解如何使用 Dartez

  4. 访问 文档 获取更多使用指南。

社区支持

贡献

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

1 回复

更多关于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项目中集成和使用插件的一个示例。在实际项目中,请务必参考具体插件的官方文档和示例代码。

回到顶部