-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Berty's GnoMobile / Gno Native Kit Builder Journey #28
Comments
On our side:
On Berty's side:
|
Introducing our teamRémi (@D4ryl00)
Jeff (@jefft0)
Fun fact: Was at RSA the company when A Cypherpunk’s Manifesto was published. Iuri (@iuricmp)
|
Onboarding experience with
|
Progress: Test node and code repo
|
Gno developer call: August 9We (Remi, Jeff and Iuri) participated in our first developer call and introduced ourselves. We explained that we're writing an app where we need to create a transaction by calling the Go code directly (not with the CLI). Manfred and Jae discussed plans for using the Tendermint 2 code as a "library", but not ready yet. Manfred said that, for now, we can use the same approach as other tools like:
|
Progress: Demo videos
|
Progress: Domain name for Berty testnet nodeWith Manfred's help on the DNS, we have a nice domain name for our Gno testnet node: The help pages use this in the copy/paste text for the command: |
Progress: First GnoMobile demo videoPart of milestone M0 is a proof-of-concept for calling a Gno realm function from mobile (GnoMobile). Here is a demo video of the initial PoC app called GnoBoard which interacts with a Gno board. This demonstrates:
The pull request mentioned is here: gnolang/gnonative#3 |
Meeting with Guilhem: gnoclient and gomobile dependenciesWe had a meeting with Guilhem.
|
Progress: Build dependencies, Android, estimating gas fees
Iuri continues to work on the UI for the "gnoboard" example app and will have some cool demos soon. |
Progress: Demo video: GnoMobile UIhttps://www.loom.com/share/9537299635564761bc3a6d627411e33a |
Progress: Video: GnoMobile system diagramWe made a video to give a quick overview of GnoMobile using the system diagram from our project proposal. (This is useful background for our ongoing design questions.) |
Question: How to get the return value of the realm function call?We are writing tests for the GnoMobile API. The basic operation is to Call a realm function. But it's not clear how to get the return value through the RPC call to the remote gnoland node. Here is the question issue: We quickly got a good answer from @zivkovicmilos . The return value of the realm RPC call is in |
GnoMobile, a Gno Framework for Mobile. Implementation PlanAs the culminating step of milestone M0, we submitted our proposal for the GnoMobile framework implementation plan which we will do during M1. If you have comments, let us know on the issue. |
Question: Design of gnoclient APIOur proof-of-concept app has a working version of the gnoclient Client API. The near-term goal is to complete the original PR. We have posted a question which came up when we wrote this code, so that we can discuss with the Gno devs. |
Gno developer call: Sept. 13We presented the completion of milestone M0 and discussed our plans for GnoMobile in M1. We discussed some of the design issues we're working on:
|
Question: How can amino include doc comments?We are making progress with using amino so that our gRPC types are defined in Go structs. But when amino creates the protobuf file, the doc comments are lost. See the issue for details. We may be able to contribute code to amino to help support doc comments. |
Question: How can amino preserve enum definitions?Related to the previous question, we opened an issue we came across where the Protofuf output from amino doesn't preserve the names of enum constants. As mentioned, both issues may have a similar solution with parsing the AST of the original Go code. For further discussion. |
Progress: Demo video: GnoMobile gRPC and aminohttps://www.loom.com/share/52f6fc51a60a432896a50639ac5e6cce |
Trip report: Barcelona Web3 conferenceOn Friday and Saturday I (Jeff) went to the Web3 Family Conference in Barcelona.
|
Progress: Using the gnoclient APIWe have merged pull request gnolang/gnonative#22 where GnoMobile uses a local copy of the gnoclient API. The code is copied from gnolang/gno#1047 which will be merged into the Gno codebase so that any app can use Gno as an SDK. (When it is merged, GnoMobile will easily switch to using the "official" version.) The example app is now working with this code. Next steps are to make all the gnoclient functionality useable from the GnoClient API, to add wallet support in the example app, and to implement gRPC directly for React Native which is explained in this issue: |
Progress: Demo video: GnoMobile wallet UIhttps://www.loom.com/share/c0f68f707d3e47089c2fdbd2698fc92f |
Progress: Merged GnoMobile wallet UI codeWe have merged pull request gnolang/gnonative#18 which has the code for the wallet UI shown in the demo video above. In addition to the new screens for wallet functions, this pull request fixes issues with the Makefile for React Native and gRPC. We can now proceed quickly with the next steps mentioned in the video. |
Gno Contribution: Amino to use snake case for Protobuf field namesAs explained in issue gnolang/gno#1211, Amino should use lower_snake_case for Protobuf field names. We submitted PR gnolang/gno#1213 to fix this. This PR is merged. On todays developer call, we also discussed Amino-related issues gnolang/gno#1157 for doc comments and gnolang/gno#1161 for enums. We now have a way forward to implement doc comments and will do a PR soon. |
Gno Contribution: Amino to copy doc comments to the Protobuf fileAs explained in issue gnolang/gno#1157, Amino should optionally support copying doc comments from the Go struct to the Protobuf file output. We submitted PR gnolang/gno#1235 to add |
Progress: Temporary gno fork, Amino supportAs mentioned, we have a few pull requests for Gno. But we need to let the devs take their time to review. Therefore, we made a fork where we will cherry pick the pull request commits into branch with-gno-PRs . This allows GnoMobile to use a replace command in Now that we have the Amino functionality, the Protobuf field names produced by Amino are lower_snake_case, and comments from the Go struct are included, as in this example. This also allows a doc comment for enumerated values. |
Progress in setting up Buf documentationWe opened an issue to track progress in setting up a GnoMobile web page at the Buf documentation registry. gnolang/gnonative#53 . The organization account has been created and now we need to get permissions to create a new repository. Once this is done, we will move forward with making sure that the GnoMobile API documentation looks good. |
Gno Contribution: Improve error handling in HTTP clientThe Gno HTTP client is used in many places, including GnoMobile, to sign transactions and communicate with the blockchain. There is code to return the specific error Why is this important? GnoMobile is a toolkit API. Part of a good API design is clear error handling. When an application uses GnoMobile to call a remote blockchain function, the API should return a clear error if the password is wrong (or missing) so that the application can prompt the user to fix the problem. Next we will update the GnoMobile example app to use this and we'll make a demo video. (Today we also submitted a little pull request gnolang/gno#1301 so that |
Progress: Demo video: New GnoMobile wallet UI functions, gRPC streamingWe have made a lot of progress in the example app for wallet functions. Remi has also implemented returning a stream object from a gRPC method. Details are in the video: Next: A few more wallet UI functions, and to make use of gRPC streaming. |
Progress: In Keybase, add
|
Progress: Buf documentation web pageThe gRPC interface uses Protobuf where methods and message objects have doc comments. This is a great place to document the API. We have set up the GnoMobile Buf web page for this documentation. We will continue to add more including details for error codes and how the methods interact. |
Gno developer call: November 15
|
Gno contribution: Improve error message and docs for using test3.gno.landJeff was having trouble using
|
Gno contribution: Updates to
|
Progress: Demo video: Call event streamDemo the support for gRPC stream when calling a realm function. Discuss how we're waiting for the Gno.land functionality for the endpoint to return status events, and better error types from realm functions. |
Progress: Demo Video: Minimal app "Hello Gno"In this video, Iuri demonstrates a minimal GnoMobile example app which was made by the new |
Progess: Demo Video: Minimal command-line example in GoRemi has implemented a minimal gRPC server and client in Go. This lets us make simple GnoMobile command-line example apps in Go which don't have all the GUI code of a full React Native app. Here is a short demo video of goserver and goclient. |
Demo Video: Comparing GnoMobile with tm2-JSIn this short video we compare the features of GnoMobile with tm2-JS, which is another framework for building Gno apps. using this comparison, the video explains why GnoMobile was created and why a dev might choose to use it. This also shows why we want to rename the framework because it's useful for more than making mobile apps. |
Announcement: Renaming to Gno Native KitWe started the GnoMobile project to demonstrate that we can use Gno.land on mobile, by bridging the native code of the app to the core Go code. During this journey we discovered that this toolkit has other uses beyond mobile (highlighted in the demo of the previous post). With helpful feedback from the Gno team, we have renamed this project to Gno Native Kit. This is short for "A toolkit to use the core Gno code from your app's native programming language".
|
Video: Fireside chat with JeffIn Johnny B's continuing series of fireside chats, here is an hour-long chat with Jeff. It includes the origins of Berty, Gno Native Kit and reasons for renaming, plus future plans with Gno Social. |
Our journey continues...Our journey into Gno.land continues with dSocial. |
Securing gRPC channel communicationThe communication between the React-Native gRPC client and the backend server used an encrypted TCP connection. When a gRPC server listens to a local TCP port, any program on your system can use it to communicate also with the server and impersonate or spy you. |
Gno Native Kit video series: Episode One: OverviewHere is the first in a series of videos presenting Gno Native Kit. https://www.youtube.com/watch?v=N1HLyQDHGQ0 |
Gno Native Kit video series: Episode Two: System DiagramBe sure the check out our second in a series of videos presenting Gno Native Kit. |
This documents the journey of Berty into Gno.land.
The two objectives of the first month of our Builder project are:
Create a Proof of Concept of an existing Gno example app running on a mobile phone. This will prove that we can run Gno on a mobile (or identify issues that need further work). The PoC code will go into https://github.com/gnolang/gnomobile .
Based on this experience to produce a detailed technical plan for further work to create a framework where developers can bring their Gno apps to mobile.
In this Journey, we will introduce our team, document our experience using Gno, track our issues and solutions, and keep meeting notes.
The text was updated successfully, but these errors were encountered: