This is a quick demo on exposing starknet-core
to C++ with the cxx bridge and corrosion.
As noted in the starknet-crypto
page, you're advised to use high-level constructs exposed through starknet-core
instead if you're not familiar with cryptographic primitives, as we're doing here. However, it's possible to wrap the underlying starknet-crypto
crate directly if you know what you're doing.
This wrapper crate expose functions that operate on strings, which is bad and probably hurts performance. It's possible to make the C++ side create FieldElement
instances and operate on those instead, which is much more idiomatic. That said, this demo wrapper crate seems to already offer decent performance.
Moreover, this crate does not implement error handling and always just panics on error, which is likely not what you want in production.
However, the goal of this crate is just to demonstrate using the library from C++, NOT to create idiomatic bindings, which is way too much work to maintain as an example, and should be a project of its own.
With necessary toolings installed:
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make
It everything goes well, you should now have a main
executable:
$ ./main
pedersen_hash():
0x030e480bed5fe53fa909cc0f8c4d99b8f9f2c016be4c41e13a4848797979c662
ecdsa_sign():
0x0543b191c671bc1f9b2f4e643a5711535cf34cb8330ab22e2416e8cdda8db05402f139920a75d2209e972b1bf82dc72e4c1edb8355fdbae7b4910ea7c32e70e2