callContract method

Future<DC<Exception, Stream<SmartWalletEvent>>> callContract(
  1. EthPrivateKey credentials,
  2. String contractAddress,
  3. String encodedData, {
  4. BigInt? value,
  5. Map<String, dynamic>? transactionBody,
})

Implementation

Future<DC<Exception, Stream<SmartWalletEvent>>> callContract(
  EthPrivateKey credentials,
  String contractAddress,
  String encodedData, {
  BigInt? value,
  Map<String, dynamic>? transactionBody,
}) async {
  final String walletModule = 'TransferManager';
  final String methodName = 'callContract';

  final String data = ContractsUtils.encodedDataForContractCall(
    walletModule,
    EthereumAddress.fromHex(smartWallet.walletModules.transferManager),
    methodName,
    [
      EthereumAddress.fromHex(smartWallet.smartWalletAddress),
      EthereumAddress.fromHex(contractAddress),
      value ?? BigInt.zero,
      HEX.decode(encodedData),
    ],
    include0x: true,
  );

  final String nonce = await _getNonce();
  final String signature = ContractsUtils.signOffChain(
    credentials,
    smartWallet.walletModules.transferManager,
    smartWallet.smartWalletAddress,
    data,
    nonce,
  );

  final Relay relayDto = Relay(
    walletModuleAddress: smartWallet.walletModules.transferManager,
    walletAddress: smartWallet.smartWalletAddress,
    data: data,
    nonce: nonce,
    methodName: methodName,
    signature: signature,
    walletModule: walletModule,
    transactionBody: transactionBody,
  );

  return _relay(relayDto);
}