Skip to content

Commit

Permalink
feat: Attempt to handle signOnChain verification
Browse files Browse the repository at this point in the history
  • Loading branch information
bibash28 committed Jul 10, 2023
1 parent 8f19abd commit cf5b6a5
Show file tree
Hide file tree
Showing 12 changed files with 295 additions and 75 deletions.
6 changes: 5 additions & 1 deletion lib/app/shared/enum/type/connection_bridge_type.dart
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
enum ConnectionBridgeType { beacon, walletconnect }
enum ConnectionBridgeType {
beacon,
walletconnect,
polygonIdSendTranscation,
}
1 change: 1 addition & 0 deletions lib/app/view/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ class App extends StatelessWidget {
polygonId: PolygonId(),
credentialsCubit: context.read<CredentialsCubit>(),
profileCubit: context.read<ProfileCubit>(),
walletCubit: context.read<WalletCubit>(),
),
),
BlocProvider<ScanCubit>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ class ConfirmConnectionCubit extends Cubit<ConfirmConnectionState> {

/// dApp saved onSessionConnect function in wallet connect cubit
break;
case ConnectionBridgeType.polygonIdSendTranscation:
break;
}
emit(
Expand Down Expand Up @@ -145,6 +147,8 @@ class ConfirmConnectionCubit extends Cubit<ConfirmConnectionState> {
),
);
break;
case ConnectionBridgeType.polygonIdSendTranscation:
break;
}
emit(state.copyWith(appStatus: AppStatus.goBack));
}
Expand Down
96 changes: 85 additions & 11 deletions lib/dashboard/connection/operation/cubit/operation_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import 'dart:convert';
import 'package:altme/app/app.dart';
import 'package:altme/connection_bridge/connection_bridge.dart';
import 'package:altme/dashboard/home/home.dart';
import 'package:altme/polygon_id/cubit/polygon_id_cubit.dart';
import 'package:altme/wallet/wallet.dart';
import 'package:beacon_flutter/beacon_flutter.dart';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:key_generator/key_generator.dart';
import 'package:secure_storage/secure_storage.dart';
import 'package:tezart/tezart.dart';
import 'package:web3dart/web3dart.dart';

Expand All @@ -27,7 +29,9 @@ class OperationCubit extends Cubit<OperationState> {
required this.nftCubit,
required this.tokensCubit,
required this.walletConnectCubit,
required this.polygonIdCubit,
required this.connectedDappRepository,
required this.secureStorageProvider,
}) : super(const OperationState());

final WalletCubit walletCubit;
Expand All @@ -38,12 +42,12 @@ class OperationCubit extends Cubit<OperationState> {
final NftCubit nftCubit;
final TokensCubit tokensCubit;
final WalletConnectCubit walletConnectCubit;
final PolygonIdCubit polygonIdCubit;
final ConnectedDappRepository connectedDappRepository;
final SecureStorageProvider secureStorageProvider;

final log = getLogger('OperationCubit');

//late WCClient? wcClient;

Future<void> initialise(ConnectionBridgeType connectionBridgeType) async {
if (isClosed) return;

Expand Down Expand Up @@ -71,6 +75,10 @@ class OperationCubit extends Cubit<OperationState> {
}

break;

case ConnectionBridgeType.polygonIdSendTranscation:
dAppName = 'Polygon Id';
break;
}

log.i('dAppName - $dAppName');
Expand All @@ -79,6 +87,7 @@ class OperationCubit extends Cubit<OperationState> {

switch (connectionBridgeType) {
case ConnectionBridgeType.beacon:
case ConnectionBridgeType.polygonIdSendTranscation:
await getUsdPrice(connectionBridgeType);
break;
case ConnectionBridgeType.walletconnect:
Expand Down Expand Up @@ -132,9 +141,14 @@ class OperationCubit extends Cubit<OperationState> {
emit(state.copyWith(usdRate: xtzUsdPrice));
break;
case ConnectionBridgeType.walletconnect:
case ConnectionBridgeType.polygonIdSendTranscation:
log.i('fetching evm USDprice');

final symbol = state.cryptoAccountData!.blockchainType.symbol;
var symbol = 'ETH';

if (connectionBridgeType == ConnectionBridgeType.walletconnect) {
symbol = state.cryptoAccountData!.blockchainType.symbol;
}

final response = await dioClient.get(Urls.ethPrice(symbol))
as Map<String, dynamic>;
Expand Down Expand Up @@ -212,11 +226,31 @@ class OperationCubit extends Cubit<OperationState> {
1e6;
break;
case ConnectionBridgeType.walletconnect:
final CryptoAccountData transactionAccountData =
state.cryptoAccountData!;

final EtherAmount ethAmount =
walletConnectCubit.state.transaction!.value!;
amount = MWeb3Client.formatEthAmount(amount: ethAmount.getInWei);

final String web3RpcURL = await web3RpcMainnetInfuraURL();
late String web3RpcURL;

switch (transactionAccountData.blockchainType) {
case BlockchainType.tezos:
throw Exception();
case BlockchainType.ethereum:
web3RpcURL = await web3RpcMainnetInfuraURL();
break;
case BlockchainType.fantom:
web3RpcURL = FantomNetwork.mainNet().rpcNodeUrl;
break;
case BlockchainType.polygon:
web3RpcURL = PolygonNetwork.mainNet().rpcNodeUrl;
break;
case BlockchainType.binance:
web3RpcURL = BinanceNetwork.mainNet().rpcNodeUrl;
break;
}
log.i('web3RpcURL - $web3RpcURL');

final feeData = await MWeb3Client.estimateEthereumFee(
Expand All @@ -231,18 +265,29 @@ class OperationCubit extends Cubit<OperationState> {

fee = MWeb3Client.formatEthAmount(amount: feeData);
break;
case ConnectionBridgeType.polygonIdSendTranscation:
final web3RpcURL = await web3RpcMainnetInfuraURL();

log.i(polygonIdCubit.state.transaction);
final feeData = await MWeb3Client.estimateEthereumFee(
web3RpcURL: web3RpcURL,
sender: polygonIdCubit.state.transaction!.from!,
reciever: polygonIdCubit.state.transaction!.to!,
amount: polygonIdCubit.state.transaction!.value!,
data: utf8.decode(polygonIdCubit.state.transaction!.data!),
);

fee = MWeb3Client.formatEthAmount(amount: feeData);
amount = MWeb3Client.formatEthAmount(
amount: polygonIdCubit.state.transaction!.value!.getInWei,
);
break;
}

log.i('amount - $amount');
log.i('fee - $fee');

emit(
state.copyWith(
status: AppStatus.idle,
amount: amount,
fee: fee,
),
);
emit(state.copyWith(status: AppStatus.idle, amount: amount, fee: fee));
} catch (e) {
log.e('cost estimation failure , e: $e');
if (e is MessageHandler) {
Expand Down Expand Up @@ -396,6 +441,32 @@ class OperationCubit extends Cubit<OperationState> {
.complete(transactionHash);
success = true;

break;

case ConnectionBridgeType.polygonIdSendTranscation:
final currentAccount = walletCubit.state.currentAccount;

if (currentAccount == null) {
throw ResponseMessage(
ResponseString
.RESPONSE_STRING_SOMETHING_WENT_WRONG_TRY_AGAIN_LATER,
);
}

final String rpcUrl = await web3RpcMainnetInfuraURL();

await MWeb3Client.sendEthereumTransaction(
chainId: BlockchainType.ethereum.chainId,
web3RpcURL: rpcUrl,
privateKey: currentAccount.secretKey,
sender: polygonIdCubit.state.transaction!.from!,
reciever: polygonIdCubit.state.transaction!.to!,
amount: polygonIdCubit.state.transaction!.value!,
data: utf8.decode(polygonIdCubit.state.transaction!.data!),
);

success = true;

break;
}

Expand Down Expand Up @@ -473,6 +544,9 @@ class OperationCubit extends Cubit<OperationState> {
walletConnectCubit.completer[walletConnectCubit.completer.length - 1]!
.complete('Failed');
break;
case ConnectionBridgeType.polygonIdSendTranscation:
log.i('polygonIdSendTranscation rejected');
break;
}

emit(state.copyWith(status: AppStatus.goBack));
Expand Down
23 changes: 16 additions & 7 deletions lib/dashboard/connection/operation/view/operation_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ import 'package:altme/app/app.dart';
import 'package:altme/connection_bridge/connection_bridge.dart';
import 'package:altme/dashboard/dashboard.dart';
import 'package:altme/l10n/l10n.dart';
import 'package:altme/polygon_id/cubit/polygon_id_cubit.dart';
import 'package:altme/route/route.dart';
import 'package:altme/wallet/cubit/wallet_cubit.dart';
import 'package:beacon_flutter/beacon_flutter.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:key_generator/key_generator.dart';
import 'package:key_generator/key_generator.dart';
import 'package:secure_storage/secure_storage.dart';

class OperationPage extends StatelessWidget {
Expand Down Expand Up @@ -42,7 +43,9 @@ class OperationPage extends StatelessWidget {
nftCubit: context.read<NftCubit>(),
tokensCubit: context.read<TokensCubit>(),
walletConnectCubit: context.read<WalletConnectCubit>(),
polygonIdCubit: context.read<PolygonIdCubit>(),
connectedDappRepository: ConnectedDappRepository(getSecureStorage),
secureStorageProvider: getSecureStorage,
),
child: OperationView(connectionBridgeType: connectionBridgeType),
);
Expand Down Expand Up @@ -104,29 +107,35 @@ class _OperationViewState extends State<OperationView> {
}
},
builder: (context, state) {
final BeaconRequest? beaconRequest =
context.read<BeaconCubit>().state.beaconRequest;

final WalletConnectState walletConnectState =
context.read<WalletConnectCubit>().state;

late String sender;
late String reciever;

late String? symbol;

switch (widget.connectionBridgeType) {
case ConnectionBridgeType.beacon:
final BeaconRequest? beaconRequest =
context.read<BeaconCubit>().state.beaconRequest;
symbol = 'XTZ';
sender = beaconRequest!.request!.sourceAddress!;
reciever = beaconRequest.operationDetails!.first.destination!;
break;

case ConnectionBridgeType.walletconnect:
final WalletConnectState walletConnectState =
context.read<WalletConnectCubit>().state;
symbol = state.cryptoAccountData?.blockchainType.symbol;
sender = walletConnectState.transaction!.from!.toString();
reciever = walletConnectState.transaction!.to!.toString();
break;

case ConnectionBridgeType.polygonIdSendTranscation:
final PolygonIdState polygonIdState =
context.read<PolygonIdCubit>().state;
symbol = 'ETH';
sender = polygonIdState.transaction!.from!.toString();
reciever = polygonIdState.transaction!.to!.toString();
break;
}

String message = '';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ class SignPayloadCubit extends Cubit<SignPayloadState> {
}
signingType = SigningType.raw;
break;
case ConnectionBridgeType.polygonIdSendTranscation:
break;
}

log.i('payloadMessage - $payloadMessage');
Expand All @@ -122,6 +124,8 @@ class SignPayloadCubit extends Cubit<SignPayloadState> {
dAppName = savedDappData.sessionData!.peer.metadata.name;
}

break;
case ConnectionBridgeType.polygonIdSendTranscation:
break;
}

Expand Down Expand Up @@ -293,6 +297,8 @@ class SignPayloadCubit extends Cubit<SignPayloadState> {
);
}

break;
case ConnectionBridgeType.polygonIdSendTranscation:
break;
}

Expand Down Expand Up @@ -369,6 +375,8 @@ class SignPayloadCubit extends Cubit<SignPayloadState> {
walletConnectCubit.completer[walletConnectCubit.completer.length - 1]!
.complete('Failed');
break;
case ConnectionBridgeType.polygonIdSendTranscation:
break;
}
emit(state.copyWith(status: AppStatus.goBack));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,11 @@ class PolygonIdVerificationPage extends StatelessWidget {

final Iden3MessageEntity iden3MessageEntity;

static Route<dynamic> route({
required Iden3MessageEntity iden3MessageEntity,
}) =>
static Route<dynamic> route(
{required Iden3MessageEntity iden3MessageEntity}) =>
MaterialPageRoute<void>(
builder: (context) => PolygonIdVerificationPage(
iden3MessageEntity: iden3MessageEntity,
),
builder: (context) =>
PolygonIdVerificationPage(iden3MessageEntity: iden3MessageEntity),
settings: const RouteSettings(name: '/PolygonIdVerification'),
);

Expand Down Expand Up @@ -68,7 +66,15 @@ class _PolygonIdVerificationViewState extends State<PolygonIdVerificationView> {
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
final body = widget.iden3MessageEntity.body as AuthBodyRequest;
final body = widget.iden3MessageEntity.body;

late int scopeLength;

if (body is AuthBodyRequest) {
scopeLength = body.scope!.length;
} else if (body is ContractFunctionCallBodyRequest) {
scopeLength = body.scope!.length;
}
// TODO(all): change UI
return BlocConsumer<PolygonIdVerificationCubit, PolygonIdVerificationState>(
listener: (context, state) {
Expand Down Expand Up @@ -107,9 +113,17 @@ class _PolygonIdVerificationViewState extends State<PolygonIdVerificationView> {
ListView.builder(
physics: const ScrollPhysics(),
shrinkWrap: true,
itemCount: body.scope!.length,
itemCount: scopeLength,
itemBuilder: (context, index) {
final proofScopeRequest = body.scope![index];
late ProofScopeRequest proofScopeRequest;

if (body is AuthBodyRequest) {
proofScopeRequest = body.scope![index];
} else if (body is ContractFunctionCallBodyRequest) {
proofScopeRequest = body.scope![index];
}

final String? queryType = proofScopeRequest.query.type!;

// final proofTypeMsg =
// getSignatureType(proofScopeRequest.circuitId);
Expand Down Expand Up @@ -247,7 +261,7 @@ class _PolygonIdVerificationViewState extends State<PolygonIdVerificationView> {
Expanded(
child: Text(
'${l10n.from} ${separateUppercaseWords(
proofScopeRequest.query.type!,
queryType!,
)}',
textAlign: TextAlign.start,
style: Theme.of(context)
Expand Down Expand Up @@ -296,7 +310,6 @@ class _PolygonIdVerificationViewState extends State<PolygonIdVerificationView> {
.authenticateOrGenerateProof(
iden3MessageEntity:
widget.iden3MessageEntity,
isGenerateProof: true,
);
},
restrictToBack: false,
Expand Down
Loading

0 comments on commit cf5b6a5

Please sign in to comment.