tonlib_core/library_helper/
contract_library_dict.rs

1use super::{LibraryHelper, TonLibraryError};
2use crate::cell::BagOfCells;
3use crate::TonHash;
4
5#[derive(Debug, PartialEq)]
6pub struct ContractLibraryDict(pub Vec<u8>);
7
8impl ContractLibraryDict {
9    pub fn new(dict_boc: Vec<u8>) -> Self {
10        Self(dict_boc)
11    }
12
13    pub fn keys(&self) -> Result<Vec<TonHash>, TonLibraryError> {
14        let cells = BagOfCells::parse(&self.0)?.single_root()?;
15        LibraryHelper::extract_library_hashes(&[cells])
16    }
17}
18
19#[cfg(test)]
20mod tests {
21    use base64::prelude::BASE64_STANDARD;
22    use base64::Engine;
23
24    use crate::library_helper::ContractLibraryDict;
25    use crate::TonHash;
26
27    #[test]
28    fn test_contract_library_dict_keys() -> anyhow::Result<()> {
29        let dict_boc = BASE64_STANDARD.decode("te6ccgECDwEAAwIAA7V7nBIxv16jVmxIK1r2UBfaInVF/ZiTIhIyZW89zjsyXFAAApNHjvgAGEQXStaTphNowXid2UrUP36WDrzwLiBnIAdPV/U5Nn4AAAKTQX9XNIZfX1UAADR1FsgIBQQBAhkEgF4JAsnmyhh0c9cRAwIAb8mHoSBMFFhAAAAAAAACAAAAAAADGN3lQzL4zq6hI/88sLWZIBMzC7WNYeJBkUVxatc74GBAUBcMAJ5FPGwLbCQAAAAAAAAAAScAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJyZKZhyT+7yUFKUgAlQcP6fYA6vuPZJ3iavbRwpvRXkaLpxCmiu6kCFcIf9iDkMi+QzAWWce3or9ccVakMUVmEJwIB4AgGAQHfBwC5aAFzgkY369RqzYkFa17KAvtETqi/sxJkQkZMree5x2ZLiwAlyKt1kViW7ZNClbNx3193SCmWemxLikIPCmsjqS7+uVAp0ujABhRYYAAAUmjx3wAEy+vqoB1KHnNAArFoAeU6L0QTxXmMpSLbAFdNPEeWbNwvX1rD8Ipmh3N0p1nJAC5wSMb9eo1ZsSCta9lAX2iJ1Rf2YkyISMmVvPc47MlxUCyebKAGRvwEAABSaPBSRYTL6+pB4AwJAl9uPE8JwA7MY+ZmnGSzCzr1ac6euD6OttvkvYjYIUAO1kagpLqFujmEP0MUdJPyDIILCgApAAAAAb8I6wBl9fYJAwCuM0M2BgBACEIC8F5zC6xlKwQUtGc2RJmcgbi9KFlYBMAU/fgHgoJ5lykCATQODQDLgBLkVbrIrEt2yaFK2bjvr7ukFMs9NiXFIQeFNZHUl39csAPKdF6IJ4rzGUpFtgCumniPLNm4Xr61h+EUzQ7m6U6zkgBbNNH1WCqtrdoD1I2iZsPakLqhenpsHNvLIVoFAC8ac4f8CEICcmEyBp1jWPl1TYnsWJ5gUk5EnB0PEQTb4dSXIG+LspA=")?;
30        let dict = ContractLibraryDict::new(dict_boc);
31        let expected_hashes = [
32            TonHash::from_hex("726132069d6358f9754d89ec589e60524e449c1d0f1104dbe1d497206f8bb290")?,
33            TonHash::from_hex("f05e730bac652b0414b4673644999c81b8bd28595804c014fdf8078282799729")?,
34        ];
35        let keys = dict.keys()?;
36        assert_eq!(keys.len(), 2);
37        assert!(keys.contains(&expected_hashes[0]));
38        assert!(keys.contains(&expected_hashes[1]));
39        Ok(())
40    }
41}