vertex_lib/
lib.rs

1use std::mem;
2use byteorder::{ByteOrder, LittleEndian};
3extern crate libc;
4pub type address =  *const u8;
5pub type Event = i32;
6type pointer =  *mut u8;
7pub type lparray =  *mut pointer;
8extern {
9   fn chain_storage_size_get(key: *const u8, length: u8 ) -> usize;
10   fn chain_get_caller(caller: address) ;
11   fn chain_get_creator(creator: address);
12   fn chain_storage_get(key: *const u8, length: u8, value: *const u8) -> *const u8 ;
13   fn chain_storage_set(key: *const u8, key_size: u8, value: *const u8, value_size: u8) ;
14}
15
16unsafe fn set(data: *mut pointer, offset: usize, value: *mut u8) {
17    let ptr = data.offset(offset as isize) as *mut pointer;
18    *ptr = value;
19}
20
21pub fn to_lparray (s: &[u8]) -> lparray {
22    unsafe {
23        let result = libc::malloc(2 * mem::size_of::<*mut pointer>()) as *mut pointer;
24        let len = s.len();
25        set(result,0, len as *mut u8);
26        set(result,1, s.as_ptr() as *mut u8);
27        return result
28    }
29}
30
31pub fn get_caller() -> address {
32    let caller: address = unsafe {
33        libc::malloc((mem::size_of::<u8>() * 35) as libc::size_t ) as address
34    };
35    unsafe {
36        chain_get_caller(caller) ;
37    }
38    return caller;
39}
40pub fn get_creator() -> address {
41    let creator: address = unsafe {
42        libc::malloc((mem::size_of::<u8>() * 35) as libc::size_t ) as address
43    };
44    unsafe {
45        chain_get_creator(creator) ;
46    }
47    return creator;
48}
49pub fn storage_get(key: *const u8, key_size: u8) -> *const u8 {
50    let size : usize = unsafe { chain_storage_size_get(key, key_size ) };
51    if size == 0 {
52        return 0 as *const u8;
53    }
54    unsafe {
55        let ret : *const u8 = libc::malloc((mem::size_of::<u8>() * size) as libc::size_t ) as *const u8;
56        chain_storage_get(key, key_size, ret);
57        return ret ;
58    };
59}
60pub fn storage_set(key: *const u8, key_size: u8 , value: *const u8, value_size: u8 ) {
61    unsafe {
62        chain_storage_set(key, key_size, value, value_size ) ;
63    }
64}
65pub fn from_byte(x: *const u8, length: u8) -> u64 {
66    let key = unsafe { std::slice::from_raw_parts(x, length as usize) };
67
68    return LittleEndian::read_uint(key, length as usize).to_be();
69}