From fdb0e426978eca96d4b7276f3a73bbca2ad180ae Mon Sep 17 00:00:00 2001 From: Tudor Morar Date: Thu, 19 Sep 2024 14:57:18 +0300 Subject: [PATCH 1/3] Change ledger guardian signing to cross window --- .../sdk-dapp/internal-processes/guardians.md | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md b/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md index 4171f4c4c..799602600 100644 --- a/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md +++ b/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md @@ -44,16 +44,27 @@ All signing providers (except Ledger) take care internally of formatting the tra After formatting the transaction and applying the signature provided by the Ledger device, the transaction must be signed by the Guardian. This is done by sending the transaction (or transactions array) to the web wallet 2FA hook. The web wallet will then prompt the user to sign the transaction with the Guardian account, and respond with the signed transaction. ```js -import { WalletProvider } from '@multiversx/sdk-web-wallet-provider'; - -const walletProvider = new WalletProvider('https://wallet.multiversx.com/dapp/init'); -walletProvider.guardTransactions(transactions, { - callbackUrl: encodeURIComponent('https://my-dapp.com'), -}); +import { CrossWindowProvider } from "@multiversx/sdk-web-wallet-cross-window-provider"; + +// instantiate wallet cross-window provider +await CrossWindowProvider.getInstance().init(); +const crossWindowProvider = CrossWindowProvider.getInstance(); +crossWindowProvider.setWalletUrl(WALLET_PROVIDER_URL); + +// set sender +const ledgerSenderBech32 = await this.hwProvider.getAddress(); +const ledgerSender = new Address(senderBech32); +const sender = ledgerSender; // or "erd1...abc" witohut awaiting `getAddress()` +crossWindowProvider.setAddress(sender); + +// the user signs transactions on ledger so we need to perform an extra +// user action with a confirmation popup so the browser opens the new tab +crossWindowProvider.setShouldShowConsentPopup(true); + +const guardedTransactions = await crossWindowProvider.guardTransactions( + signedTransactions +); ``` -Once transactions are back from the web wallet, they can be retrieved as follows: -```js -const signedTransactions = new WalletProvider('https://wallet.multiversx.com/dapp/init').getTransactionsFromWalletUrl(); -``` +For a working example see the code used in [signing-providers](https://github.com/multiversx/mx-sdk-js-examples/blob/594465208fd3a9d5c57bca8ecc94f2dc59cbf4a6/signing-providers/src/hw.js#L87) From 428e496e92366617f7f7647ff1d39d8dfd3a2457 Mon Sep 17 00:00:00 2001 From: Tudor Morar Date: Wed, 25 Sep 2024 17:18:58 +0300 Subject: [PATCH 2/3] Resolve comments --- .../sdk-dapp/internal-processes/guardians.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md b/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md index 799602600..d2f05ff22 100644 --- a/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md +++ b/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md @@ -53,18 +53,13 @@ crossWindowProvider.setWalletUrl(WALLET_PROVIDER_URL); // set sender const ledgerSenderBech32 = await this.hwProvider.getAddress(); -const ledgerSender = new Address(senderBech32); -const sender = ledgerSender; // or "erd1...abc" witohut awaiting `getAddress()` +const sender = Address.newFromBech32(ledgerSenderBech32); // or "erd1...abc" witohut awaiting `getAddress()` crossWindowProvider.setAddress(sender); -// the user signs transactions on ledger so we need to perform an extra -// user action with a confirmation popup so the browser opens the new tab +// To complete the transaction, the user will sign using their Ledger device. This requires an additional step: a confirmation popup will appear, prompting the user to approve the action, after which a new tab will open in the browser. crossWindowProvider.setShouldShowConsentPopup(true); const guardedTransactions = await crossWindowProvider.guardTransactions( signedTransactions ); -``` - -For a working example see the code used in [signing-providers](https://github.com/multiversx/mx-sdk-js-examples/blob/594465208fd3a9d5c57bca8ecc94f2dc59cbf4a6/signing-providers/src/hw.js#L87) - +``` \ No newline at end of file From 764cd4b38c8fde1b3d80cceef1372bae4fa14bfc Mon Sep 17 00:00:00 2001 From: Tudor Morar Date: Wed, 25 Sep 2024 17:35:06 +0300 Subject: [PATCH 3/3] Bring back comment --- docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md b/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md index d2f05ff22..70140dde7 100644 --- a/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md +++ b/docs/sdk-and-tools/sdk-dapp/internal-processes/guardians.md @@ -62,4 +62,7 @@ crossWindowProvider.setShouldShowConsentPopup(true); const guardedTransactions = await crossWindowProvider.guardTransactions( signedTransactions ); -``` \ No newline at end of file +``` + +For a working example see the code used in [signing-providers](https://github.com/multiversx/mx-sdk-js-examples/releases/tag/v0.9.0) +