Flutter插件dart_kzg_4844_util的介绍与使用
Flutter插件dart_kzg_4844_util的介绍与使用
dart_kzg_4844_util
是一个针对以太坊改进提案(EIP)4844的Dart实现。该插件主要用于生成和验证与Blob相关的承诺和证明。在本示例中,我们将展示如何使用 dart_kzg_4844_util
插件来生成和显示这些数据。
示例代码
import 'package:convert/convert.dart';
import 'package:dart_kzg_4844_util/dart_kzg_4844_util.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
BlobTxSidecar? sidecar;
BlobTxSidecar? blob20Sidecar;
KzgSetting? kzgSetting;
@override
void initState() {
_kzgTest();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: Column(
children: [
if (sidecar != null) sidecarView(),
if (blob20Sidecar != null) blob20SidecarView(),
],
)),
);
}
void _kzgTest() async {
await DartKzg4844Util.init();
await loadSetting();
_generateCommitmentAndProof();
_blob20CommitmentAndProof();
}
Future<void> loadSetting() async {
kzgSetting = await KzgSetting.loadFromFile('assets/trusted_setup.json');
}
Widget sidecarView() {
return Column(
mainAxisSize: MainAxisSize.min,
children: List.generate(sidecar!.blobs.length, (index) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"commitment = ${hex.encode(sidecar!.commitments[index].commitment)}"),
Text("proof = ${hex.encode(sidecar!.proofs[index].proof)}"),
Text("hash = ${hex.encode(sidecar!.blobHashes()[index])}"),
const Divider(),
],
);
}).toList(),
);
}
Widget blob20SidecarView() {
return Column(
mainAxisSize: MainAxisSize.min,
children: List.generate(blob20Sidecar!.blobs.length, (index) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"commitment = ${hex.encode(blob20Sidecar!.commitments[index].commitment)}"),
Text("proof = ${hex.encode(blob20Sidecar!.proofs[index].proof)}"),
Text("hash = ${hex.encode(blob20Sidecar!.blobHashes()[index])}"),
const Divider(),
],
);
}).toList(),
);
}
void _generateCommitmentAndProof() async {
final blobs = <Blob>[];
final commitments = <KzgCommitment>[];
final proofs = <KzgProof>[];
/// blob1
// blobs.add(await Blob.randBlob());
/// commitments hash with Blob contain all 0
/// 010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014
/// blob2
blobs.add(Blob.zeroBlob()); // 全0
for (var b in blobs) {
final commit = await Kzg4844.kzgBlobToCommitment(b, kzgSetting!);
commitments.add(commit);
final p = await Kzg4844.kzgComputeBlobKzgProof(b, commit, kzgSetting!);
proofs.add(p);
}
sidecar = BlobTxSidecar(
blobs: blobs,
commitments: commitments,
proofs: proofs,
);
setState(() {});
}
void _blob20CommitmentAndProof() async {
// https://etherscan.io/blob/0x01fc0a717777b0e983ce71eecae52ae24bdfd06459801ba5c20692ef11ca75c9?bid=706618
const mintBlob20 =
'{"protocol":"blob20","token":{"operation":"mint","ticker":"ETHS","amount":1000}}';
final cborData = cborEncodeApplicationJson(mintBlob20);
final blobs = cborDataToESIP8Blobs(cborData);
final commitments = <KzgCommitment>[];
final proofs = <KzgProof>[];
for (var b in blobs) {
final commit = await Kzg4844.kzgBlobToCommitment(b, kzgSetting!);
commitments.add(commit);
final p = await Kzg4844.kzgComputeBlobKzgProof(b, commit, kzgSetting!);
proofs.add(p);
}
blob20Sidecar = BlobTxSidecar(
blobs: blobs,
commitments: commitments,
proofs: proofs,
);
setState(() {});
}
}
解释
-
初始化设置
await DartKzg4844Util.init(); await loadSetting();
初始化插件并加载设置文件
trusted_setup.json
。 -
生成承诺和证明
void _generateCommitmentAndProof() async { final blobs = <Blob>[]; final commitments = <KzgCommitment>[]; final proofs = <KzgProof>[]; blobs.add(Blob.zeroBlob()); // 创建全0的Blob for (var b in blobs) { final commit = await Kzg4844.kzgBlobToCommitment(b, kzgSetting!); commitments.add(commit); final p = await Kzg4844.kzgComputeBlobKzgProof(b, commit, kzgSetting!); proofs.add(p); } sidecar = BlobTxSidecar( blobs: blobs, commitments: commitments, proofs: proofs, ); setState(() {}); }
-
处理Blob20
void _blob20CommitmentAndProof() async { const mintBlob20 = '{"protocol":"blob20","token":{"operation":"mint","ticker":"ETHS","amount":1000}}'; final cborData = cborEncodeApplicationJson(mintBlob20); final blobs = cborDataToESIP8Blobs(cborData); final commitments = <KzgCommitment>[]; final proofs = <KzgProof>[]; for (var b in blobs) { final commit = await Kzg4844.kzgBlobToCommitment(b, kzgSetting!); commitments.add(commit); final p = await Kzg4844.kzgComputeBlobKzgProof(b, commit, kzgSetting!); proofs.add(p); } blob20Sidecar = BlobTxSidecar( blobs: blobs, commitments: commitments, proofs: proofs, ); setState(() {}); }
更多关于Flutter插件dart_kzg_4844_util的介绍与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter插件dart_kzg_4844_util的介绍与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dart_kzg_4844_util
是一个 Flutter/Dart 插件,主要用于与 KZG(Kate-Zaverucha-Goldberg)承诺方案相关的操作。KZG 承诺方案是一种在零知识证明(ZKP)和区块链技术中广泛使用的多项式承诺方案,特别是在以太坊 2.0 的扩容解决方案中(如 Rollups)有重要应用。
潜在使用场景
-
区块链和 Rollups:
- 以太坊 2.0: KZG 承诺方案用于以太坊 2.0 的数据可用性采样(DAS)和 Rollups(如 Optimistic Rollups 和 ZK-Rollups)中,以确保数据的可用性和完整性。
- Layer 2 解决方案: 在 Layer 2 扩容解决方案中,KZG 承诺方案用于生成和验证证明,确保链下数据的正确性。
-
零知识证明 (ZKP):
- 隐私保护: KZG 承诺方案可以用于构建零知识证明系统,确保在不泄露原始数据的情况下验证某些属性。
- 可验证计算: 在可验证计算中,KZG 承诺方案用于验证计算的正确性,而无需重新执行整个计算。
-
分布式存储:
- 数据完整性验证: KZG 承诺方案可以用于分布式存储系统中,确保存储的数据在传输和存储过程中没有被篡改。
-
密码学协议:
- 多方计算 (MPC): KZG 承诺方案可以用于多方计算协议中,确保各方在计算过程中提交的数据是正确和一致的。
- 门限签名: 在门限签名方案中,KZG 承诺方案可以用于验证签名的正确性。
主要功能
-
多项式承诺:
- 生成承诺: 对多项式生成 KZG 承诺。
- 验证承诺: 验证给定的承诺是否对应于某个多项式。
-
证明生成和验证:
- 生成证明: 生成证明某个多项式在某个点的值是正确的。
- 验证证明: 验证给定的证明是否正确。
-
批量操作:
- 批量承诺: 对多个多项式生成批量承诺。
- 批量验证: 批量验证多个承诺和证明。
示例代码
以下是一个简单的示例,展示如何使用 dart_kzg_4844_util
插件进行多项式承诺和验证:
import 'package:dart_kzg_4844_util/dart_kzg_4844_util.dart';
void main() {
// 初始化 KZG 上下文
KZGContext context = KZGContext.init();
// 定义一个多项式 (例如: f(x) = 3x^2 + 2x + 1)
List<int> coefficients = [1, 2, 3];
// 生成多项式承诺
KZGCommitment commitment = context.commitToPolynomial(coefficients);
// 生成在某个点的证明 (例如: x = 2)
int point = 2;
KZGProof proof = context.createProof(coefficients, point);
// 验证证明
bool isValid = context.verifyProof(commitment, proof, point);
print('Proof is valid: $isValid');
}