1 个稳定版本
1.0.0 | 2023年2月7日 |
---|
#30 in #event-log
用于 2 crate
67KB
1.5K SLoC
fvm-std
fvm-std 是一个 crate,为开发者提供编写 RUST 合约的基础工具,更加方便
1. 类型
这里提供了一些简单的类型,以帮助开发者更容易地编写合约。
H256
H256
是一个 32 长度的字节,用于表示区块哈希。有一些方法实现
fn as_ref(&self) -> &H256
pub const fn new(val: [u8; 32]) -> Self
pub fn to_hex_string(&self) -> String
H160
H160
是一个 20 长度的字节,用于表示地址,有一些方法实现
fn as_ref(&self) -> &H160
pub const fn new(val: [u8; 20]) -> Self
地址
Address
是 H160
的别名,也实现了方法
pub fn to_hex_string(&self) -> String
注意: to_hex_string
与 to_string
不同,后者如果内容过长只会打印部分
日志级别
开发者在事件日志中使用。更多详细信息请参阅日志部分
// CRITICAL ERROR WARNING NOTICE INFO DEBUG
pub enum LogLevel {
CRITICAL,
ERROR,
WARNING,
NOTICE,
INFO,
DEBUG,
}
2. 日志
我们为开发者提供了几个工具宏方法,以便在合约中打印日志,包括 critical!()
、error!()
、warning!()
、notice!()
、info!()
、debug!()
示例
pub fn add(&mut self) -> u64 {
info!("info {}", "hello");
warning!("warning {}", "hello");
notice!("notice {}", "hello");
1
}
3. 事件
为开发者提供在合约中使用的事件。
#[derive(Debug, Serialize)]
pub struct Event<T> where T: Serialize {
address: Address,
data: T,
topics: Vec<H256>,
}
示例
#[derive(Debug, Serialize)]
struct Temp {
amount: u64,
}
#[storage]
pub struct SetHash {
map: HyperMap<String, String>,
}
#[contract]
impl SetHash {
fn new() -> Self {
Self { map: HyperMap::new() }
}
pub fn set_hash(&mut self, key: String, value: String) {
let temp = Temp { amount: 1 };
let ev = Event::new(temp, "set_hash".to_string(), vec!["test".to_string()]);
ev.emit();
self.map.insert(key, value);
}
pub fn get_hash(&mut self, key: String) -> &String {
self.map.get(&key).unwrap()
}
}
依赖关系
~3.5–4.5MB
~89K SLoC