getDiscussionFromSCAddress method

Future<AEDiscussion?> getDiscussionFromSCAddress({
  1. required ApiService apiService,
  2. required String discussionSCAddress,
  3. required KeyPair keyPair,
})

Implementation

Future<AEDiscussion?> getDiscussionFromSCAddress({
  required ApiService apiService,
  required String discussionSCAddress,
  required KeyPair keyPair,
}) async {
  final smartContractMap =
      await apiService.getTransaction([discussionSCAddress]);
  if (smartContractMap[discussionSCAddress] == null) {
    return null;
  }

  try {
    final discussionKeyAccess = await getDiscussionKeyAccess(
      apiService: apiService,
      discussionSCAddress: discussionSCAddress,
      keyPair: keyPair,
    );

    final smartContract = smartContractMap[discussionSCAddress];

    final cryptedContent = base64.decode(smartContract!.data!.content!);

    final content = utf8.decode(
      aesDecrypt(cryptedContent, discussionKeyAccess),
    );
    final jsonContentMap = jsonDecode(content);

    final usersPubKey = <String>[];
    for (final authorizedPublicKey
        in smartContract.data!.ownerships[1].authorizedPublicKeys) {
      usersPubKey.add(authorizedPublicKey.publicKey!);
    }

    final aeDiscussion = AEDiscussion(
      address: smartContract.address!.address!,
      discussionName: jsonContentMap['discussionName'],
      usersPubKey: usersPubKey,
      adminPublicKey: List<String>.from(jsonContentMap['adminPublicKey']),
      timestampLastUpdate: smartContract.validationStamp!.timestamp!,
    );

    return aeDiscussion;
  } catch (e) {
    dev.log(e.toString());
    return null;
  }
}