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