Flutter以太坊签名工具插件eth_sig_util_raw的使用

Flutter以太坊签名工具插件eth_sig_util_raw的使用

eth_sig_util_raw 是一个用于在 Flutter 应用程序中进行以太坊签名操作的工具库。它提供了多种功能,包括对不同类型消息的签名以及从签名中恢复公钥地址。

功能

  • 签名类型化消息(遵循EIP712标准)
  • 签名个人类型化消息(遵循EIP712标准)
  • 签名消息
  • 签名个人消息
  • 从签名中恢复公共地址(personal_ecRecover)

使用

安装插件

首先,在你的 pubspec.yaml 文件中添加 eth_sig_util_raw 依赖:

dependencies:
  eth_sig_util_raw: ^1.0.0

然后运行 flutter pub get 命令来安装依赖。

示例代码

以下是一些基本的使用示例:

签名类型化消息

import 'package:eth_sig_util/eth_sig_util.dart';
import 'package:eth_sig_util/src/models.dart'; // 引入必要的模型

void signTypedData() {
  String privateKey = '4af...bb0'; // 你的私钥
  var jsonData = {
    "types": {
      "EIP712Domain": [
        {"name": "name", "type": "string"},
        {"name": "version", "type": "string"},
        {"name": "chainId", "type": "uint256"},
        {"name": "verifyingContract", "type": "address"}
      ],
      "Person": [
        {"name": "name", "type": "string"},
        {"name": "wallet", "type": "address"}
      ],
      "Mail": [
        {"name": "from", "type": "Person"},
        {"name": "to", "type": "Person"},
        {"name": "contents", "type": "string"}
      ]
    },
    "primaryType": "Mail",
    "domain": {
      "name": "Ether Mail",
      "version": "1",
      "chainId": 1,
      "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
    },
    "message": {
      "from": {
        "name": "Cow",
        "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
      },
      "to": {
        "name": "Bob",
        "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
      },
      "contents": "Hello, Bob!"
    }
  };

  String signature = EthSigUtil.signTypedData(
    privateKey: privateKey,
    jsonData: jsonData,
    version: TypedDataVersion.V4
  );

  print('签名结果: $signature');
}

签名个人类型化消息

void signPersonalTypedData() {
  String privateKey = '4af...bb0'; // 你的私钥
  var jsonData = {
    // 同上
  };

  String signature = EthSigUtil.signPersonalTypedData(
    privateKey: privateKey,
    jsonData: jsonData,
    version: TypedDataVersion.V4
  );

  print('签名结果: $signature');
}

签名消息

void signMessage() {
  String privateKey = '4af...bb0'; // 你的私钥
  List<int> message = [1, 2, 3]; // 你想要签名的消息

  String signature = EthSigUtil.signMessage(
    privateKey: privateKey,
    message: message
  );

  print('签名结果: $signature');
}

签名个人消息

void signPersonalMessage() {
  String privateKey = '4af...bb0'; // 你的私钥
  String message = "Hello, World!"; // 你想要签名的消息

  String signature = EthSigUtil.signPersonalMessage(
    privateKey: privateKey,
    message: message
  );

  print('签名结果: $signature');
}

从签名中恢复公共地址

void recoverAddressFromSignature() {
  String signature = '0x84ea3...'; // 你的签名
  String message = "Hello, World!"; // 你签名的消息

  String address = EthSigUtil.recoverSignature(
    signature: signature,
    message: message
  );

  print('恢复的地址: $address');
}

更多关于Flutter以太坊签名工具插件eth_sig_util_raw的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter以太坊签名工具插件eth_sig_util_raw的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


eth_sig_util_raw 是一个用于在 Flutter 应用中处理以太坊签名的插件。它提供了一些实用函数来生成和验证以太坊签名,特别是与 EIP-712 相关的签名。以下是如何在 Flutter 项目中使用 eth_sig_util_raw 的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 eth_sig_util_raw 依赖:

dependencies:
  flutter:
    sdk: flutter
  eth_sig_util_raw: ^1.0.0

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 eth_sig_util_raw 包:

import 'package:eth_sig_util_raw/eth_sig_util_raw.dart';

3. 使用 eth_sig_util_raw 进行签名

eth_sig_util_raw 提供了一些常用的函数来处理以太坊签名。以下是一些常见的使用场景:

3.1 签名消息

你可以使用 EthSigUtil.signMessage 来签名一条消息:

String privateKey = 'your-private-key';
String message = 'Hello, Ethereum!';

String signature = EthSigUtil.signMessage(
  privateKey: privateKey,
  message: message,
);

print('Signature: $signature');

3.2 验证签名

你可以使用 EthSigUtil.recoverPersonalSignature 来验证签名并恢复签名者的地址:

String signature = 'your-signature';
String message = 'Hello, Ethereum!';

String recoveredAddress = EthSigUtil.recoverPersonalSignature(
  signature: signature,
  message: message,
);

print('Recovered Address: $recoveredAddress');

3.3 EIP-712 签名

eth_sig_util_raw 还支持 EIP-712 类型的签名。你可以使用 EthSigUtil.signTypedData 来生成 EIP-712 签名:

String privateKey = 'your-private-key';

Map<String, dynamic> typedData = {
  'types': {
    'EIP712Domain': [
      {'name': 'name', 'type': 'string'},
      {'name': 'version', 'type': 'string'},
      {'name': 'chainId', 'type': 'uint256'},
      {'name': 'verifyingContract', 'type': 'address'},
    ],
    'Person': [
      {'name': 'name', 'type': 'string'},
      {'name': 'wallet', 'type': 'address'},
    ],
  },
  'primaryType': 'Person',
  'domain': {
    'name': 'Ether Mail',
    'version': '1',
    'chainId': 1,
    'verifyingContract': '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
  },
  'message': {
    'name': 'Bob',
    'wallet': '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
  },
};

String signature = EthSigUtil.signTypedData(
  privateKey: privateKey,
  data: typedData,
);

print('EIP-712 Signature: $signature');

3.4 恢复 EIP-712 签名

你可以使用 EthSigUtil.recoverTypedSignature 来恢复 EIP-712 签名的地址:

String signature = 'your-eip712-signature';

Map<String, dynamic> typedData = {
  'types': {
    'EIP712Domain': [
      {'name': 'name', 'type': 'string'},
      {'name': 'version', 'type': 'string'},
      {'name': 'chainId', 'type': 'uint256'},
      {'name': 'verifyingContract', 'type': 'address'},
    ],
    'Person': [
      {'name': 'name', 'type': 'string'},
      {'name': 'wallet', 'type': 'address'},
    ],
  },
  'primaryType': 'Person',
  'domain': {
    'name': 'Ether Mail',
    'version': '1',
    'chainId': 1,
    'verifyingContract': '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
  },
  'message': {
    'name': 'Bob',
    'wallet': '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
  },
};

String recoveredAddress = EthSigUtil.recoverTypedSignature(
  signature: signature,
  data: typedData,
);

print('Recovered Address: $recoveredAddress');
回到顶部