swapTokens method
Future<DC<Exception, Stream<SmartWalletEvent> > >
swapTokens(
- EthPrivateKey credentials,
- TradeRequest tradeRequest
Implementation
Future<DC<Exception, Stream<SmartWalletEvent>>> swapTokens(
EthPrivateKey credentials,
TradeRequest tradeRequest,
) async {
final response = await _tradeModule.quote(
tradeRequest,
);
if (response.hasError) {
return DC.error(response.error!);
}
final String data = strip0x(response.data!.data);
final String spender = response.data!.to;
final String sellTokenAddress = response.data!.sellTokenAddress;
final String value = response.data!.value;
final Map<String, dynamic> transactionBody = Map.from({
"to": spender,
"status": 'pending',
"isSwap": true,
});
if (sellTokenAddress.toLowerCase() ==
Variables.NATIVE_TOKEN_ADDRESS.toLowerCase()) {
return callContract(
credentials,
spender,
data,
value: BigInt.parse(value),
transactionBody: transactionBody,
);
} else {
final tokenDetailsRes = await ContractsUtils.getERC20TokenDetails(
web3client,
EthereumAddress.fromHex(
sellTokenAddress,
),
);
return approveTokenAndCallContract(
credentials,
sellTokenAddress,
spender,
AmountFormat.formatValue(
tradeRequest.inputAmount,
tokenDetailsRes.decimals,
),
data,
transactionBody: transactionBody,
);
}
}