Flutter 插件tiki_trail的使用_TIKI Trail 是一个不可变、分布式的数据记录系统

Flutter 插件tiki_trail的使用_TIKI Trail 是一个不可变、分布式的数据记录系统

概述

Image Image

TIKI Trail 是一个不可变、分布式的数据记录系统。

设计灵感来源于传统的资产记录系统(如房产证、出生证明等),其中资产本身独立于记录保存系统。

传统系统通过纸质记录(仅一份原件)、物理签名和公证人来实现不可变性。新时代系统通常采用区块链技术来创建数字不可变性,从而降低成本、提高访问效率和最终确认时间。对于传统资产(如土地)而言,区块链的交易成本和写入时间已经足够高效。

然而,对于数据作为资产的情况,这并不足够。因此,需要专门的设计来应对海量记录的需求。这就是 TIKI Trail 的目标。

例如,TIKI Trail 在 iPhone 12 上的基准测试达到了每秒超过 25,000 笔交易。

TIKI Trail 设计利用了两层不可变性:第一层在数据层,第二层在存储层。记录通过区块链启发式的数据结构本地生成并进行数字签名。这使得写入速度快且无 gas 成本,因为记录是单方的——以零方数据为标准,设备创建数据的拥有者即为数据的所有者。

记录链随后备份到一个或多个托管的 WORM(一次写入,多次读取)存储库中。共享存储库既作为长期存储用于设备故障恢复,又作为一个索引,便于将记录轻松集成到后端服务中。

如果你希望了解更多关于设计的信息,请查看原始的白皮书:WHITEPAPER.md


如何使用

对于大多数应用,我们不建议直接使用此项目。相反,建议使用我们针对不同平台的专用库:

熟悉我们的全平台文档:我的TIKI文档,或者直接查阅 API 参考文档:pub.dev


要求

  • 发布ID:免费获取,请访问 console.mytiki.com
  • 平台特定的安全密钥存储实现
  • 平台特定的数据库实现,例如 CommonDatabase

记录类型

虽然此库理论上可以用于创建任何类型的记录,但我们简化并抽象了 API。当然,你可以自由地分叉并创建自己的记录类型。

  • TitleRecord:描述数据资产,并必须包含指向原始数据的指针记录(通常存储在你的系统中)。
  • LicenseRecord:描述数据资产的使用条款,并始终包含对相应 TitleRecord 的引用。
  • PayableRecord:描述根据 LicenseRecord 条款支付或应支付的款项。
  • ReceiptRecord:描述根据 PayableRecord 支付或部分支付的款项。

示例代码

以下是一个完整的示例代码,展示了如何使用 TIKI Trail 插件。

示例代码

/*
 * Copyright (c) TIKI Inc.
 * MIT license. See LICENSE file in root directory.
 */

import 'dart:io';

import 'package:example/in_mem_key_storage.dart'; // 自定义密钥存储实现
import 'package:sqlite3/common.dart'; // SQLite 数据库
import 'package:sqlite3/sqlite3.dart';
import 'package:tiki_idp/tiki_idp.dart'; // 身份验证
import 'package:tiki_trail/key.dart'; // 密钥管理
import 'package:tiki_trail/tiki_trail.dart'; // TIKI Trail 主包
import 'package:uuid/uuid.dart'; // UUID 工具

void main(List<String> arguments) async {
  // 初始化密钥存储和数据库
  InMemKeyStorage keyStorage = InMemKeyStorage(); // 内存中的密钥存储
  CommonDatabase database = sqlite3.openInMemory(); // 内存中的 SQLite 数据库

  // 创建唯一标识符
  String id = Uuid().v4(); // 设备唯一标识符
  String ptr = const Uuid().v4(); // 数据指针

  // 初始化身份验证
  TikiIdp idp = TikiIdp([], 'PUBLISHING_ID', keyStorage); // 使用发布 ID 和密钥存储

  // 初始化 TIKI Trail
  Key key = await TikiTrail.withId(id, idp); // 获取密钥
  TikiTrail tiki = await TikiTrail.init(
    'PUBLISHING_ID', // 发布 ID
    'com.mytiki.tiki_trail.example', // 包名
    idp, // 身份验证对象
    key, // 密钥
    database, // 数据库
  );

  // 创建 TitleRecord
  TitleRecord title = await tiki.title.create(ptr, tags: [TitleTag.userId()]);
  print("Title Record created with id ${title.id} for ptr: $ptr");

  // 创建 LicenseRecord
  LicenseRecord license = await tiki.license.create(
    title,
    [
      LicenseUse([LicenseUsecase.attribution()])
    ],
    'terms',
  );
  print(
    "License Record created with id ${license.id} for title: ${license.title.id}",
  );

  // 验证许可证
  tiki.guard(ptr, [LicenseUsecase.attribution()],
      onPass: () => print("There is a valid license for usecase attribution."));

  tiki.guard(ptr, [LicenseUsecase.support()],
      onFail: (cause) =>
          print("There is not a valid license for usecase support. Cause: $cause"));

  // 结束程序
  exit(0);
}

更多关于Flutter 插件tiki_trail的使用_TIKI Trail 是一个不可变、分布式的数据记录系统的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter 插件tiki_trail的使用_TIKI Trail 是一个不可变、分布式的数据记录系统的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


TikiTrail 是一个 Flutter 插件,但目前关于它的具体功能和用途并没有广泛的公开文档或详细的介绍。根据名称推测,TikiTrail 可能与某种追踪、路径记录、日志记录或用户行为分析相关。然而,具体的功能和用法需要查看插件的源代码、官方文档或示例来进一步确认。

可能的功能猜测

  1. 用户行为追踪:用于记录用户在应用中的行为路径,帮助开发者进行用户行为分析。
  2. 路径记录:可能用于记录用户在应用中的导航路径或页面访问顺序。
  3. 日志记录:可能是一个轻量级的日志记录工具,用于调试或监控应用运行状态。
  4. 轨迹记录:可能与地理位置的轨迹记录相关,比如记录用户的移动路径。

如何使用 TikiTrail 插件

由于 TikiTrail 的具体功能未知,以下是一个通用的 Flutter 插件使用步骤,供参考:

1. 添加依赖

pubspec.yaml 文件中添加 TikiTrail 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  tiki_trail: ^1.0.0  # 版本号根据实际情况填写

然后运行 flutter pub get 安装插件。

2. 导入插件

在 Dart 文件中导入 TikiTrail 插件:

import 'package:tiki_trail/tiki_trail.dart';

3. 初始化插件

根据插件的功能,可能需要在应用的启动时初始化插件:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await TikiTrail.initialize(); // 假设插件有初始化方法
  runApp(MyApp());
}

4. 使用插件功能

根据插件的具体功能,调用相应的方法。例如:

// 假设插件用于记录用户行为
TikiTrail.logEvent('user_login', {'user_id': '123'});

// 假设插件用于记录地理位置
TikiTrail.logLocation(37.7749, -122.4194);

5. 处理插件结果

根据插件的返回值或回调,处理相应的结果:

TikiTrail.getTrail().then((trail) {
  print('User trail: $trail');
});
回到顶部