1 个稳定版本

1.0.0 2023年2月7日

#30 in #event-log


用于 2 crate

Apache-2.0

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

地址

AddressH160 的别名,也实现了方法

pub fn to_hex_string(&self) -> String

注意: to_hex_stringto_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