Skip to content

Commit

Permalink
support walletconnect v2
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewwahid committed Jul 4, 2023
1 parent 305aa8a commit 8a6041e
Show file tree
Hide file tree
Showing 32 changed files with 1,177 additions and 235 deletions.
4 changes: 3 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ OPTIMISM_PAYMASTER=
SEPOLIA_PAYMASTER=
POLYGON_PAYMASTER=

#Magic Link (optional) - Get a magic link key to try email recovery on testnet
# Magic Link (optional) - Get a magic link key to try email recovery on testnet
MAGIC_API_KEY=
# Wallet Connect (optional) - Get a wallet connect key to support wallet connect v2
WALLET_CONNECT_PROJECT_ID=
4 changes: 2 additions & 2 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
buildscript {
ext.kotlin_version = '1.6.10'
ext.kotlin_version = '1.8.0'
repositories {
google()
mavenCentral()
}

dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath 'com.android.tools.build:gradle:7.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
Expand Down
2 changes: 2 additions & 0 deletions lib/config/env.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class Env {
static late String optimismGoerliRpcEndpoint;
static late String sepoliaRpcEndpoint;
//
static late String walletConnectProjectId;
static late String magicApiKey;

static String getNodeUrlByChainId(int chainId){
Expand Down Expand Up @@ -79,5 +80,6 @@ class Env {
mainnetRpcEndpoint = dotenv.get('MAINNET_NODE_RPC_ENDPOINT', fallback: '-');
//
magicApiKey = dotenv.get('MAGIC_API_KEY', fallback: '-');
walletConnectProjectId = dotenv.get('WALLET_CONNECT_PROJECT_ID', fallback: '-');
}
}
5 changes: 3 additions & 2 deletions lib/controller/persistent_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -276,9 +276,10 @@ class PersistentData {
}
}

static Account? getAccount({required EthereumAddress address, required int chainId}){
static Account? getAccount({required EthereumAddress address, int? chainId}){
for (Account account in accounts){
if (account.address == address && account.chainId == chainId){
if (account.address == address){
if (chainId != null && account.chainId != chainId) continue;
return account;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'dart:convert';
import 'package:candide_mobile_app/config/network.dart';
import 'package:candide_mobile_app/controller/persistent_data.dart';
import 'package:candide_mobile_app/controller/token_info_storage.dart';
import 'package:candide_mobile_app/controller/wallet_connect/wc_peer_meta.dart';
import 'package:candide_mobile_app/models/batch.dart';
import 'package:candide_mobile_app/models/gnosis_transaction.dart';
import 'package:candide_mobile_app/screens/home/activity/components/transaction_activity_details_card.dart';
Expand Down Expand Up @@ -196,7 +197,22 @@ class WalletConnectController {
builder: (context) => SingleChildScrollView(
controller: ModalScrollController.of(context),
child: WCSessionRequestSheet(
connector: connector,
onApprove: (){
connector.approveSession(accounts: [PersistentData.selectedAccount.address.hexEip55], chainId: Networks.selected().chainId.toInt());
Get.back();
Utils.showBottomStatus(
"Connected to ${connector.session.peerMeta!.name}",
"Please check the application",
loading: false,
success: true,
);
},
onReject: (){
connector.rejectSession();
Get.back();
},
isConforming: true,
peerMeta: WCPeerMeta.fromPeerMeta(connector.session.peerMeta),
),
),
);
Expand All @@ -210,8 +226,9 @@ class WalletConnectController {

void _ethSendTransaction(JsonRpcRequest? payload) async {
if (payload == null) return;
WCPeerMeta peerMeta = WCPeerMeta.fromPeerMeta(connector.session.peerMeta);
var cancelLoad = Utils.showLoading();
Batch wcBatch = Batch(account: PersistentData.selectedAccount, network: Networks.selected());
Batch wcBatch = await Batch.create(account: PersistentData.selectedAccount, refreshAccountData: true);
String hexValue = "0x00";
String gasLimit = "0x00";
String data = "0x";
Expand Down Expand Up @@ -271,10 +288,10 @@ class WalletConnectController {
leading: isTransfer ? SendReviewLeadingWidget(
token: TokenInfoStorage.getTokenBySymbol("ETH")!,
value: value,
connector: connector,
peerMeta: peerMeta,
) : WCReviewLeading(
connector: connector,
request: payload,
peerMeta: peerMeta,
params: payload.params!,
isMultiCall: false,
),
tableEntriesData: tableEntriesData,
Expand All @@ -298,9 +315,10 @@ class WalletConnectController {
void walletSendFunctionCallBundle(JsonRpcRequest? payload) async {
if (payload == null) return;
if (payload.params == null) return;
WCPeerMeta peerMeta = WCPeerMeta.fromPeerMeta(connector.session.peerMeta);
//print(payload.toJson());
var cancelLoad = Utils.showLoading();
Batch wcBatch = Batch(account: PersistentData.selectedAccount, network: Networks.selected());
Batch wcBatch = await Batch.create(account: PersistentData.selectedAccount, refreshAccountData: true);
BigInt totalValue = BigInt.zero;
for (Map call in payload.params![0]["calls"]){
String hexValue = "0x00";
Expand Down Expand Up @@ -358,8 +376,8 @@ class WalletConnectController {
return TransactionReviewSheet(
modalId: "wc_transaction_review_modal",
leading: WCReviewLeading(
connector: connector,
request: payload,
peerMeta: peerMeta,
params: payload.params!,
isMultiCall: true,
),
tableEntriesData: tableEntriesData,
Expand Down Expand Up @@ -407,7 +425,7 @@ class WalletConnectController {
Get.put<ScrollController>(ModalScrollController.of(context)!, tag: "transaction_details_modal");
return TransactionActivityDetailsCard(
leading: WCBundleStatusLeading(
connector: connector,
peerMeta: WCPeerMeta.fromPeerMeta(connector.session.peerMeta),
),
transaction: activity,
);
Expand Down Expand Up @@ -438,10 +456,11 @@ class WalletConnectController {
}

void _showSignatureRequest(int requestId, String type, String payload) async {
WCPeerMeta peerMeta = WCPeerMeta.fromPeerMeta(connector.session.peerMeta);
if (!PersistentData.accountStatus.proxyDeployed){
await showDialog(
context: Get.context!,
builder: (_) => WCSignatureRejectDialog(connector: connector,),
builder: (_) => WCSignatureRejectDialog(peerMeta: peerMeta,),
useRootNavigator: false,
);
connector.rejectRequest(id: requestId);
Expand All @@ -453,10 +472,17 @@ class WalletConnectController {
builder: (context) {
Get.put<ScrollController>(ModalScrollController.of(context)!, tag: "wc_signature_modal");
return SignatureRequestSheet(
requestId: requestId,
connector: connector,
peerMeta: peerMeta,
signatureType: type,
payload: payload,
onReject: () async {
await connector.rejectRequest(id: requestId);
Get.back();
},
onSign: (signature) async {
await connector.approveRequest(id: requestId, result: signature);
Get.back();
},
);
},
);
Expand Down
Loading

0 comments on commit 8a6041e

Please sign in to comment.