pub fn insert(root: [u8; 32], key: &[u8; 32], value: &[u8]) -> [u8; 32]
insert key-value pair into SMT, return new root