async def METHOD_NAME(coin, wallet, destination, amount, divisibility):
    if not coin.is_eth_based:
        if amount == SEND_ALL:
            amount = "!"
        raw_tx = await coin.pay_to(destination, amount, broadcast=False)
    else:
        if wallet.contract:
            if amount == SEND_ALL:
                amount = Decimal(await coin.server.readcontract(wallet.contract, "balanceOf", wallet.xpub)) / Decimal(
                    10**divisibility
                )
            raw_tx = await coin.server.transfer(wallet.contract, destination, amount, unsigned=True)
        else:
            if amount == SEND_ALL:
                request_amount = Decimal((await coin.balance())["confirmed"])
                estimated_fee = Decimal(
                    await coin.server.get_default_fee(await coin.server.payto(destination, amount, unsigned=True))
                )
                request_amount -= estimated_fee
            raw_tx = await coin.server.payto(destination, amount, unsigned=True)
    return raw_tx