owned this note
owned this note
Published
Linked with GitHub
# Gotcha! Holochain RSM
###### tags: `holochain` `RSM` `dev` `usability`
- If you want simple string like hashes (Ahdad232-asdASf...) on the client side of the UI, which is relevant to structs such as AgentPubKey, HeaderHash, and EntryHash, you will have to handle the conversions between the object like hashes that are given by default either in the UI, or in the WASM/DNA side. check out the acorn-hc RSM work-in-progress branch to see an example of how to handle that: https://github.com/h-be/acorn-hc/pull/101/commits/daa52863a2d107d2a4f08f804fcb3646719d6561#diff-4a9884160f6114382c30a81ec8eae4fd
- in general the approach is to wrap any references in your data structures with an intermediary type, called WrappedAgentPubKey, which handles its own serialization and deserialization, instead of AgentPubKey's default
- RSM crate `fixt` doesn't compile with latest rust (1.46), downgrade to 1.45.2 and then it should compile (watch [issue](https://github.com/holochain/holochain/issues/329))
- Current limits seen in RSM:
- When committing more than 116/118 entries in the same zome call, or also when doing 20 gets in the same
- Turn on logs from the conductor with `RUST_LOG=debug holochain`. Available levels are error, warn, info, debug, trace
- The new conductor-config.yml does not include the dnas. You can use https://www.npmjs.com/package/@holochain-open-dev/holochain-run-dna to replace `hc run` for now
- If you're restarting the conductor, you may want to delete the database in disk, with `rm -rf <DB_PATH>`. You can see what database path you have configured by looking at your conductor-config.toml, default location in linux is `$HOME/.config/holochain/conductor-config.toml`. After that, the best way to reinitialize it is with `holochain -i`.
- For mac OS catalina users, you may encounter problems (like [this](https://github.com/maidsafe/rust_sodium/issues/111)) in installing `holochain` and `dna_util` with [this](https://hackmd.io/p3VO8y-zTR-JcPds3GvwNw) instruction specifically error in compiling `rust_sodium_holochain_fork-sys-0.10.4`
``` sh
--- stderr
thread 'main' panicked at 'Failed to run './configure':
No such file or directory (os error 2)',
/Users/tats/.cargo/registry/src/github.com-1ecc6299db9ec823/rust_sodium_holochain_fork-sys-0.10.4/build.rs:393:13
```
If you encounter this problem, then make this change in the `build.rs` of `rust_sodium_holochain_fork-sys-0.10.4` (around L375) then you can run the cargo install for `holochain` and `dna_util` again.
``` rust
// from this
let mut configure_cmd = Command::new("./configure");
// to this
let mut configure_cmd = Command::new(fs::canonicalize(Path::new(&source_dir).join("configure")).unwrap());
```
If you still encounter the same error after this fix, then install the libsodium from [here](https://libsodium.gitbook.io/doc/installation) and unpack the `tar.gz` (get the latest stable) and copy the `configure` executable file into the `rust_sodium_holochain_fork-sys-0.10.4` directory then try installing again. It should work.
#### If you see this error:
```
type: 'Error',
data: {
type: 'RibosomeError',
data: 'Wasm error while working with Ribosome: CallError("RuntimeError: unknown error")'
}
```
watch your entry definitions and if you're creating a entry you haven't listed there.
In case you use `Path::from("smt").ensure()` this will cause a commit to happen, and MAKE SURE that you have added `Path::entry_def()` into your `entry_defs!` call, such as
`entry_defs![Path::entry_def()];`
- You can use this to have a dinamic string LinkTag
```rust
#[derive(Serialize, Deserialize, SerializedBytes)]
struct StringLinkTag(String);
pub fn link_tag(tag: &str) -> ExternResult<LinkTag> {
let sb: SerializedBytes = StringLinkTag(tag.into()).try_into()?;
Ok(LinkTag(sb.bytes().clone()))
}
```
- When trying to pass a unix timestamp (like Date.now()) as a serialized input over msgpack (as a zome call), I found that the type that serialized and deserialized it best was an f64. This is relevant if you see the following error, if you are using an Integer type, like u32, or i32
```
{
type: 'Error',
data: {
type: 'RibosomeError',
data: 'Wasm error while working with Ribosome: Zome("failed to deserialize args: FromBytes(\\"invalid type: floating point `1601078013087`, expected u64\\")")'
}
}
```
### On Mac, and contributing to "core"
- If you are running `nix-shell --run hc-test` or `nix-shell --run hc-merge-test` and you encounter an issue where it says "too many files open", use the same fix as is applied within the CircleCI instructions, like this:
- fix for "too many open files" that breaks tokio and lmdb
`ulimit -n 10240`
- https://github.com/holochain/holochain/blob/1f87989a1a62680ede451d0c65801e3cadec8ad3/.circleci/config.yml#L47