Skip to content

Latest commit

 

History

History
49 lines (32 loc) · 2.26 KB

README.md

File metadata and controls

49 lines (32 loc) · 2.26 KB

Mina signer

This crate provides an API and framework for Mina signing. It follows the algorithm outlined in the Mina Signature Specification.

Signer interface

The mina_signer crate currently supports creating both legacy and an experimental kimchi signers.

  • [create_legacy] creates a legacy signer compatible with mainnet and testnet transaction signatures
  • [create_kimchi] creates an experimental kimchi signer

Here is an example of how to use the signer interface to sign and verify Mina transactions.

#[path = "../tests/transaction.rs"]
mod transaction;

use rand;
use mina_signer::{NetworkId, Keypair, PubKey, Signer};
use transaction::Transaction;

let keypair = Keypair::rand(&mut rand::rngs::OsRng).expect("failed to generate keypair");

let tx = Transaction::new_payment(
                keypair.public.clone(),
                PubKey::from_address("B62qicipYxyEHu7QjUqS7QvBipTs5CzgkYZZZkPoKVYBu6tnDUcE9Zt").expect("invalid receiver address"),
                1729000000000,
                2000000000,
                271828,
            );

let mut ctx = mina_signer::create_legacy::<Transaction>(NetworkId::TESTNET);
let sig = ctx.sign(&keypair, &tx);
assert!(ctx.verify(&sig, &keypair.public, &tx));

These examples use the test Transaction structure found in the ./tests directory. This is a complete reference implementation of the Mina payment and delegation transaction structures found on mainnet and testnet.

Note: In order to sign something it must be hashed. This framework allows you to define how types are hashed by implementing the Hashable trait-- see the mina_hasher documentation

For more details about the ``mina_signer`, please see rustdoc mina-signer documentation.

Tests

There is a standard set of signature tests in the ./tests directory.

These can be run with

cargo test --package mina-signer