#record #macro-derive #traits #data #blockchain #applications #blockify

record_derive

为 blockify::Record 特性提供 derive 宏

7 个版本

0.2.6 2023 年 6 月 1 日
0.2.5 2023 年 6 月 1 日
0.2.3 2023 年 5 月 30 日
0.2.2 2023 年 4 月 27 日
0.1.0 2023 年 4 月 25 日

#141 in #record


用于 blockify

MIT 许可证

4KB
53

BLOCKIFY

Rayon crate Rayon documentation

BLOCKIFY 是一个 Rust 区块链库,它提供了构建完整区块链应用程序或平台的构建块,让您可以专注于应用程序的高级功能,无需担心 块验证数据序列化区块链技术加密操作 的底层细节。

实用功能

  • 生成加密密钥对
  • 使用加密密钥签名数据
  • 将数据序列化为字节
  • 哈希不同类型的数据
  • 构建区块链
  • 将块部署到区块链中
  • 构建完整区块链应用程序的架构

使用方法

  • 示例
    use blockify::{
    block::{LocalInstance, UnchainedInstance, Block},
    data::Metadata,
    record::{Record, SignedRecord}, SqliteChain, chain::Chain,
    };
    use serde::{Deserialize, Serialize};

    // Deriving `Record` does the magic 
    #[derive(Clone, Serialize, Deserialize, Record, Debug, PartialEq)]
    pub struct MarriageContract {
        bride_name: String,
        groom_name: String,
    }

    impl MarriageContract {
        pub fn new(bride_name: &str, groom_name: &str) -> Self {
            let (bride_name, groom_name) = (bride_name.to_owned(), groom_name.to_owned());
            Self {
                bride_name,
                groom_name,
            }
        }

        pub fn generate() -> Self {
            Self {
                bride_name: "Julian".to_owned(),
                groom_name: "Jolie".to_owned(),
            }
        }

        pub fn generate_records(amount: usize) -> Vec<SignedRecord<Self>> {
            let mut res = Vec::with_capacity(amount);
            (0..amount).for_each(|_| {
                match Self::generate().record(blockify::generate_ed25519_key_pair(), Default::default())
                {
                    Ok(v) => res.push(v),
                    Err(_) => unreachable!("Error occurs"),
                }
            });
            res
        }

    }
  • 创建 RecordsSignedRecords
    let contract = MarriageContract::new("John", "Julie");
    let keypair = blockify::generate_ed25519_keypair();
    let signature = contract.sign(&keypair).unwrap();
    let hash = contract.hash();
    let record = contract.record(keypair, Metadata::empty()).unwrap();

    assert_eq!(&hash, record.hash());
    assert_eq!(&signature, record.signature());
    assert!(record.verify().is_ok());
  • 组装 Block
    let mut pool = LocalInstance::new(Metadata::empty(), 0);
    let all_records = MarriageContract::generate_records(10);
    all_records.clone().into_iter().for_each(|record| pool.append(record).unwrap());
  • SqliteBlockSqliteChain
    let chain_url = "target2/tests/marriagecontractchain/";
    std::fs::create_dir_all(chain_url).expect("could initialize directories");
    
    let mut chain = SqliteChain::new(chain_url).unwrap();
    let position = chain.append(&pool).expect("Error appending to SqliteChain");
    let block = position.block(&chain).expect("Error getting block by position");

    assert_eq!(&all_records, &*block.records().expect("Error retrieving records from block"));

贡献

欢迎所有形式的贡献。

依赖关系

许可证

MIT


lib.rs:

Record - record_derive

blockify 的 blockify::record::Record 的 derive 宏

推导 Record 的类型必须实现 Serialize + Deserialize

用法

use blockify::record::Record;
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize, Record)]
pub struct MarriageContract {
  bride: String,
  groom: String,
}

#[derive(Serialize, Deserialize, Record)]
pub struct Detail<T> {
  val: T
}

依赖项

~285–740KB
~18K SLoC