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
更多关于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');