Investigate dependencies of Rust code in go packages
Context: the Starknet P2P explorer uses Juno as an external library for some of its features, but it's not as simple as doing go get, as it's required to compile the Rust dependencies.
For example, here's a snippet of the build process if Juno is used as a library (without the additional Rust compilation):
...
26.31 /usr/bin/ld: cannot find -ljuno_starknet_compiler_rs: No such file or directory
26.31 /usr/bin/ld: cannot find -ljuno_starknet_core_rs: No such file or directory
26.31 /usr/bin/ld: /tmp/go-link-3421764336/000026.o: in function `mygetgrouplist':
26.31 /_/GOROOT/src/os/user/getgrouplist_unix.go:15: warning: Using 'getgrouplist' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
26.31 /usr/bin/ld: /tmp/go-link-3421764336/000025.o: in function `mygetgrgid_r':
26.31 /_/GOROOT/src/os/user/cgo_lookup_cgo.go:45: warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
...
List of packages that is used right now:
github.com/NethermindEth/juno/utils
github.com/NethermindEth/juno/clients/feeder
github.com/NethermindEth/juno/starknetdata/feeder
These packages shouldn't require rust code at all (especially utils package). We need to investigate what's going on
Can I work on this ?
Hey @ShantelPeters! Thanks for showing interest. We've created an application for you to contribute to Juno. Go check it out on OnlyDust!
Did some investigations:
github.com/NethermindEth/juno/clients/feeder
- Depends on
github.com/NethermindEth/juno/starknet - Indirectly depends on
core, core/crypto (via starknet)
That's why the following errors occur:
26.31 /usr/bin/ld: cannot find -ljuno_starknet_compiler_rs: No such file or directory
26.31 /usr/bin/ld: cannot find -ljuno_starknet_core_rs: No such file or directory
So compilation is needed for packages core and starknet, which require Rust dependencies.
Some solutions in mind:
- Move the Rust code to its own packages for
coreandstarknet
starknetcontains theCompilefunction, in which onlyrpcandadapters/p2p2coreare using it, we can move it to a separate package (i.e.compiler) without much issuescorecontainscairo0classHashfunction, in whichCairo0Classfromcoreis using it. It's slightly tricky, but I think we can moveCairo0Classto a separate package.
I'm not sure if this is the most elegant solution, as that means we have to be more careful about the dependencies of the packages. Perhaps I'll attempt to implement the solution and raise a PR.
Being worked on in https://github.com/NethermindEth/juno/pull/2111
« These packages shouldn't require rust code at all [...] »
As a 3-year-old Golang implementation of the Starknet protocol dubbed « the Starknet Golang client », no parts of this project should rely on any Rust code.
I would suggest to list, benchmark and track all the external functions used within these files:
./starknet/compiler/rust/src/lib.rs
./vm/rust/src/jsonrpc.rs
./vm/rust/src/juno_state_reader.rs
./vm/rust/src/versioned_constants.rs
./vm/rust/src/lib.rs
( ./core/rust/src/lib.rs is removed by #2111 )
To help the task of removing Rust code from the Golang client in order to be well integrated within the Golang ecosystem