Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Hyperledger Iroha 2 supports several client SDK libraries, such as Java SDK, Javascript SDK or Python SDK. The way this works currently is by exporting language agnostic schema file that describes all structures exchanged between server (written in Rust) and the client (written in the language of choice - Java, Javascript, Python). SDK developers then build their respective libraries with some automated process of code generation out of the schema. Often times changes in the schema are such that they require manual intervention in the transcription process but if nothing else it is required by every SDK to build and maintain the code for code generation out of schema. To solve this problems for all SDKs in once place it has been decided to generate a shared object that exposes `extern` extern functions SDK client libraries can link against dynamically

...

1. cbindgen(git@github.com:mozilla/cbindgen.git),
2. iroha2(git@github.com:hyperledger/iroha.git) branch: iroha2-stable
3. iroha2-java(git@github.com:hyperledger/iroha-java.git)

Milestones

Eval 1:

  •  Add the functionality to parse function signatures with associated types out of MIR to cbindgen (either by itself or in addition to Rust source code)
  •  Write tests that will cover the functionality of parsing associated types in cbindgen
  •  Open a PR to merge this code into cbindgen, progress with further tasks as we wait for this to be approved

Eval 2:

  •  Use iroha_ffi to generate extern functions out of existing Rust code
  •  Make corrections to the iroha_ffi library in this process if needed or write manual implementations of extern functions

Eval 3:

  •  Use cbindgen to generate C .h header files out of extern functions in the Rust source code
  •  Conduct manual testing
  •  Address the code bugs

Eval 43:

  •  Document the mentorship results
  •  Create a small app demonstrating that you have successfully linked the shared object with the C header files
  •  Present your results


Timeline

Dates

Tasks/Plan

Status

June 1 - June 1424

revisit knowledge of Rust
run iroha nodes and connect to it via both `iroha_client_cli` and client app
run cbindgen on a small example: - export a function from Rust - generate C bindings with cbindgen - link this C lib from C and Java

done
June 15 25 - June 28Aug 23

fork the cbindgen repository
add the functionality to parse function signatures from MIR

June 29 - July 12

July 13 - July 26July 27 - Aug 9Aug 10 - Aug 23done
Aug 24 - Sept 6Sept 7 - Sept 20

make use of ffi_export macro to generate FFI bindings of methods and functions in iroha_client
MIR approach failed - explore other approaches

done
Sept 7 - Oct 18
implement resolution of associated types by parsing source code of all dependent crates.
create a solution to resolve mutually dependent associated types (topologically sort)
done
Oct 19 - Nov24
generate FFI bindings (.h files) for Iroha client using cbindgen
Nov 25 - Dec 1
write tests and open PR to cbindgen and prepare an article reportdoneSept 21 - Oct 4Oct 5 - Oct 18Oct 19 - Nov 1Nov 2 - Nov 12


Mentors

Name

Time zone

Discord ID

Telegram ID

Email ID

Marin VeršićUTC+2mversic@mingler101marin.versic101@gmail.com

...

Name

Time zone

Discord ID

Telegram ID

Email ID

OrangeUTC+8orangeng@orangengngquanhao@gmail.com

Merged PRs

  • PR to cbindgen