transferNft method
Implementation
Future<DC<Exception, Stream<SmartWalletEvent>>> transferNft(
EthPrivateKey credentials,
String nftContractAddress,
String recipientAddress,
num tokenId, {
bool? isSafeTransfer = false,
String transactionData = '0x',
Map<String, dynamic>? transactionDetails = const {},
}) async {
final String methodName = 'transferNFT';
final String walletModule = 'NftTransfer';
final String walletModuleAddress = smartWallet.walletModules.nftTransfer!;
final String data = ContractsUtils.encodedDataForContractCall(
walletModule,
EthereumAddress.fromHex(walletModuleAddress),
methodName,
[
EthereumAddress.fromHex(smartWallet.smartWalletAddress),
EthereumAddress.fromHex(nftContractAddress),
EthereumAddress.fromHex(recipientAddress),
BigInt.from(tokenId),
isSafeTransfer,
hexToBytes(transactionData),
],
include0x: true,
);
final Map<String, dynamic> transactionBody = Map.from({
"from": smartWallet.smartWalletAddress,
"to": recipientAddress,
'tokenAddress': nftContractAddress,
"status": 'pending',
...?transactionDetails,
});
final String nonce = await _getNonce();
final String signature = ContractsUtils.signOffChain(
credentials,
walletModuleAddress,
smartWallet.smartWalletAddress,
data,
nonce,
);
final Relay relayDto = Relay(
walletModuleAddress: walletModuleAddress,
walletAddress: smartWallet.smartWalletAddress,
data: data,
nonce: nonce,
methodName: methodName,
signature: signature,
walletModule: walletModule,
transactionBody: transactionBody,
);
return _relay(relayDto);
}