callContractOffChain method

Future<Map<String, dynamic>> callContractOffChain(
  1. String walletAddress,
  2. String contractAddress,
  3. String data, {
  4. String? network = "fuse",
  5. Map? transactionBody,
  6. num? ethAmount,
  7. BigInt? amountInWei,
  8. Map? txMetadata,
})

Implementation

Future<Map<String, dynamic>> callContractOffChain(
  String walletAddress,
  String contractAddress,
  String data, {
  String? network = "fuse",
  Map? transactionBody,
  num? ethAmount,
  BigInt? amountInWei,
  Map? txMetadata,
}) async {
  EthereumAddress wallet = EthereumAddress.fromHex(walletAddress);
  EthereumAddress contract = EthereumAddress.fromHex(contractAddress);
  Uint8List callContractData;
  String encodedCallContractData;
  String nonce = await getNonceForRelay();
  DeployedContract TransferManagerContract =
      await _contract('TransferManager', _transferManagerContractAddress);
  if (ethAmount != null) {
    Decimal ethAmountDecimal = Decimal.parse(ethAmount.toString());
    Decimal decimals = Decimal.parse(pow(10, 18).toString());
    BigInt amount = BigInt.parse((ethAmountDecimal * decimals).toString());
    callContractData =
        TransferManagerContract.function('callContract').encodeCall([
      wallet,
      contract,
      amount,
      HEX.decode(data),
    ]);
    encodedCallContractData = '0x' + HEX.encode(callContractData);
  } else {
    callContractData =
        TransferManagerContract.function('callContract').encodeCall([
      wallet,
      contract,
      amountInWei,
      HEX.decode(data),
    ]);
    encodedCallContractData = '0x' + HEX.encode(callContractData);
  }

  String signature = await signOffChain(
    _transferManagerContractAddress,
    walletAddress,
    BigInt.from(0),
    encodedCallContractData,
    nonce,
    BigInt.from(0),
    BigInt.from(_defaultGasLimit),
  );

  return {
    "walletAddress": walletAddress,
    "methodData": encodedCallContractData,
    "communityAddress": _defaultCommunityContractAddress,
    "nonce": nonce,
    "network": network,
    "methodName": "callContract",
    "gasPrice": 0,
    "gasLimit": _defaultGasLimit,
    "signature": signature,
    "walletModule": "TransferManager",
    "transactionBody": transactionBody,
    "txMetadata": txMetadata,
  };
}