Gnokey Mobile is a mobile (D)app that helps users manage their Gnoland keys and sign their (D)app transactions initiated from other Gnoland mobile (D)apps.
It allows Gnoland (D)app builders to offload the burden of having to build inside their (D)apps the functionalities of private key management and transaction signing, including the related security mechanisms.
If you want to take advantage of Gnokey Mobile's benefits (secured key management and TX signing), you will need to make your (D)app communicate with Gnokey Mobile on the same phone. Below you will find more details and explanations regarding the inter-app communication mechanisms that you will need to build into your (D)app.
The Gnokey Mobile app uses expo-linking
to exchange data with your app such as dSocial.
This way, your app can sign in or sign a transaction using the Gnokey Mobile app.
Example of a dSocial request for sign in:
land.gno.gnokey://tosignin?client_name=dSocial&callback=tech.berty.dsocial%3A%2F%2Fsignin-callback
- Base URL:
land.gno.gnokey://tosignin
- Parameters:
- client_name: the name of the app that is calling the Gnokey Mobile app. It will be displayed to the user.
- callback: the URL that Gnokey Mobile will call after the user selects the account.
Example response:
tech.berty.dsocial://signin-callback?address=g19h0el2p7z8thtqy4rze0n6en94xux9fazf0rp3&cachekill=1732030818190
- Base URL: The
callback
from the request. In this case,tech.berty.dsocial://signin-callback
- Parameters:
- address: the address of the selected user
- cachekill: For testing. Ignore this.
Example of a dSocial request to Gnokey Mobile to sign a transaction (with added newlines for clarity):
land.gno.gnokey://tosign?tx=%7B%22msg%22%3A%5B%7B%22%40type%22%3A%22%2Fvm.m_call%22%2C%22caller%22%3A%22g19h0el2p7z8thtqy4rze0n6en94xux9fazf0rp3%22%2C%22send%22%3A%22%22%2C%22pkg_path%22%3A%22gno.land%2Fr%2Fberty%2Fsocial%22%2C%22func%22%3A%22PostMessage%22%2C%22args%22%3A%5B%22Hello%22%5D%7D%5D%2C%22fee%22%3A%7B%22gas_wanted%22%3A%2210000000%22%2C%22gas_fee%22%3A%221000000ugnot%22%7D%2C%22signatures%22%3Anull%2C%22memo%22%3A%22%22%7D
&address=g19h0el2p7z8thtqy4rze0n6en94xux9fazf0rp3
&remote=https%3A%2F%2Fapi.gno.berty.io%3A443
&chain_id=dev
&client_name=dSocial
&reason=Post%20a%20message
&callback=tech.berty.dsocial%3A%2F%2Fpost
- Base URL:
land.gno.gnokey://tosign
- Parameters (values should be percent-escaped with
encodeURIComponent
):- tx: the json result of
gnonative.makeCallTx(...)
- address: bech32 address of whoever you want to sign the transaction.
- remote: the connection address for the remote node where the transaction will be sent
- chain_id: the chain ID for the remote
- client_name: the name of the app that is calling the Gnokey Mobile app. It will be displayed to the user.
- reason: the reason behind this action. It will be displayed to the user.
- callback: the URL that Gnokey Mobile will call after signing the tx.
- tx: the json result of
Example response:
tech.berty.dsocial://post?tx=%7B%22msg%22%3A%5B%7B%22%40type%22%3A%22%2Fvm.m_call%22%2C%22caller%22%3A%22g19h0el2p7z8thtqy4rze0n6en94xux9fazf0rp3%22%2C%22send%22%3A%22%22%2C%22pkg_path%22%3A%22gno.land%2Fr%2Fberty%2Fsocial%22%2C%22func%22%3A%22PostMessage%22%2C%22args%22%3A%5B%22Hello%22%5D%7D%5D%2C%22fee%22%3A%7B%22gas_wanted%22%3A%2210000000%22%2C%22gas_fee%22%3A%221000000ugnot%22%7D%2C%22signatures%22%3A%5B%7B%22pub_key%22%3A%7B%22%40type%22%3A%22%2Ftm.PubKeySecp256k1%22%2C%22value%22%3A%22A6YT26ehhjN7YXx%2BLZza2Gp31yP5bJ6INfeGf%2FrumHFR%22%7D%2C%22signature%22%3A%226KAdOO2YXyZmp8ehiin6Rsz%2Bhxu30W0pB00%2Bv1xnpzMSZ%2BBIVdZbo1gdlVGp0E24ZLRyPrsKtb0Q4%2FkdD57qGg%3D%3D%22%7D%5D%2C%22memo%22%3A%22%22%7D
- Base URL: The
callback
from the request. In this case,tech.berty.dsocial://post
- Parameters (values are percent-escaped, to be decoded with
decodeURIComponent
):- tx: the signed transaction json to pass to
gnonative.broadcastTxCommit(...)
- tx: the signed transaction json to pass to
If you are using make ios
to run Gnokey Mobile in the iOS simulator, you can send a test transaction simply by
pasting the request URL into Safari in the simulator. This will open Gnokey Mobile where you can approve. The
response URL is printed in the terminal running make ios
.
If you are using make android
to run Gnokey Mobile in the Android simulator, you can use adb
to send the URL
of a test transaction. You must change each &
to \&
. The following example will open Gnokey Mobile where you can approve. The
response URL is printed in the terminal running make android
.
adb shell am start -a android.intent.action.VIEW -d "land.gno.gnokey://tosign?tx=%7B%22msg%22%3A%5B%7B%22%40type%22%3A%22%2Fvm.m_call%22%2C%22caller%22%3A%22g19h0el2p7z8thtqy4rze0n6en94xux9fazf0rp3%22%2C%22send%22%3A%22%22%2C%22pkg_path%22%3A%22gno.land%2Fr%2Fberty%2Fsocial%22%2C%22func%22%3A%22PostMessage%22%2C%22args%22%3A%5B%22Hello%22%5D%7D%5D%2C%22fee%22%3A%7B%22gas_wanted%22%3A%2210000000%22%2C%22gas_fee%22%3A%221000000ugnot%22%7D%2C%22signatures%22%3Anull%2C%22memo%22%3A%22%22%7D\&address=g19h0el2p7z8thtqy4rze0n6en94xux9fazf0rp3\&client_name=dSocial\&reason=Post%20a%20message\&callback=tech.berty.dsocial%3A%2F%2Fpost"