use std::process::Command;
use std::thread;
use std::time;
use blake2::{Blake2b, Digest};
use std::{fs, io};
use std::path::Path;
use std::fmt::Write;
use std::fs::File;
use std::io::Write as wri;
fn main(){
let str1 = r#"{
"file_hash" : ""#;
let str2 = r#"",
"file_name" : "udplog.txt",
"file_author" : "luochensama"
}"#;
for _i in 0..10 {
// 自定义业务逻辑
let path = Path::new("/home/luochensama/udplog.txt");
let mut file = fs::File::open(&path).unwrap();
let mut hasher = Blake2b::new();
let n = io::copy(&mut file, &mut hasher).unwrap();
let hash = hasher.finalize();
let u8vec : [u8; 64]= hash.as_slice().try_into().expect("What?");
let mut str = String::new();
for i in u8vec.iter(){
write!(str, "{:02x}", i);
}
let fstr = str1.to_owned() + &str + str2;
let writepath = Path::new("/home/luochensama/evidence.txt");
let mut mfile = File::create(&writepath).unwrap();
mfile.write_all(fstr.as_bytes());
// 自定义命令行
let output = Command::new("xchain-cli")
.arg(r"transfer")
.arg(r"--to")
.arg(r"iDoLaraQyoLoubRwACtKYahBUs37SjEUw")
.arg(r"--amount")
.arg(r"1")
.arg(r"--keys")
.arg(r"/home/luochensama/xuperchain/output/data/luochen")
.arg(r"--desc")
.arg(r"/home/luochensama/evidence.txt")
.output().unwrap_or_else(|e| {
panic!("failed to execute process: {}", e)
});
if output.status.success() {
let s = String::from_utf8_lossy(&output.stdout);
print!("upload succeeded and message was:\n{}", s);
} else {
let s = String::from_utf8_lossy(&output.stderr);
print!("rustc failed and stderr was:\n{}", s);
}
thread::sleep(time::Duration::new(5,0));
}
}
Xuperchain
xuperchain的安装和配置
环境配置
确保安装且配置了gcc和go的环境变量后再进行下面的操作.
构建
编译
单机版xchain创建
xuperchain单机模拟存证过程
在确保进行了上面的单机版xchain创建后执行以下步骤。
创建一个能够接受交易的中心化账户
创建一个普通用户
用户购买存证次数
购买的本质是将货币(如RMB)转化为区块链余额。
准备一个需要上传的文件并且根据加密算法得到文件哈希值
上传存证
Rust代替命令行进行操作
环境配置
Rust
按照官方文档中的教程安装好Rust环境并且安装Clion IDE后进行下列步骤。
首先把xuperchain的工具加入到Linux环境中,以Ubuntu为例:
将xuperchain的工具添加到Clion运行环境中:点击run->edit configurations,添加xupchain的工具到Environment variables中
此外还需要将output目录下的
conf
文件夹放到Rust Project下。在某些业务逻辑中,可能需要服务器自动定时地进行存证的过程,Rust能够便捷的实现这个过程。
Sample
现在有这样一个业务环境:硬件设备会采集实时的温湿度数据,并且将这些数据定时的上传到我们的区块链上。
采集数据的源码:
上述程序将采集到的数据存储到
udplog.txt
中,接下来将这个文件定时存证。上传数据的源码:
如此一来我们就成功的实现了自动存证的功能。