LCOV - code coverage report
Current view: top level - crypto/evm/entities/contract - contract_abi.dart (source / functions) Coverage Total Hit
Test: lcov.info Lines: 91.9 % 37 34
Test Date: 2025-01-30 01:10:00 Functions: - 0 0

            Line data    Source code
       1              : import 'dart:convert';
       2              : import 'package:collection/collection.dart';
       3              : import 'package:walletkit_dart/walletkit_dart.dart';
       4              : 
       5              : class ContractABI {
       6              :   final List<LocalContractFunction> functions;
       7              :   final List<ContractEvent> events;
       8              : 
       9            4 :   const ContractABI(this.functions, this.events);
      10              : 
      11            4 :   factory ContractABI.fromAbi(String jsonAbi) {
      12            4 :     final abi = jsonDecode(jsonAbi);
      13            4 :     final functions = <LocalContractFunction>[];
      14            4 :     final events = <ContractEvent>[];
      15            8 :     for (final item in abi) {
      16            4 :       final type = item['type'];
      17            4 :       final name = item['name'];
      18              : 
      19              :       if (name == null) {
      20              :         continue;
      21              :       }
      22              : 
      23           12 :       if (type == "fallback" || type == "constructor" || type == "error") {
      24              :         continue;
      25              :       }
      26              : 
      27            4 :       if (type == "event") {
      28            3 :         final anonymous = item['anonymous'] as bool;
      29            3 :         final parameters = <FunctionParam>[];
      30              : 
      31            6 :         for (final param in item["inputs"]) {
      32            6 :           parameters.add(FunctionParam.fromJson(param));
      33              :         }
      34            3 :         events.add(
      35            3 :           ContractEvent(
      36              :             name: name,
      37              :             parameters: parameters,
      38              :             anonymous: anonymous,
      39              :           ),
      40              :         );
      41              :         continue;
      42              :       }
      43            4 :       final stateMutability = StateMutability.fromString(
      44            4 :         item['stateMutability'] as String,
      45              :       );
      46            4 :       final parameters = <FunctionParam>[];
      47            4 :       final outputs = <FunctionParam>[];
      48              : 
      49            8 :       for (final param in item["inputs"]) {
      50            8 :         parameters.add(FunctionParam.fromJson(param));
      51              :       }
      52            4 :       if (item["outputs"] != null) {
      53            8 :         for (final param in item["outputs"]) {
      54            8 :           outputs.add(FunctionParam.fromJson(param));
      55              :         }
      56              :       }
      57            4 :       functions.add(
      58            4 :         LocalContractFunction(
      59              :           name: name,
      60              :           parameters: parameters,
      61              :           stateMutability: stateMutability,
      62              :           outputTypes: outputs,
      63              :         ),
      64              :       );
      65              :     }
      66            4 :     return ContractABI(functions, events);
      67              :   }
      68              : 
      69            2 :   LocalContractFunction? getFunction(String functionName) {
      70           10 :     return functions.singleWhereOrNull((e) => e.name == functionName);
      71              :   }
      72              : 
      73            0 :   LocalContractFunction? getFunctionFromSelector(String selector) {
      74            0 :     return functions
      75            0 :         .singleWhereOrNull((e) => e.functionSelectorHex == selector);
      76              :   }
      77              : }
      78              : 
      79              : class ContractEvent {
      80              :   final String name;
      81              :   final List<FunctionParam> parameters;
      82              :   final bool anonymous;
      83              : 
      84            3 :   const ContractEvent({
      85              :     required this.name,
      86              :     required this.parameters,
      87              :     required this.anonymous,
      88              :   });
      89              : }
      90              : 
      91              : enum StateMutability {
      92              :   pure,
      93              :   view,
      94              :   nonpayable,
      95              :   payable;
      96              : 
      97            4 :   static StateMutability fromString(String type) {
      98            8 :     return StateMutability.values.singleWhere((e) {
      99            8 :       return e.name == type;
     100              :     });
     101              :   }
     102              : }
        

Generated by: LCOV version 2.0-1