starknet 0.17.0

Complete Starknet library in Rustâ„¢
Documentation
use starknet::{core::types::TypedData, macros::felt};

fn main() {
    let raw = r#"{
  "types": {
    "StarknetDomain": [
      { "name": "name", "type": "shortstring" },
      { "name": "version", "type": "shortstring" },
      { "name": "chainId", "type": "shortstring" },
      { "name": "revision", "type": "shortstring" }
    ],
    "Example Message": [
      { "name": "Name", "type": "string" },
      { "name": "Some Array", "type": "u128*" },
      { "name": "Some Object", "type": "My Object" }
    ],
    "My Object": [
      { "name": "Some Selector", "type": "selector" },
      { "name": "Some Contract Address", "type": "ContractAddress" }
    ]
  },
  "primaryType": "Example Message",
  "domain": {
    "name": "Starknet Example",
    "version": "1",
    "chainId": "SN_MAIN",
    "revision": "1"
  },
  "message": {
    "Name": "some name",
    "Some Array": [1, 2, 3, 4],
    "Some Object": {
      "Some Selector": "transfer",
      "Some Contract Address": "0x0123"
    }
  }
}"#;

    let typed_data = serde_json::from_str::<TypedData>(raw).unwrap();
    println!("SNIP-12 revision: {}", typed_data.revision());

    let message_hash = typed_data.message_hash(felt!("0x1234")).unwrap();
    println!("SNIP-12 hash: {message_hash:#064x}");

    println!(
        "Serialized typed message:\n{}",
        serde_json::to_string_pretty(&typed_data).unwrap()
    );
}