SecretNetwork icon indicating copy to clipboard operation
SecretNetwork copied to clipboard

Tendermint enclave build fails due to duplicate `enclave-ffi-types` crate in this repo

Open likuilin opened this issue 1 year ago • 2 comments

I'm trying to build tendermint_enclave.signed.so from tm-secret-enclave myself (yes I know the MRSIGNER will be different so it won't work on-chain), and am running into this error:

error[E0432]: unresolved imports `enclave_ffi_types::INPUT_ENCRYPTED_SEED_SIZE`, `enclave_ffi_types::OUTPUT_ENCRYPTED_SEED_SIZE`
 --> /home/kuilin/.cargo/git/checkouts/secretnetwork-321ca7ab73a61848/a3edd66/cosmwasm/enclaves/shared/crypto/src/consts.rs:4:29
  |
4 | pub use enclave_ffi_types::{INPUT_ENCRYPTED_SEED_SIZE, OUTPUT_ENCRYPTED_SEED_SIZE};
  |                             ^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^ no `OUTPUT_ENCRYPTED_SEED_SIZE` in the root
  |                             |
  |                             no `INPUT_ENCRYPTED_SEED_SIZE` in the root
  |
help: a similar name exists in the module
  |
4 | pub use enclave_ffi_types::{ENCRYPTED_SEED_SIZE, OUTPUT_ENCRYPTED_SEED_SIZE};
  |                             ~~~~~~~~~~~~~~~~~~~
help: a similar name exists in the module
  |
4 | pub use enclave_ffi_types::{INPUT_ENCRYPTED_SEED_SIZE, ENCRYPTED_SEED_SIZE};
  |                                                        ~~~~~~~~~~~~~~~~~~~

For more information about this error, try `rustc --explain E0432`.
error: could not compile `enclave_crypto` due to previous error

This error happens when building on my machine, but I was able to get the enclave to build successfully using the Dockerfile, so I was able to bisect what the exact issue is by following the xargo execs.

The root cause is that this repo has two enclave-ffi-types crates. On my machine, Cargo finds the one in /seed-service/src/enclaves/ffi-types rather than the correct one in /cosmwasm/enclaves/ffi-types. Both are named enclave-ffi-types with version 0.1.0, but the former (older?) one exports ENCRYPTED_SEED_SIZE, whereas the latter one exports INPUT_ENCRYPTED_SEED_SIZE and OUTPUT_ENCRYPTED_SEED_SIZE.

There's no way to specify the correct one with a local change to Cargo.toml in my checkout of tm-secret-enclave since they have the same version. I'm not sure how best to resolve this issue, but it seems like a clear bug that this repo should not have two crates that are the same name and version, since Cargo will pick one arbitrarily in this case.

likuilin avatar May 15 '23 00:05 likuilin

Using the test program whose source is here https://linux.die.net/man/2/getdents64 to get the raw readdir order of ~/.cargo/git/checkouts/secretnetwork-321ca7ab73a61848/a3edd66, I can confirm that seed-service comes before cosmwasm on my machine (non-working), but cosmwasm comes before seed-service in the Docker container on my machine (working).

likuilin avatar May 15 '23 01:05 likuilin

Thanks. This is probably due to lockfiles getting messed up somewhere. I'll update the issue when this is resolved

Cashmaney avatar May 15 '23 17:05 Cashmaney