1 个不稳定版本
0.1.0 | 2024年6月21日 |
---|
#4 in #eip-712
40KB
871 行
EIP-712 Rust实用工具
概述
eip_712_utils
包是提供EIP-712消息签名的实用工具的Rust库。这个库旨在简单创建、签名和验证EIP-712结构化数据,尤其是用于NFT(非同质化代币)。
功能
- 生成符合EIP-712的结构化数据
- 按照EIP-712规范哈希结构化数据
- 签名EIP-712结构化数据
安装
cargo添加 eip_712_utils
使用
生成和签名结构化数据
#[cfg(test)]
mod tests {
use rustc_hex::ToHex;
use serde_json::json;
use super::*;
#[test]
fn generate_hash_and_sign_it() {
let name = "AionRisingNFTs";
let version = "0.0.1";
let chain_id = "0x7A69";
let verifying_contract = "0x037eDa3aDB1198021A9b2e88C22B464fD38db3f3";
let token_id = "0x1";
let amount = "0x1";
let to = "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496";
let nonce = "0x1";
let custom_fields = vec![
FieldType {
name: "tokenId".to_string(),
type_: "uint256".to_string(),
},
FieldType {
name: "amount".to_string(),
type_: "uint256".to_string(),
},
FieldType {
name: "to".to_string(),
type_: "address".to_string(),
},
FieldType {
name: "nonce".to_string(),
type_: "uint256".to_string(),
},
];
let data: EIP712 = EIP712::builder()
.domain(name, version, chain_id, verifying_contract)
.custom_field(("NFTData".to_string(), custom_fields))
.message(json!({
"tokenId": token_id,
"amount": amount,
"to": to,
"nonce": nonce
}))
.build();
let hashed_structured_data = hash_structured_data(data).unwrap().to_hex::<String>();
let private_key = 659918_u32;
let signature = sign_message(&hashed_structured_data, private_key);
let expected_signature = "b9c658f86d985ad0502584c70ea520cf68523e4013786f83f216de093ef9467e453d27fe627278ab0c8425906843a706f66a9c3120b37e88ac722aa217a04fcf1b";
assert_eq!(signature, expected_signature);
}
}
API参考
模块
eip712
此模块提供了EIP-712编码和哈希的核心功能。
-
EIP712
- 表示EIP-712结构化数据。
- 方法
builder() -> EIP712Builder
:返回一个新的EIP712构建器。domain(name, version, chain_id, verifying_contract)
:设置域参数。custom_field((field_name, fields))
:向EIP-712结构添加自定义字段。在这里您可以使用您特定的NFT数据。需要注意的是,此字段将用作哈希数据的根节点。如果没有提供,则使用的根节点将是EIP712Domain
。message(message)
:设置消息数据。最简单的方法是使用json!
从serde
,如示例所示。build() -> EIP712
:构建EIP-712结构化数据。
-
EIP712Domain
- 表示EIP-712域。
- 字段:
name
、version
、chain_id
、verifying_contract
。
-
字段类型
- 表示EIP-712结构中的字段类型。
- 字段:
name
,type_
。
-
消息类型
- 表示EIP-712结构中的消息类型。
-
hash_structured_data(data: EIP712) -> Result<H256, Error>
- 对EIP-712结构化数据进行哈希处理。
- 参数:
data
- EIP-712结构化数据。 - 返回:结构化数据的哈希值。
nft_helpers
此模块包含专门用于NFT相关操作的辅助函数。
- hash_structured_data_string(data: String) -> Result<H256, Error>
- 对作为JSON字符串提供的EIP-712结构化数据进行哈希处理。
- 参数:
data
- 表示EIP-712结构化数据的JSON字符串。 - 返回:结构化数据的哈希值。
签名
此模块提供用于签名EIP-712消息的工具。
- sign_message(message: &Message, private_key: &SecretKey) -> Signature
- 签名给定的EIP-712消息。
- 参数:
message
- 要签名的EIP-712消息,private_key
- 用于签名的私钥。 - 返回:消息的签名。
运行测试
使用以下命令运行测试
cargo test
贡献
欢迎贡献!请打开GitHub上的问题或提交pull请求。
许可证
本项目受MIT许可证的许可。
依赖
~15MB
~249K SLoC